你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:技术专栏 / Web开发
Struts2一个简单的Filter实现
 
struts2原理图:
 
 
下面根据Struts原理图,写一个简单的过滤器实现:
 
假设现在有一个form表单被提交,发送如下请求到服务器:
 
 
[html
POST http://127.0.0.1/login.do HTTP/1.0     
Accept: image/gif, image/jpeg, image/pjpeg, */*     
Accept-Language: en-us,zh-cn;q=0.5     
Content-Type: application/x-www-form-urlencoded     
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)     
Content-Length: 28     
\r\n     
username=admin&password=1234     
 
当服务器接收到这个请求,会经过一系列的过滤器。
 
1,定义一个过滤器
 
我们这里定义一个叫:SetCharacterEncoding的过滤器,用来设置请求中文字编码。
 
在web.xml中添加如下代码:
 
 
[html]  
<filter>  
  <filter-name>SetCharacterEncoding</filter-name>  
  <filter-class>com.bjzfy.zfzj.gg.util.SetCharacterEncodingFilter</filter-class>  
  <init-param>  
    <param-name>encoding</param-name>  
    <param-value>GBK</param-value>  
  </init-param>  
</filter>  
过滤器的位置应在<filter-mapping>前面。
2,使用这个过滤器:
 
 
[html]  
<filter-mapping>  
  <filter-name>SetCharacterEncoding</filter-name>  
  <url-pattern>/*</url-pattern>  
</filter-mapping>  
 
将这个过滤器放在其他过滤器之前。就可以在其他过滤器处理请求之前把请求的编码转换成想要的编码。最典型的是放在struts过滤器之前。
如下顺序:
 
 
[html]  
<filter-mapping>//先调用  
  <filter-name>SetCharacterEncoding</filter-name>  
  <url-pattern>/*</url-pattern>  
</filter-mapping>  
  
<filter-mapping>//后调用  
      <filter-name>FilterDispatcher</filter-name>  
      <url-pattern>*.action</url-pattern>  
</filter-mapping>  
 
 
3,过滤器的实现:
所有过滤器的实现都要实现 Filter 接口:
 
 
[java]  
public class SetCharacterEncodingFilter implements Filter  
Filter接口中doFilter函数是入口函数,前面的http请求内容将传入这个函数:
 
[java]  
public void doFilter(<span style="color:#ff0000">ServletRequest request</span>, ServletResponse response,  
                     FilterChain chain)   
 
在这个函数里面,我们可以对接收到的http请求进行处理。这里是做字符集转换,如下实现
 
[java]  
<span style="color:#ff0000">request</span>.setCharacterEncoding(encoding);  
 
处理完毕后,需要将内容教给下一个过滤器处理。
 
[java]  
chain.doFilter(request, response);  
 
 
到这里一个过滤器实现及处理过程就结束了。
下面说一下过滤器其他处理细节:
 
1,参数初始化
 
 
[html]  
<init-param>  
  <param-name>encoding</param-name>  
  <param-value>GBK</param-value>  
</init-param>  
 
在定义SetCharacterEncodingFilter过滤器时候,有上面两个初始化参数。
这两个参数用来配置转换的目标字符集GBK。这里也可以定义其他的,如UTF-8。
 
类中实现:
 
 
[java]  
public void init(FilterConfig <span style="color:#ff0000">filterConfig)</span> throws ServletException {  
  
  this.filterConfig = filterConfig;  
  this.encoding = <span style="color:#ff0000">filterConfig.getInitParameter("encoding");</span>  
 
其中FilterConfig用来读取初始化参数。
2,对象结束需调用destroy函数。
  推荐精品文章

·2024年12月目录 
·2024年11月目录 
·2024年10月目录 
·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089