Utils-Java自带消息摘要实现SHA加密

  项目对外提供接口时都会要求调用方根据服务器制定的加密规则传入签名字符串,再进行校验来判断请求来源的合法性,而SHA加密是比较常用的方法。

阅读更多

Log:日志工具输出log的使用

  日志的简单使用,三种方式。

  1. org.apache.commons.logging.Log
    1
    2
    3
    4
    5
    //import org.apache.commons.logging.Log;
    //import org.apache.commons.logging.LogFactory;
    private static final Log log = LogFactory.getLog(xxxServiceImpl.class);

    log.info(Object msg);
  2. log4j 1.x 版本:org.apache.log4j.Logger
    1
    2
    3
    4
    //org.apache.log4j.Logger;
    private final Logger logger = Logger.getLogger(this.getClass());

    logger.info(Object msg);
  3. log4j 2.x 版本:org.apache.logging.log4j.Logger
    1
    2
    3
    private static final Logger logger = LogManager.getLogger(xxxClass.class);

    logger.info(String msg);
阅读更多

Java 日志工具使用

日志的简单使用,两种方式:org.apache.commons.logging.Log日志包,org.apache.log4j.Logger日志包。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
private static final Log log = LogFactory.getLog(this.getClass());

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private static Logger logger = LoggerFactory.getLogger(xxxClass.class);

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
private static final Logger logger = LogManager.getLogger(xxxClass.class);

import java.util.logging.Logger;
Logger logger = Logger.getLogger("serviceLogger");

Utils-获取文件后缀名

  获取上传的文件,对文件名进行重命名时要用到。取得文件名,根据.切割,分别获得文件名称和文件类型(后缀名)。

阅读更多

JSP报错:According to TLD or attribute directive in tag file, attribute items does not accept any expressions

  JSP 在使用forEach标签时报错:According to TLD or attribute directive in tag file, attribute items does not accept any expressions。

原因:web.xmlweb-app_2_5.xsd版本大于2.3,需要使用jstl的扩展标签。
解决:jsp文件引用的jstl core标签库改为扩展标签库,
将:<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core"%>
替换成:<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt"%>
差异:2.5版本可以根据索引 ID 取出 List 里的单个值, 2.3版本就不行。

1
2
3
4
5
6
7
<body>
<!-- 从list集合中根据索引位取值 -->
<h3>${list[0] }</h3>
<h3>${list[1] }</h3>
<h3>${list[2] }</h3>
<h3>${list[3] }</h3>
</body>
阅读更多

在多线程中注入Spring Bean

  一个 Web 项目的Socket需用到多线程,每一个连接创建一条线程来处理数据。
  在多线程中需要用到 Spring 中的 Bean,如果直接用 Spring 注入是会报NullPointerException错误。原因是线程类无法提前委托给Spring管理,是在使用中创建的。

阅读更多

线程安全的定义与理解

什么是线程安全?什么是非线程安全,该如何定义和理解?什么场景会出现非线程安全?这几个问题在脑子里有个概念和轮廓,但要描述清楚始终不得,不全,非一两个例子代码。

阅读更多