当前位置: 代码迷 >> JavaScript >> 常见的乱码有关问题分为JSP页面显示中文乱码、表单提交乱码两类
  详细解决方案

常见的乱码有关问题分为JSP页面显示中文乱码、表单提交乱码两类

热度:270   发布时间:2012-08-24 10:00:20.0
常见的乱码问题分为JSP页面显示中文乱码、表单提交乱码两类

现在将常见的乱码问题分为JSP页面显示中文乱码、表单提交乱码两类。?
?????1)JSP页面中显示中文乱码?
?????在JSP文件中使用page命令指定响应结果的MIME类型,如<%@?page?language="java"?contentType="text/html;charset=gb2312"?%>?
?????2)表单提交乱码?????
?????表单提交时(post和Get方法),使用request.getParameter方法得到乱码,这是因为tomcat处理提交的参数时默认的是iso-8859-1,表单提交get和post处理乱码问题不同,下面分别说明。?
????(1)POST处理?
????对post提交的表单通过编写一个过滤器的方法来解决,过滤器在用户提交的数据被处理之前被调用,可以在这里改变参数的编码方式,过滤器的代码如下:?


package?example.util;?
?????
????import?java.io.IOException;?
????import?javax.servlet.Filter;?
????import?javax.servlet.FilterChain;?
????import?javax.servlet.FilterConfig;?
????import?javax.servlet.ServletException;?
????import?javax.servlet.ServletRequest;?
????import?javax.servlet.ServletResponse;?
?????
????public?class?SetCharacterEncodingFilter?implements?Filter?{?????
???????protected?String?encoding?=?null;?????
???????protected?FilterConfig?filterConfig?=?null;?????
???????protected?boolean?ignore?=?true;???
?????public?void?destroy()?{?????
??????this.encoding?=?null;?
??????this.filterConfig?=?null;?????
?????}?????
?????public?void?doFilter(ServletRequest?request,?ServletResponse?response,?
??????FilterChain?chain)?throws?IOException,?ServletException?{?

??????????if?(ignore?||?(request.getCharacterEncoding()?==?null))?{?
???????String?encoding?=?selectEncoding(request);?
???????if?(encoding?!=?null)?{?
????????request.setCharacterEncoding(encoding);?
???????}?
??????}???
??????//?Pass?control?on?to?the?next?filter?
??????chain.doFilter(request,?response);?????
?????}?
????public?void?init(FilterConfig?filterConfig)?throws?ServletException?{?????
??????this.filterConfig?=?filterConfig;?
??????this.encoding?=?filterConfig.getInitParameter("encoding");?
??????String?value?=?filterConfig.getInitParameter("ignore");?
??????if?(value?==?null)?{?
???????this.ignore?=?true;?
??????}?else?if?(value.equalsIgnoreCase("true"))?{?
???????this.ignore?=?true;?
??????}?else?if?(value.equalsIgnoreCase("yes"))?{?
???????this.ignore?=?true;?
??????}?else?{?
???????this.ignore?=?false;?
??????}?????
?????}?
?????
?????protected?String?selectEncoding(ServletRequest?request)?{???????
??????return?(this.encoding);?????
?????}?????
????}?
文中红色的代码即为处理乱码的代码。?
??????web.xml文件加入过滤器?
Xml代码?常见的乱码问题分为JSP页面显示中文乱码、表单提交乱码两类 - Fantasie - 随波逐流?
<filter>?
????<filter-name>Encoding</filter-name>?
????<filter-class>?
????????????example.util.SetCharacterEncodingFilter?
?????</filter-class>?
????<init-param>?
???<param-name>encoding</param-name>?
???<param-value>gbk</param-value>?
???<!--gbk或者gb2312或者utf-8-->?
??</init-param>?
??<init-param>?
???<param-name>ignore</param-name>?
???<param-value>true</param-value>?
??</init-param>?
</filter>?

<filter-mapping>?
??<filter-name>Encoding</filter-name>?
??<servlet-name>/*</servlet-name>?
</filter-mapping>?

(2)?Get方法的处理?
tomcat对post和get的处理方法不一样,所以过滤器不能解决get的乱码问题,它需要在其他地方设置。?
打开<tomcat_home>\conf目录下server.xml文件,找到对8080端口进行服务的Connector组件的设置部分,给这个组件添加一个属性:URIEncoding="GBK"。修改后的Connector设置为:?


<Connector?port="8080"?maxHttpHeaderSize="8192"?
???????????????maxThreads="150"?minSpareThreads="25"?maxSpareThreads="75"?
???????????????enableLookups="false"?redirectPort="8443"?acceptCount="100"?
???????????????connectionTimeout="20000"?disableUploadTimeout="true"?
???????????????URIEncoding="GBK"?/>?

*?注意修改后重新启动tomcat才能起作用。

  相关解决方案