了解servlet高级过滤器Filter

来源:互联网 发布:04年总决赛数据 编辑:程序博客网 时间:2024/05/18 09:24

1.什么是过滤器?有什么用?

    定义:过滤器是一个服务端的组件。它可以截取用户端的请求与响应信息,并对这些作息过滤。


2.怎么过滤?

  1. 工作原理 

  2. 生命周期  
     
    实例化在web.xml中。只会实例化一次。
      初始化调用init()。只会调用一次
      过滤--->doFilter().有请求就会调用doFilter();
      销毁--->dostroy;在服务器关闭的时候。
  3. 过滤器分为几种类型

  4. 过滤的步骤。
    1. 先实现Filter接口
    2. 在web.xml
  5. 过滤器链是什么?
        用户请求--------->过滤器1------>filter2----->filter3----web资源 --->fitler3-->filter2--->filter1--->用户  (其中顺序是web.xml中先后定义的顺序);
  6. 问题
    • 过滤器是否能改变用户请求的Web资源呢? 也就是能否改变用户请求的路径?
      答:是可以。

    • 过滤器能否直接返回数据,能不能直接处理用户请求?
      答:是不可以。因为它不是一个标准的servlet。

    • Web项目中多个过滤器是如何实现的?
      答:建多个过滤器。
    • 多个过滤器对应同一个用户路径执行的顺序如何?

3.在哪要过滤?

   比如:还没有登录就直接到哪一个界面。从而会提示用户先登录。。。。

代码实现:

web.xml:

<span style="font-size:18px;"><filter>        <filter-name>FirstFilter</filter-name>        <filter-class>com.tan.filter.FirstFilter</filter-class>    </filter>    <filter-mapping>        <filter-name>FirstFilter</filter-name>        <url-pattern>/index.jsp</url-pattern>        <dispatcher>REQUEST</dispatcher>    </filter-mapping>    <!--      <filter>        <filter-name>SecondFilter</filter-name>        <filter-class>com.tan.filter.SecondFilter</filter-class>    </filter>    <filter-mapping>        <filter-name>SecondFilter</filter-name>        <url-pattern>/*</url-pattern>    </filter-mapping>  -->    <filter>        <filter-name>ForwardFilter</filter-name>        <filter-class>com.tan.filter.ForwardFiler</filter-class>    </filter>    <filter-mapping>        <filter-name>ForwardFilter</filter-name>        <url-pattern>/main.jsp</url-pattern>        <dispatcher>FORWARD</dispatcher>    </filter-mapping>    <filter>        <filter-name>IncludeFilter</filter-name>        <filter-class>com.tan.filter.IncludeFilter</filter-class>    </filter>    <filter-mapping>        <filter-name>IncludeFilter</filter-name>        <url-pattern>/include.jsp</url-pattern>        <dispatcher>INCLUDE</dispatcher>    </filter-mapping>    <filter>        <filter-name>ErrorFilter</filter-name>        <filter-class>com.tan.filter.ErrorFilter</filter-class>    </filter>    <filter-mapping>        <filter-name>ErrorFilter</filter-name>        <url-pattern>/error.jsp</url-pattern>        <dispatcher>ERROR</dispatcher>    </filter-mapping>    <error-page>        <error-code>404</error-code>        <location>/error.jsp</location>    </error-page></span>
javaee部分:

 

/** *  */package com.tan.filter;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * 功能: * @author TanZi * @time 2015-5-15上午11:02:31 */public class FirstFilter implements Filter {/* (non-Javadoc) * @see javax.servlet.Filter#destroy() * 在容器销毁时调用。。 */@Overridepublic void destroy() {System.out.println("destroy----------FirstFilter");}/* (non-Javadoc) * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain) * 这个方法完成实际的过滤操作。这个地主是过滤器的核心方法,当用户请求访问与过滤器关联的URL时,Web容器将先调用过滤器的dofilter()方法, * FilterChain 参数可以调用chain.doFilter(),将请求会给下一个过滤器,或利用转发。重定向将请求转发到其他资源 */@Overridepublic void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {System.out.println("Start--FirstFilter----------->doFilter");HttpServletRequest req=(HttpServletRequest) request;HttpServletResponse res=(HttpServletResponse) response;//res.sendRedirect(req.getContextPath()+"/main.jsp");//req.getRequestDispatcher("main.jsp").forward(req, res);req.getRequestDispatcher("include.jsp").include(request, response);    //chain.doFilter(request, response);     //到达界面之后再运行    System.out.println("End---FirstFilter---------->doFilter");}/* (non-Javadoc) * @see javax.servlet.Filter#init(javax.servlet.FilterConfig) * 这是过滤器的初始化方法,Web容器创建过滤器实例后将调用这个方法。这个方法中可以读取Web.xml文件中过滤器的参数 */@Overridepublic void init(FilterConfig filterConfig) throws ServletException {System.out.println("init----------------FirstFilter");}}


0 0
原创粉丝点击