Tomcat
Contents
💠
💠 2024-06-12 10:01:44
Tomcat
- 官网上大致有:
- Tomcat
7 8 8.5 9
大版本 - Tomcat Native
优化Tomcat性能,提升数倍
- Apache Standard Taglib
JSTL的实现
- Tomcat Connectors
用于连接IIS Apache
官方文档
- Tomcat
一款功能强大的Tomcat管理监控工具
psi-probeTomcat监控管理工具
目录结构
|
|
查看Tomcat版本 sh bin/version.sh
配置运行
个人配置好的
- 精简版, 适合放在服务器 tomcat-clean-8.5.31 | tomcat-clean-9.0.8
- 个人配置版,适合个人使用 tomcat-admin-9.0.8 | tomcat-admin-8.5.31
配置解压方式的Tomcat
Windows 平台
- 在setclasspath中把前几行关于JAVA_HOME,JRE_HOME的路径改成自己的
- 系统中添加catalina_home环境变量
- 运行tomcatw.exe配置里面所有的路径( JDK JRE )
- 双击tomcat.exe启动Tomcat
Linux 平台
- 下载解压,然后 bin 目录下执行
chmod +x *.sh
配置管理账户
配置管理账号 tomcat-users.xml 中的 tomcat-users 节点
|
|
- 其中admin-gui是为了能访问manger的界面,manager-secret是为了可以上传war文件
配置本机外可访问管理页面
/conf/Catalina/localhost/ 下添加 manager.xml 文件
|
|
IDE中配置运行
- 虽然IDE也是引用到解压的Tomcat路径, 但是只是使用了可执行文件, 配置文件和一系列中间文件都是和原Tomcat隔离的, 这样也保证了原Tomcat能单独运行不受影响
编码
- 编辑conf/下的server.xml,配置Connector项
URIEncoding="UTF-8"
- 浏览器表单utf-8 xml utf-8 乱码 服务器 浏览器 乱码 使用response.setContentType(“text/html; charset=utf-8”);。
- 无效方法response.setChaoactorEncoding; xml文件里面有乱码,saxreader会生成document错误。
- 浏览器表单get方式:需要重新编码获得字符串 浏览器表单post方式 request.setCharactorEncoding(utf-8);
- 自己建立的工程里面的web.xml继承了conf/web.xml.只需要重写自己的web.xml相关的配置的参数就可以覆盖其功能
虚拟目录
指定webapp目录外的可访问的文件
-
方法1:conf/server.xml
- 当中找到host标签里 添加一行
<Context path="/hello" docBase="c:/mydsadf"/>
- 当中找到host标签里 添加一行
-
方法2:conf/catalina/localhost/myxml.xml
- context中添加
<Context docBase="c:/mydsadf"/>
- 访问方式
http://localhsot:8080/myxml/
- context中添加
默认主页
web.xml
|
|
虚拟主机
server.xml
|
|
File f=new File("/information.xml");
这个写法是错的,空指针异常request.getParameter
返回字符串,如果表单里面是空的,就返回长度为零的字符串。
配置 GZip压缩
- 修改配置文件:/conf/server.xml
原文件
|
|
修改成
|
|
配置IO方式
默认http1.1是nio, 还有aio ajp bio
Tomcat Native
Tips
- servletContextLisner 和Spring环境的加载顺序要注意
- Tomcat启动卡住,因为random
- 表现
- 启动Tomcat 大量的 Unable to process Jar entry
- 最后 Tomcat OOM
- 排查过程
- 首先判断为Maven缓存导致的问题, 下载下来的jar是有问题的, 但是通过比较 md5 发现文件是一致的
- 然后搜索相关信息, javassist jar包依赖冲突, 也不是
- 技术原因分析
- 在这次遇到的问题是 spring-boot-autoconfigure 2.0.1.RELEASE 依赖不能和 Tomcat 7.0.55 兼容, 导致了 Unable to process Jar entry EOFException 报错
- 但是这个报错不影响应用 深层次原因是 这个 autoconfigure 会尝试将项目所有依赖都加载扫描一次
- 如果物理机或者容器内存不够, 就会直接down掉, 但是! 内存够的话 就不影响后续的启动, 除非应用确实需要使用SpringBoot框架的 2.0.1 版本
- 人为原因
- 没有做好依赖管理, 导致了 SpringBoot 被错误的引入
Author Kuangcp
LastMod 2018-12-20