tomcat如何配置:修改端口与编码参数解决部署常见故障
前段时间部署老旧Java Web项目,死磕tomcat如何配置大半天,全程踩遍新手最容易踩的基础坑,没有任何复杂的高级配置,全是线上部署刚需的基础操作,每一步有效操作都是一次次报错试出来的,没有半点虚的理论。
最先卡壳的就是端口冲突问题。
默认状态下tomcat固定占用8080端口,当时测试服务器上已经运行了其他web服务,直接双击启动程序,控制台立马弹出端口占用的报错提示。一开始完全没思路,傻乎乎的关闭所有后台程序、重启服务器,来回折腾快半小时,问题依旧存在,白白浪费了好多的时间,其实根本不用动系统层面的东西,问题全出在配置文件的默认参数上。
后来才反应过来,端口冲突的解决方式特别简单,找到tomcat安装根目录下的conf文件夹,里面的server.xml是核心配置文件,用记事本或者普通代码编辑器打开就行,不用专业工具。在文件里检索Connector节点,找到里面默认的8080端口数值,随便替换成8082、8090这类未被占用的端口,保存文件就完成了端口配置,整个过程只需要十几秒,之前的折腾完全是无用功。
改完端口重启服务,新的问题又紧跟着出现。
页面所有中文内容全部乱码,前端传过来的中文参数全都变成一串问号,反复检查项目代码的编码格式、浏览器的解码方式,全部都是UTF-8,压根找不到问题所在,一度以为是项目代码出了bug。
折腾好久才搞明白,这是tomcat默认编码不兼容导致的,和代码没有半点关系。原生tomcat默认编码并非UTF-8,无法识别中文参数,依旧打开server.xml文件,在修改端口的Connector标签内,补全两个关键参数URIEncoding="UTF-8"和useBodyEncodingForURI="true",之前看精简教程只加了第一个参数,导致GET请求正常、POST请求依旧乱码,补全两个参数后,所有中文解析故障彻底解决,这是很多速成教程会漏掉的细节。
还有个很实用的小配置,适配资源加载慢的项目。默认的连接超时时间只有20000毫秒,项目静态资源多、首次加载耗时久的时候,总会直接判定连接超时,页面加载中断。在同一个配置文件的引擎节点下,把connectionTimeout数值改成60000毫秒,就能适配大部分常规web项目的加载节奏,不用再频繁出现超时报错,这个小改动能规避大半的访问异常。
所有参数修改完毕后,关闭tomcat进程,重新运行bin目录下的startup.bat启动程序,控制台无报错,输入新的端口地址访问项目,端口冲突、中文乱码、访问超时的问题全部清零,项目完整正常运行。
那天弄完所有配置,天色已经暗下来,随手把修改好的server.xml文件复制了一份存档,免得下次部署新项目又要重新挨个改参数。