关键词:
filter
中文乱码
Roy 网友指出,用Filter处理Struts中文乱码才是王道,原文请参考这里:
Struts Hack!解决中文参数在Form Bean中的乱码问题!
filter的用法,的确是比较有扩展性的一种方法...可以通过filter结合读取web.xml中的filter参数来完成一系列的动作,做法如下:
首先,实现javax.servlet.Filter接口,编写一个处理request编码的过滤器类...
|
- packagecom.thy.struts.filter;
- importjavax.servlet.Filter;
- importjavax.servlet.FilterConfig;
- importjavax.servlet.ServletException;
- importjavax.servlet.ServletRequest;
- importjavax.servlet.ServletResponse;
- importjavax.servlet.FilterChain;
- importjava.io.IOException;
- publicclassSetCharacterEncodingFilterimplementsFilter{
- protectedFilterConfigfilterConfig;
- protectedStringencodingName;
- protectedbooleanenable;
- publicSetCharacterEncodingFilter(){
- this.encodingName="UTF-8";
- this.enable=false;
- }
- publicvoidinit(FilterConfigfilterConfig)throwsServletException{
- this.filterConfig=filterConfig;
- loadConfigParams();
- }
- privatevoidloadConfigParams(){
- //encoding
- this.encodingName=this.filterConfig.getInitParameter("encoding");
- //filterenableflag
- StringstrIgnoreFlag=this.filterConfig.getInitParameter("enable");
- System.out.println("Filter");
- if(strIgnoreFlag.equalsIgnoreCase("true")){
- this.enable=true;
- }else{
- this.enable=false;
- }
- }
- publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,
- FilterChainchain)throwsIOException,
- ServletException{
- if(this.enable){
- request.setCharacterEncoding(this.encodingName);
- }
- chain.doFilter(request,response);
- }
- publicvoiddestroy(){
- }
- }
然后,需要在web.xml中注册我们的过滤器类:
|
- <filter>
- <filter-name>SetCharacterEncoding</filter-name>
- <filter-class>
- com.thy.struts.filter.SetCharacterEncodingFilter
- </filter-class>
- <init-param>
- <param-name>encoding</param-name>
- <param-value>UTF-8</param-value>
- </init-param>
- <init-param>
- <param-name>enable</param-name>
- <param-value>true</param-value>
- </init-param>
- </filter>
- <filter-mapping>
- <filter-name>SetCharacterEncoding</filter-name>
- <url-pattern>*.do</url-pattern>
- </filter-mapping>
这样,任何通过Struts,或是JSF的Controller Servlet处理的request,都会在过滤器中先行处理,才把控制权交还给Struts或是JSF,而且Filter中有一个Process Chain的概念,是一个很吸引人的东东~~!