servlet处理get请求时的中文乱码问题

来源:互联网 发布:mac变色龙引导工具 编辑:程序博客网 时间:2024/05/22 13:46

在我们java Web开发中,使用servlet处理get请求时,倘若get请求中携带了中文格式的参数,直接传给后台会出现乱码。

比较直观的解决方式如下:

String name= request.getParameter("name")  //定义一个变量装载前台传来的参数

如果直接打印这个name,可以发现会出现乱码。

//处理乱码name = new String(name.getBytes("ISO8859-1"),"UTF-8");
再打印name看看吧!


拓展:

每次中文参数都要处理会比较麻烦,我们可以使用过滤器:

public String getParameter(String name) {String val = super.getParameter(name);if (value == null)return null;String method = request.getMethod();if ("get".equalsIgnoreCase(method)) {try {val = new String(val.getBytes("ISO8859-1"),"UTF-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();}}return value;}


乱码原因:

在tomcat安装目录下的conf/server.xml中,有这样的配置(在这里面可以更改tomact的默认端口号):

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
其中有关编码集属性的是,URIEncoding属性。该属性决定了使用get请求通过浏览器地址栏访问tomcat时的编码方式(默认为ISO8859-1)。
所以我们直接更改URIEcoding值为 “UTF-8” 也可解决乱码问题。


tomcat那些事:

从tomcat 8.0开始,URIEcoding 的默认值不再是ISO9588-1,而变成了 UTF-8.所以从toncat 7.x移植到 8.x可能要删减处理乱码问题的代码模块。