了解servlet高级过滤器Filter

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()
	 * 在容器销毁时调用。。
	 */
	@Override
	public 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(),将请求会给下一个过滤器,或利用转发。重定向将请求转发到其他资源
	 */
	@Override
	public 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文件中过滤器的参数
	 */
	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		System.out.println("init----------------FirstFilter");
	}

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值