java 过滤器详细知识

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

过滤器工作原理
用户请求经过过滤器判断后 过滤器将用户请求发送至web资源 web资源将资源响应发送至过滤器 过滤器将web资源的响应发送给用户


过滤器的生命周期
实例化 web.xml配置 在web容器启动后实例化一次
初始化 init方法
过滤   doFilter
销毁   destroy()

过滤器可以改变用户请求的web资源,改变用户请求的路径
过滤器不可以直接返回用户数据

多个过滤器用户请求会先执行放行前的过滤器1的方法 在执行chin.doFilter方法到达 过滤器2 执行过滤器2 的放行前的方法 接着执行chain.doFilter到达
servlet service方法 然后返回过滤器2 执行过滤器2 放行后的方法 在执行过滤器1 放行后的方法 最后反馈给用户请求

下面为Filter链的实例

public class FirstFilter implements Filter{

    public void destroy() {
        // TODO Auto-generated method stub
        System.out.println("firstfilter destroy");
    }

    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        // TODO Auto-generated method stub
        System.out.println("firstfilter  start");
        chain.doFilter(request, response);
        System.out.println("firstfilter end");
    }

    public void init(FilterConfig filterConfig) throws ServletException {
        // TODO Auto-generated method stub
        System.out.println("firstfilter init");
    }

}



public class SecondFilter implements Filter{

    public void destroy() {
        // TODO Auto-generated method stub
        System.out.println("second filter destroy");
    }

    public void doFilter(ServletRequest arg0, ServletResponse arg1,
            FilterChain arg2) throws IOException, ServletException {
        // TODO Auto-generated method stub
        System.out.println("sencond filter start");
        arg2.doFilter(arg0, arg1);
        System.out.println("second filter end");
    }

    public void init(FilterConfig arg0) throws ServletException {
        // TODO Auto-generated method stub
        System.out.println("second filter init");
    }

}




<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <display-name></display-name>    
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
 
  <filter>
      <filter-name>first</filter-name>
      <filter-class>com.gac.test.FirstFilter</filter-class>
  </filter>
  <filter-mapping>
      <filter-name>first</filter-name>
      <url-pattern>/index.jsp</url-pattern>
  </filter-mapping>
 
   <filter>
      <filter-name>second</filter-name>
      <filter-class>com.gac.test.SecondFilter</filter-class>
  </filter>
  <filter-mapping>
      <filter-name>second</filter-name>
      <url-pattern>/index.jsp</url-pattern>
  </filter-mapping>
</web-app>

打印结果为
second filter init
firstfilter init
2015-7-30 14:41:41 org.apache.coyote.http11.Http11Protocol start
信息: Starting Coyote HTTP/1.1 on http-8080
2015-7-30 14:41:41 org.apache.jk.common.ChannelSocket init
信息: JK: ajp13 listening on /0.0.0.0:8009
2015-7-30 14:41:41 org.apache.jk.server.JkMain start
信息: Jk running ID=0 time=1/10  config=null
2015-7-30 14:41:41 org.apache.catalina.startup.Catalina start
信息: Server startup in 361 ms
firstfilter  start
sencond filter start
//这里处理jsp页面
second filter end
firstfilter end

servlet2.5过滤器分为
REQUEST 用户直接访问页面时,web容器将会调用过滤器
FORWARD 目标用户通过RequestDispatcher的forward访问时该过滤器被调用 在jsp页面中引入<jsp:forward page="main.jsp"></jsp:forward>标签 就会调用过滤器forward配置的过滤器
INCLUDE 目标资源通过RequestDispatcher的include方法调用时,该过滤器被调用 在jsp页面中引入<jsp:include page=""></jsp:include>
ERROR   目标资源通过声明式异常处理机制调用时,过滤器将被调用。
Servelt3.0 ASYNC 支持异步处理 @WebFilter 用于将一个类声明为过滤器,该注解将会在部署时被容器处理,容器根据具体的属性配置将相应
的类部署为过滤器。 @WebFilter常用属性:??



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring框架中的拦截器和过滤器都是用于对请求进行拦截和处理的,但是它们的具体实现方式和作用范围有所不同。下面是Spring拦截器和过滤器知识体系: 1. 过滤器过滤器是Servlet规范中的一部分,可以对请求进行过滤和处理,例如对请求参数进行过滤、对响应进行处理等。过滤器在Servlet容器中执行,可以对所有的请求进行过滤,包括静态资源和动态资源等。 2. 拦截器:拦截器是Spring框架中的一种机制,可以对控制器中的请求进行拦截和处理,例如对登录状态进行判断、对请求参数进行处理等。拦截器在Spring容器中执行,只能对控制器中的请求进行拦截,不能对静态资源进行拦截。 3. 实现方式:过滤器是基于Java Servlet规范实现的,可以通过实现javax.servlet.Filter接口来实现;拦截器是基于Spring框架实现的,可以通过实现org.springframework.web.servlet.HandlerInterceptor接口来实现。 4. 作用范围:过滤器的作用范围比拦截器广,可以对所有的请求进行过滤处理,包括静态资源和动态资源;而拦截器只能对控制器中的请求进行拦截处理。 5. 执行顺序:过滤器的执行顺序是由部署描述符中的过滤器声明顺序决定的,而拦截器的执行顺序可以通过实现org.springframework.core.Ordered接口或者使用@Order注解来指定。 6. 应用场景:过滤器可以用于请求参数的校验、字符编码的处理、请求的安全性保障等;而拦截器可以用于登录状态的验证、请求的日志记录、性能监控等。 以上是Spring拦截器和过滤器知识体系,它们都是Web开发中非常重要的组件,可以提高系统的可维护性和可扩展性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值