用户登录
用户注册

分享至

Struts2一个简单的Filter实现

  • 作者: 且过G
  • 来源: 51数据库
  • 2021-07-28
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函数。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

软件
前端设计
程序设计
Java相关