Roy 网友指出,用Filter处理Struts中文乱码才是王道,原文请参考这里:
Struts Hack!解决中文参数在Form Bean中的乱码问题!
filter的用法,的确是比较有扩展性的一种方法...可以通过filter结合读取web.xml中的filter参数来完成一系列的动作,做法如下:
首先,实现javax.servlet.Filter接口,编写一个处理request编码的过滤器类...
package tutorial.struts.filter;
import javax.servlet.Filter; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse; import javax.servlet.FilterChain; import java.io.IOException;
public class SetCharacterEncodingFilter implements Filter {
protected FilterConfig filterConfig; protected String encodingName; protected boolean enable;
public SetCharacterEncodingFilter() { this.encodingName = "UTF-8"; this.enable = false; }
public void init(FilterConfig filterConfig) throws ServletException { this.filterConfig = filterConfig; loadConfigParams(); }
private void loadConfigParams() { //encoding this.encodingName = this.filterConfig.getInitParameter("encoding"); //filter enable flag String strIgnoreFlag = this.filterConfig.getInitParameter("enable"); if (strIgnoreFlag.equalsIgnoreCase("true")) { this.enable = true; } else { this.enable = false; } }
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { if(this.enable) { request.setCharacterEncoding(this.encodingName); } chain.doFilter(request, response); }
public void destroy() { }
}
|
然后,需要在web.xml中注册我们的过滤器类:
filter> filter-name>Set Character Encodingfilter-name> filter-class>tutorial.struts.filter.SetCharacterEncodingFilterfilter-class> init-param> param-name>encodingparam-name> param-value>UTF-8param-value> init-param> init-param> param-name>enableparam-name> param-value>trueparam-value> init-param> filter> filter-mapping> filter-name>Set Character Encodingfilter-name> servlet-name>Action Servletservlet-name> filter-mapping> filter-mapping> filter-name>Set Character Encodingfilter-name> servlet-name>Faces Servletservlet-name> filter-mapping>
|
这样,任何通过Struts,或是JSF的Controller Servlet处理的request,都会在过滤器中先行处理,才把控制权交还给Struts或是JSF,而且Filter中有一个Process Chain的概念,是一个很吸引人的东东~~!