项目web.xml:
<init-param>
<param-name>encoding</param-name>
<param-value>utf8</param-value>
</init-param>
idea开发环境 workspace也已经设置成了 utf-8
分析了一遍,发现项目的编码都是utf-8,是没问题,说明问题出在了tomcat本身
- server.xml 发现 <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1"redirectPort="8443" />是没有指定编码的。
- 解决:在 <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>加上URIEncoding="UTF-8。
- 重启项目
java转码方法
public static void main(String[] args) {
//转码方法
String encode = URLEncoder.encode("1+1");
System.out.println("转码:" + encode);
//解码方法
String decode = URLDecoder.decode(encode);
System.out.println("解码:" + decode);
}
tomcat的结构知识
#结构
bin (运行脚本)
conf (配置文件)
lib (核心库文件)
logs (日志目录)
temp (临时目录)
webapps (自动装载的应用程序的目录)
work (JVM临时文件目录[java.io.tmpdir])
#系统变量
#变量(很重要)
catalina.home 和
catalina.base 这两个属性仅在你需要安装多个Tomcat实例而不想安装多个软件备份的时候使用,这样能节省磁盘空间。
#实际用途中,运行多个应用时,就更改catalina.base , 然后启动tomcat就启动了服务
linux设置变量的命令
export CATALINA_BASE=/usr/local/tomcat${tomcat_version}/$i #服务地址
export catalina.home=你的tomcat地址
#linux
1、CATALINA_TMPDIR 指向临时目录temp的位置
2、catalina.home 指向公用信息的位置,就是bin和lib的父目录。
3、catalina.base 指向每个Tomcat目录私有信息的位置,
就是conf、logs、temp、webapps和work的父目录
#ps: 所以我们要运行多个应用时,就更改catalina.base , 然后启动tomcat就可以了
#带有context的问题
如果访问不需要有context, 将jar或者war包 命名为ROOT.war, 结合前面的tomcat结构,
linux安装一个tomcat 可以有多个webapps, 利用 catalina.base 这个系统变量来控制,
重启tomcat即可