开篇废话
对于 URL 提交的数据和表单中 GET 方式提交的数据,在接收数据的 JSP 中设置 request.setCharacterEncoding 参数是不行的,因为在 Tomcat5.0 中,默认情况下使用ISO-8859-1 对 URL 提交的数据和表单中 GET 方式提交的数据进行重新编码(解码),而不使用该参数对 URL 提交的数据和表单中 GET 方式提交的数据进行重新编码(解码)。
要解决该问题,应该在 Tomcat 的配置文件的 Connector 标签中设置useBodyEncodingForURI 或者 URIEncoding 属性,其中 useBodyEncodingForURI 参数表示是否用 request.setCharacterEncoding 参数对 URL 提交的数据和表单中 GET 方式提交的数据进行重新编码,在默认情况下,该参数为 false (Tomcat4.0 中该参数默认为true );URIEncoding 参数指定对所有 GET 方式请求(包括 URL 提交的数据和表单中 GET 方式提交的数据)进行统一的重新编码(解码)的编码。
1、方式一
(1)默认配置
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
(2)修改后配置
修改Tomcat下conf/server.xml 文件
[victor@hadoop102 ~]$ cd /opt/module/tomcat
[victor@hadoop102 tomcat]$ vim conf/server.xml
<Connector port="8090" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="UTF-8"/>
(3)主要添加内容
URIEncoding="UTF-8"
2、方式二
(1)默认配置
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
(2)修改后配置
修改Tomcat下conf/server.xml 文件
[victor@hadoop102 ~]$ cd /opt/module/tomcat
[victor@hadoop102 tomcat]$ vim conf/server.xml
<Connector port="8080" useBodyEncodingForURI="true"
protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
(3)主要添加内容
useBodyEncodingForURI="true"
(4)思想
添加 useBodyEncodingForURI 属性,useBodyEncodingForURI 参数表示是否用 jsp 中 request.setCharacterEncoding 参数对 URL 提交的数据和表单中 GET 方式提交的数据进行重新编码
3、URIEncoding 和 useBodyEncodingForURI 区别
URIEncoding 是对所有 GET 方式的请求的数据进行统一的重新编码(解码),而 useBodyEncodingForURI 则是根据响应该请求的页面的request.setCharacterEncoding 参数对数据进行的重新编码(解码),不同的页面可以有不同的重新编码(解码)的编码
所以对于 URL 提交的数据和表单中 GET 方式提交的数据,可以修改 URIEncoding 参数为浏览器编码或者修改 useBodyEncodingForURI 为true ,并且在获得数据的 JSP 页面中 request.setCharacterEncoding参数设置成浏览器编码