tomcat配置redis实现session共享

版本:
apache-tomcat-7.0.75
需要3个jar包
从 http://files.cnblogs.com/files/linjiqin/tomcat-redis-session.rar 下载

放到tomcat下的lib目录下

1、配置tomcat:
修改 conf/context.xml 追加到<Context></Context>段中

<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
host="localhost"
port="6379"
database="0"
maxInactiveInterval="60" />

保存,有几个tomcat配置几个。
# database,redis 默认数据库从 0 开始 redis命令行中切换库用 select N
# maxInactiveInterval 单位秒,最大不活动时间,每接受一次请求就重新起算,直到不活动时间到达销毁session,或超过session的timeout值自动被销毁

安装redis略

1、修改redis:

追加一句
stop-writes-on-bgsave-error no
防止出现 http://blog.csdn.net/song19890528/article/details/38536871 文中的错误

测试,新建一个jsp页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>获取session id</title>
</head>
<body>
Session Id : <%= request.getSession().getId() %>
</body>
</html>

经过测试,当关闭浏览器后,浏览器session销毁,等待30分钟后,redis中的session也会销毁。

redis中默认会存放30分钟(客户端关闭浏览器后)是由 tomcat/conf/web.xml 文件控制

 <!-- ==================== Default Session Configuration ================= -->
 <!-- You can set the default session timeout (in minutes) for all newly -->
 <!-- created sessions by modifying the value below. -->

 <session-config>
 <session-timeout>30</session-timeout>
 </session-config>

tomcat日志中文乱码及时间差8个小时

原文来自:http://blog.csdn.net/u014738683/article/details/53785748

tomcat catalina.out中打印的信息包含中文,中文全部是?问号

解决过程:
1、安装中文语言包,设置语言。

yum install kde-l10n-Chinese #centos7安装中文语言(跟centos6不一样)

cat /etc/sysconfig/i18n
LANG="zh_CN.UTF-8"

还是乱码

2、修改tomcat脚本
vi /usr/local/tomcat/bin/catalina.sh
脚本上面添加一句:
JAVA_OPTS=”-Dfile.encoding=UTF8 -Dsun.jnu.encoding=UTF8″
变为:

#!/bin/sh
JAVA_OPTS="-Dfile.encoding=UTF8 -Dsun.jnu.encoding=UTF8"

重启解决

时间差问题:
系统时间及时区都没问题,但是日志里记录的时间相差8个小时
可能原因是跑在docker下,具体原因未知。
解决方法:
依旧修改/usr/local/tomcat/bin/catalina.sh
添加一句(我的方法):
-Duser.timezone=Asia/shanghai
或者(未测试):
-Duser.timezone=GMT+08
变为:

#!/bin/sh
JAVA_OPTS="-Dfile.encoding=UTF8 -Dsun.jnu.encoding=UTF8"
JAVA_OPTS="$JAVA_OPTS -Duser.timezone=Asia/shanghai"

重启,日期时间正确了

tomcat7启动非常慢 熵池阻塞变慢详解

原文来自:http://blog.csdn.net/hanjiyu/article/details/53128300

tomcat7+启动非常慢,Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took 花费很多时间

Tomcat 8启动很慢,且日志上无任何错误,在日志中查看到如下信息:

Log4j:[2015-10-29 15:47:11] INFO ReadProperty:172 - Loading properties file from class path resource [resources/jdbc.properties] Log4j:[2015-10-29 15:47:11] INFO ReadProperty:172 - Loading properties file from class path resource [resources/common.properties] 29-Oct-2015 15:52:53.587 INFO [localhost-startStop-1] org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom Creation of SecureRa

Tomcat 7/8都使用org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom类产生安全随机类SecureRandom的实例作为会话ID,这里花去了342秒,也即接近6分钟。

SHA1PRNG算法是基于SHA-1算法实现且保密性较强的伪随机数生成器。

在SHA1PRNG中,有一个种子产生器,它根据配置执行各种操作。

