问题:
在你所有页面设置的编码都是utf-8的情况下仍然会出现中文乱码现象。
一、乱码出现原因
由于Struts框架直接把表单数据发送给了ActionForm,所以这里面没有对HttpRequestServlet进行SetCharacterEncoding,所以默认是按照ISO-8859-1。
二、解决办法
方法 : 就是在表单提交到ActionForm之前对request进行编码,写一个过滤器,对所有请求进行过滤
方式一:直接在过滤器中指定编码格式
MyFilter.java
1 public class MyFilter extends HttpServlet implements Filter { 2 private static final long serialVersionUID = 1L; 3 4 5 public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws java.io.IOException, javax.servlet.ServletException { 6 // TODO Auto-generated method stub 7 arg0.setCharacterEncoding("utf-8"); //设置接收编码 8 arg1.setContentType("text/html;charset=utf-8"); 9 arg2.doFilter(arg0, arg1); //必须 10 11 } 12 13 14 public void init(FilterConfig arg0) throws javax.servlet.ServletException { 15 // TODO Auto-generated method stub 16 } 17 18 }
在web.xml中添加
1 <filter> 2 <filter-name>MyFilter</filter-name> 3 <filter-class>com.xidian.filter.MyFilter</filter-class> 4 </filter> 5 <filter-mapping> 6 <filter-name>MyFilter</filter-name> 7 <url-pattern>/*</url-pattern> 8 </filter-mapping>