方法1).创建过滤器解决中文乱码
1.新建一个filter包,创建一个子类(如CharsetFilter.java)继承自HttpServlet类并实现Filter接口类。
2.类方法:
………………
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
request.setCharacterEncoding("utf-8");
chain.doFilter(request, response);
}
………………
3.在web.xml中进行部署
………………
<filter>
<filter-name>charset</filter-name>
<filter-class>com.xaccp.filter.CharsetFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>charset</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
………………
至此,利用过滤器将struts中的中文乱码问题就完全解决了,是不是很easy呢……^_^
方法2).定制Struts控制器组件解决中文乱码
如果要定制ActionServlet的行为规则,其实应从RequestProcessor这个RequestProcessor类着手。要开发自己的RequestProcessor类以实现定制的控制逻辑,应遵循以下步骤:
1) 创建一个子类继承org.apache.struts.action.RequestProcessor类,在该子类中显式定义(或使用缺省的)无参、方法体为空的构造方法。
2) 重写所需要的方法,加入定制功能。
3) 将该子类编译后得到的class文件保存到Struts应用程序的WEB-INF/class/目录下
4) 修改配置文件struts-config.xml,在其中加入一个名为<controller>的元素,用以指定客户定制的RequestProcessor类。
具体如下:
1)创建子类MyProc.java,重写RequestProcessor类下的processorProcessor()方法
package com.fmzrt.myproc;
import java.io.UnsupportedEncodingException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.RequestProcessor;
public class MyProc extends RequestProcessor {
protected boolean processorProcessor(HttpServletRequest request, HttpServletResponse response) {
try {
request.setCharacterEncoding("utf-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return true;
}
}
2)修改配置文件struts-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">
<struts-config>
………………
<controller processorClass="com.fmzrt.myproc.MyProc"></controller>
………………
</struts-config>