专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > 编程

Struts1.x FILTER过滤器的施用

发布时间:2011-07-01 07:30:56 文章来源:www.iduyao.cn 采编人员:星星草
Struts1.x FILTER过滤器的使用
1、过滤器概述
过滤器的作用,就是拦截发送到服务端的request/response对象,并且对其进行加工,过滤器具有双向顺序:filter chain (chain 链,束缚)
过滤器被调用的顺序,其实就是web.xml中被定义的顺序:
Browers ==>Filter1 ==>Filter2  ==>Filter3  ==>Web Server
Web Server ==>Filter3 ==>Filter2 ==>Filter1  ==>Browers
过滤器的定义:
与Servlet相似,过滤器是一些Web应用程序组件,可以绑定到一个Web应用程序中。但是与其他Web应用程序组件不同的是,过滤器是"链"在容器的处理过程中的。这就意味着它们会在servlet处理器之前访问一个进入的请求,并且在外发的响应信息返回到客户前访问这些响应信息。这种访问使得过滤器可以检查并修改请求和响应的内容。
一个很典型的应用:
在西安机保项目中,要求某一些业务请求类型在1-20号之外不允许被用户访问,则可以写一个过滤器,根据当前的系统时间,不允许该类的请求被处理,以及做登入,登出的日志记录等等。
一个Filter类原则上要继承HttpServlet,并且实现javax.servlet.Filter接口,并且实现init()、doFilter()、dostory()三个方法。

2、过滤器放在容器的什么位置?
过滤器放在Web资源之前,可以在请求抵达它所应用的Web资源(可以是一个servlet、一个JSP页面,甚至是一个HTML页面这样的静态内容)之前截获进入的请求,并且在它返回到客户之前截获输出。 

3、过滤器的生命周期
实例化:初始化(调用init()方法); 
public void init(FilterConfig config) throws ServletException
过滤(调用doFilter()方法,包含过滤器逻辑 ),Servlet会将web.xml里面配置的<param>参数值封装为FilterConfig传入Filter。
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException
FilterChain的doFilter()方法是用过滤后的请求调用资源的方法,如果不写这个方法,也就不会去调用相应的资源。 
销毁(destroy()方法由容器在销毁过滤器实例之前调用 ); 
public void destroy();

4、配置一个过滤器
在web.xml中进行配置:
<filter>
    <filter-name>authenticateFilter</filter-name>
    <filter-class>
        com.yinhai.xian.login.fiter.AuthenticateFilter
    </filter-class>
    <init-param>
        <param-name>defaultUrl</param-name>
        <param-value>/index.do</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>authenticateFilter</filter-name>
    <url-pattern>*.do</url-pattern>
</filter-mapping>

5、Filter的使用
参见/xajgyl/javacode/xian/com/yinhai/xian/login/fiter/AuthenticateFilter.java
里面有一个转发的函数:
hsr 为 HttpServletRequest对象实例
hsr.getRequestDispatcher("/timeLimit.jsp").forward(request, response);

request dispatcher的二种传送请求方式 
Forward: 将请求从一个servlet传到服务器上的其他资源(servlet、JSP、HTML); 
Include: 将静态或动态内容包含在当前servlet中; 
获得request dispatcher的二种方式: 
ServletRequest.getRequestDispatcher("/timeLimit.jsp")       // 相对路径 
ServletContext.getRequestDispatcher("timeLimit.jsp")        // 绝对路径 
Response.sendRedirect(/servapp/state/login);//要写绝对路径,产生新的请求 
Forward(req,resp);//在当前路径基础上跳转
两个页面之间跳转的时侯如果需要数据传递,则只能用forward(),因为sendRedirect()重定向会产生一个新的请求。
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: