SpringMVC:乱码问题
GET请求
乱码原因:
对于GET方式,我们知道它的提交是将请求数据附加到URL后面作为参数,这样依赖乱码就会很容易出现,因为数据name和value很有可能就是传递的为非ASCII码。当URL拼接后,浏览器对其进行encode,然后发送到服务器。tomcat服务器在进行解码过程中URIEncoding就起到作用了。tomcat服务器会根据设置的URIEncoding来进行解码,如果没有设置则会使用默认的ISO-8859-1来解码。假如我们在页面将编码设置为UTF-8,而URIEncoding设置的不是或者没有设置,那么服务器进行解码时就会产生乱码。这个时候我们一般可以通过new String(request.getParameter("name").getBytes("iso-8859-1"),"utf-8") 的形式来获取正确数据,或者通过更改服务器的编码方式: tomcat 设置中
处理方式:
在springmvc中,我们一般不会去使用原生ServletAPI,所以建议通过修改服务器编码方式一次性处理get请求的乱码问题,具体方式如下:
在tomcat->conf->server.xml,增加URIEncoding="UTF-8"
POST请求:
乱码原因:
对于POST方式,它采用的编码是由页面来决定的即ContentType("text/html; charset=GBK")。当通过点击页面的submit按钮来提交表单时,浏览器首先会根据ContentType的charset编码格式来对POST表单的参数进行编码然后提交给服务器,在服务器端同样也是用ContentType中设置的字符集来进行解码,这就是通过POST表单提交的参数一般而言都不会出现乱码问题。
当然这个字符集编码我们是可以自己设定的:request.setCharacterEncoding(charset)设置编码,然后通过request.getParameter获得正确的数据。
处理方式:
在springmvc中,服务器启动时,最先加载的监听器,其次为过滤器和servlet,所以我们可以在web.xml配置文件中设置字符编码的过滤器,用于解决post请求乱码问题。
characterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
UTF-8
forceRequestEncoding
true
forceResponseEncoding
true
characterEncodingFilter
/*