老实说,中文乱码问题是每个程序员会经常遇到的问题,而且也是一个很头疼的问题。网上很多关于解决中文乱码的帖子,看几个之后你会发现大都是一样的。但是我们照着做,却还是无法解决乱码问题。我也是看了好多帖子,好多解决方法,最后把几个方法结合起来,修改一下就可以用了。废话少说,下面进入正题。
首先Struts默认的编码方式是utf-8,出现乱码首先检查jsp页面的编码方式是否也是utf-8,也许你会很奇怪,为什么统一了编码方式,还是出现乱码呢?原因是jsp网页发送请求request,默认编码是ISO-8859-1。也就是说,虽然你Jsp页面设置的编码方式是utf-8,但是把中文参数发送出去,系统默认把参数以ISO-8859-1编码方式放到request中了。
下面是针对post方式提交请求解决中文乱码的方法:
1.编写过滤器:
- package org.filter;
-
-
- import java.io.IOException;
- import java.net.URLDecoder;
-
- import javax.servlet.Filter;
- import javax.servlet.FilterChain;
- import javax.servlet.FilterConfig;
- import javax.servlet.ServletException;
- import javax.servlet.ServletRequest;
- import javax.servlet.ServletResponse;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
-
- public class CharsetEncodingFilter implements Filter {
-
- @Override
- public void doFilter(ServletRequest sRequest, ServletResponse sResponse,
- FilterChain filterChain) throws IOException, ServletException
- {
- HttpServletRequest request = (HttpServletRequest) sRequest;
- HttpServletResponse response = (HttpServletResponse) sResponse;
- // 设置字符集
- request.setCharacterEncoding("utf-8");
- response.setCharacterEncoding("utf-8");
-
- filterChain.doFilter(request, response);
- }
-
- @Override
- public void destroy() {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void init(FilterConfig arg0) throws ServletException {
- // TODO Auto-generated method stub
-
- }
-
- }
2.配置web.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app version="2.5"
- xmlns="http://java.sun.com/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
- http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
- <!-- <welcome-file-list>
- <welcome-file>index.jsp</welcome-file>
- </welcome-file-list> -->
- <!-- 过滤所有的请求的编码为utf-8 -->
- <filter>
- <filter-name>CharsetEncodingFilter</filter-name>
- <filter-class>org.filter.CharsetEncodingFilter</filter-class>
-
- </filter>
- <filter-mapping>
- <filter-name>CharsetEncodingFilter</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
-
-
- <filter>
- <filter-name>struts2</filter-name>
- <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
- <!-- <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> -->
- </filter>
- <filter-mapping>
- <filter-name>struts2</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
-
- </web-app>
通过以上方法,把所有请求的编码方式都设成了utf-8。如果没有用到struts2,上面第二个<filter>开始的代码就不要写上了。用第一个filter就可以了。希望可以帮到更多因为中文乱码烦心的朋友们