1)如果Java.security.egd属性或securerandom.source属性指定的是”file:/dev/random”或”file:/dev/urandom”,那么JVM会使用本地种子产生器NativeSeedGenerator,它会调用super()方法,即调用SeedGenerator.URLSeedGenerator(/dev/random)方法进行初始化。

2)如果java.security.egd属性或securerandom.source属性指定的是其它已存在的URL,那么会调用SeedGenerator.URLSeedGenerator(url)方法进行初始化。

这就是为什么我们设置值为”file:///dev/urandom”或者值为”file:/./dev/random”都会起作用的原因。

在这个实现中,产生器会评估熵池(entropy pool)中的噪声数量。随机数是从熵池中进行创建的。当读操作时,/dev/random设备会只返回熵池中噪声的随机字节。/dev/random非常适合那些需要非常高质量随机性的场景,比如一次性的支付或生成密钥的场景。

当熵池为空时,来自/dev/random的读操作将被阻塞,直到熵池收集到足够的环境噪声数据。这么做的目的是成为一个密码安全的伪随机数发生器,熵池要有尽可能大的输出。对于生成高质量的加密密钥或者是需要长期保护的场景,一定要这么做。

那么什么是环境噪声?

随机数产生器会手机来自设备驱动器和其它源的环境噪声数据,并放入熵池中。产生器会评估熵池中的噪声数据的数量。当熵池为空时,这个噪声数据的收集是比较花时间的。这就意味着,Tomcat在生产环境中使用熵池时,会被阻塞较长的时间。

解决

有两种解决办法:

1)在Tomcat环境中解决

可以通过配置JRE使用非阻塞的Entropy Source。

在catalina.sh中加入这么一行:-Djava.security.egd=file:/dev/./urandom 即可。

加入后再启动Tomcat,整个启动耗时下降到Server startup in 2912 ms。

2)在JVM环境中解决(实测)

打开$JAVA_PATH/jre/lib/security/java.security这个文件,找到下面的内容:

securerandom.source=file:/dev/urandom 
替换成

securerandom.source=file:/dev/./urandom

windows下搭建tomcat运行环境

软件版本:目前最新版本
jdk-8u5-windows-x64
http://download.oracle.com/otn-pub/java/jdk/8u5-b13/jdk-8u5-windows-x64.exe
apache-tomcat-8.0.8-windows-x64
http://mirror.bit.edu.cn/apache/tomcat/tomcat-8/v8.0.8/bin/apache-tomcat-8.0.8-windows-x64.zip

首先安装JDK,直接双击安装即可。
配置 “系统变量”:

变量名:JAVA_HOME
变量值:C:\Program Files\Java\jdk1.8.0_05 #jdk安装路径

变量名:CLASSPATH
变量值:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%TOMCAT_HOME%\BIN #注意前面有个 点

编辑 Path变量:
变量名:Path
变量值:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; #添加到变量值到原有变量最前面。

打开命令提示符,检查安装是否正确:
执行:java -version
看到java版本信息即可。

安装tomcat:
这里下载的 zip 包,直接解压即可。我这里放到C盘目录下。
设置tomcat环境变量:

变量名:TOMCAT_HOME
变量值:C:\apache-tomcat-8.0.8

启动tomcat:
c:\apache-tomcat-8.0.8\bin\startup.bat
会有一个tomcat的窗体一直显示着。

检查端口是否启动:
命令提示符执行:netstat -an | find “8080” | find “LIS”

打开浏览器,访问 http://localhost:8080/ ,会看到tomcat的页面。

将tomcat设置为开机启动:
C:\>cd apache-tomcat-8.0.8\bin\               #切换到tomcat的bin目录
C:\apache-tomcat-8.0.8\bin>service.bat  #直接执行可以看到用法
Usage: service.bat install/remove [service_name] [/user username]  #安装服务方法
C:\apache-tomcat-8.0.8\bin>service.bat install    #安装tomcat服务。

双击 C:\apache-tomcat-8.0.8\bin 下的 tomcat8w.exe 可以设置启动类型为自动,状态为启动。这样就可以随机启动了。