报修系统 - Tomcat问题项目
笔记
记录 Tomcat 升级遇到的问题。
2021-12-30 @Young Kbt
# 前言
因为项目的一期验收,漏洞扫描发现 Tocmat 的漏洞比较多,所以目前打算升级 Tomcat 来解决一些自带的漏洞。
Tomcat 是 9.0 版本,已经用了一年半,现在升级到 Tomcat 9.0.56 版本,是目前 9.X 的最新版。
如果本内容步骤遇到了问题,请看最下面的 问题,记录了我遇到的问题。
# 安装
安装不细说了,直接下载解压即可使用,值得一提的是,我们需要的 Tomcat 是 64-bit Windows.zip 的,而不是 .zip 的。
这两个有什么区别呢,64-bit Windows.zip 有需要的一些 .bat 文件如后台启动,而 .zip 没有。
# 配置
我们需要进行一些项目需要的配置,首先进入 Tomcat 安装目录下的 conf 目录,这个目录就是 Tomcat 全局的的配置目录。
# server.xml
打开 server.xml,大概在 69 行,将 8080 端口改为 80。因为项目是直接通过域名访问,80 是默认端口。
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
acceptCount="1500"
maxThreads="1600"
minSpareThreads="500"
maxHttpHeaderSize ="102400" />
2
3
4
5
6
7
往下找,大概在 119 行处,添加如下内容:
<Connector protocol="AJP/1.3"
address="::1"
port="8009"
redirectPort="8443"
secretRequired="" />
2
3
4
5
往下继续,大概在 154 行代码,添加如下内容:(有些 Tomcat 已经自带)
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
2
name
是 IP 地址。
autoDeploy
为 true 就是启动 Tomcat 后,将新的 war 包放在 webapps 目录下,就会自动编译出文件夹,自动部署。
appBase
是指定监听的目录,一旦这个目录发生变化(添加 WAR 包等),就会自动部署,不需要重新启动 Tomcat。
unpackWARs
为 true,则 Tomcat 会自动将 WAR 文件解压,否则不解压,直接从 WAR 文件中运行应用程序。
# logging.properties
这个文件修改日志文件的生成路径等信息。
大概在 25 行,覆盖如下内容:
1catalina.org.apache.juli.AsyncFileHandler.level = FINE
1catalina.org.apache.juli.AsyncFileHandler.directory = E:/logs
1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina.
1catalina.org.apache.juli.AsyncFileHandler.maxDays = 15
2localhost.org.apache.juli.AsyncFileHandler.level = FINE
2localhost.org.apache.juli.AsyncFileHandler.directory = E:/logs
2localhost.org.apache.juli.AsyncFileHandler.prefix = localhost.
2localhost.org.apache.juli.AsyncFileHandler.maxDays = 15
3manager.org.apache.juli.AsyncFileHandler.level = FINE
3manager.org.apache.juli.AsyncFileHandler.directory = E:/logs
3manager.org.apache.juli.AsyncFileHandler.prefix = manager.
3manager.org.apache.juli.AsyncFileHandler.maxDays = 15
4host-manager.org.apache.juli.AsyncFileHandler.level = FINE
4host-manager.org.apache.juli.AsyncFileHandler.directory = E:/logs
4host-manager.org.apache.juli.AsyncFileHandler.prefix = host-manager.
4host-manager.org.apache.juli.AsyncFileHandler.maxDays = 15
java.util.logging.ConsoleHandler.level = FINE
java.util.logging.ConsoleHandler.formatter = org.apache.juli.OneLineFormatter
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
日志放在 E:/logs 目录下,日志保存 15 天后被清除,以及日志语言格式根据服务器环境一样。避免乱码。
# 后台启动
前台启动,只需要启动 bin 目录下的 startup.bat 即可,但是这样会出现一个窗口,不小心关闭了就会停止运行,所以我们需要设置后台启动。
后台启动有两种方式:
- 修改 setclasspath.bat 文件
- 配置 Windows 服务
第一种方式其实是隐藏了 startup.bat 的窗口,拥有 startup.bat 窗口的功能,即触发上面 server.xml 配置的 Host,实现自动编译,自动部署。
第二种能设置开机自启,完全处于后台启动,缺点是不能触发上面 server.xml 配置的 Host,无法实现自动编译,自动部署。
我试过了两种,后来使用了第一种方式,因为我目前还要开发新功能,每次开发一个功能要部署一次,所以为了方便,让其自动编译,自动部署。第二种适用于项目已经完全开发,不需要频繁部署新的 WAR 包。
# 修改setclasspath.bat文件
非常简单,进入 Tomcat 安装目录下的 bin 目录,右键以记事本打开(不能双击),在 79 行左右,将 set _RUNJAVA="%JRE_HOME%\bin\java.exe"
改为 set _RUNJAVA="%JRE_HOME%\bin\javaw.exe"
,利用 jdk 的另一种启动方式 javaw.exe 代替 java.exe,实现自动编译,自动部署。
rem 是注释的意思,把原来的注释掉,或者删除。
然后双击启动同目录下的 startup.bat 文件,此时你会发现窗口一闪而过,此时它会进入后台运行,等待半分钟左右,就可以看到效果了。
如果没有效果,那么就是 Tomcat 无法找到 jdk,需要进行环境变量配置。
如果想停止运行,就双击启动 shutdown.bat 文件。
# 配置Windows服务
打开 CMD ,进入 Tomcat 安装目录的 bin 目录下,执行如下命令:
service.bat install
就会安装 Tomcat 服务,然后进入 Windows 的服务,看到如下内容代表生成服务成功:
右键点击属性,然后修改启动类型为自动,这样就会 开机自启,然后启动该服务即可,此时 Tomcat 就会内部悄悄启动,只需要静等待半分钟,就可以了,不需要去运行 startup.bat 文件。
附带删除 Tomcat 服务命令,进入 bin 目录,执行如下命令即可删除 Tomcat 服务:
service.bat remove
# 总结
修改 setclasspath.bat 文件其实是启动 startup.bat 时,隐藏窗口,适合不断部署新 WAR 包的环境。
配置 Windows 服务是融入 Windows 服务里,交给 Windows 来启动,适合开发完项目,不频繁部署 WAR 包的环境。
# 问题
java.security.InvalidKeyException: Illegal key size
这是无法访问手机端的原因。
如果密钥大于 128, 会抛出 java.security.InvalidKeyException: Illegal key size
异常. 因为密钥长度是受限制的,这是美国对软件出口的一种控制,只允许密钥低于 128 才能运行。它是检测两个 jar 包来进行控制。
如果你的项目用到密钥大于 128,则需要去下载不受限制的密钥 jar 包。
需要登录 Oracle 用户,没有请邮箱注册。
下载后解压,可以看到 local_policy.jar 和 US_export_policy.jar 以及 readme.txt。
如果安装了 JRE,将两个 jar 文件放到 %JRE_HOME%\lib\security 目录下覆盖原来的文件。
如果安装了 JDK,还要将两个 jar 文件也放到 %JDK_HOME%\jre\lib\security 目录下覆盖原来文件。
如果两个都安装了,则两个都要覆盖。
%JDK_HOME%
是 jdk 的根目录。%JRE_HOME%
是 jre 的根目录,一般在 jdk 的 bin 目录下。
覆盖后,重新启动 Tomcat 就可以了。
配置 JDK 环境变量
前台启动时,双击打开 startup.bat 后,CMD 窗口一闪而过,就是因为没有配置 JDK 环境变量,JDK 的环境变量名字必须叫做 JAVA_HOME
。