问题描述
今天在进行Java Web学习中遇到了一个编码问题。JSP在向servlet传递参数的时候URL中包括了中文,在servlet类中进行解码的时候出现编码错误。
前端JSP
中 的URL:
<a href="${pageContext.request.contextPath}/findUserByPageServlet?currentPage=${pb.currentPage + 1}&rows=5&name=${condition.name[0]}&address=${condition.address[0]}&email=${condition.email[0]}"></a>
后端servlet类:
request.setCharacterEncoding("utf-8");
Map<String, String[]> condition = request.getParameterMap();
在获取参数map的时候中文乱码,数据库不能正常查询。
分析
Tomcat 的URL编码默认为ISO-8859-1
的,因此URL从utf-8
被强制转换成了ISO-8859-1
。下面是一个测试类:
解决方案
打开Tomcat文件下的conf文件中的 server.xml 文件,更改两个地方。
配置一:添加 URIEncoding=“UTF-8”
<Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8081" protocol="HTTP/1.1" redirectPort="8443"/>
配置二:添加 URIEncoding=“UTF-8”
<Connector URIEncoding="UTF-8" port="8009" protocol="AJP/1.3" redirectPort="8443"/>
配置后重启tomcat。让URL的编码也变为UTF-8
写在最后
今天在查找错误的时候找到了一张编码错误图,分享一下吧