JavaWeb项目中使用到的过滤器

现实生活中的过滤器

筛子

 

那么,多个过滤器就可以形成一个过滤链    

程序中的过滤器,类似的,注意一点:B/S程序是基于请求与响应的模式。

那我们也会用到一个类似于筛子的东西

 过滤器是Servlet中的一个重要的接口,和Servlet类似。

 

配置过滤器,需要考虑该过滤器给谁用?

package com.njwbhz.mood.filter;
import javax.servlet.*;
import java.io.IOException;
public class MyFilter1 implements Filter {
  
private int age;
  
public MyFilter1 ( ) {
      System.
out.println ( "MyFilter1()" );
   }
  
@Override
  
public void init ( FilterConfig filterConfig ) throws ServletException {
      System.
out.println ( "MyFilter1.init()" );
     
this.age = Integer.valueOf ( filterConfig.getInitParameter ( "age" ) );
   }
  
//doFilter相当于servlet中的service方法
  
//ServletRequestHttpServletRequest的弗雷
  
//ServletResponseHttpServletResponse的父类
  
//FilterChain是过滤链
  
@Override
  
public void doFilter ( ServletRequest servletRequest , ServletResponse servletResponse , FilterChain filterChain ) throws IOException, ServletException {
     
//核心的代码
     
//请求过来时,输出age的数据
     
System.out.println ( "request coming:" + age );// 过滤逻辑代码
     
//放行
     
filterChain.doFilter ( servletRequest , servletResponse );
     
//如果下面还有一个过滤器,继续出力下一个过滤器,如果没有,则最终请求控制器
     
//响应阶段
      
System.out.println ( "response coming" );
   }
  
@Override
  
public void destroy ( ) {
      System.
out.println ( "MyFilter1.destory" );
   }
  
//FilterConfig代表了过滤器中的位置
}

现在就给HelloServlet使用

Web.xml

<filter >
   <filter-name >myFilter1</filter-name >
   <filter-class>com.njwbhz.mood.filter.MyFilter1</filter-class>
   <init-param >
      <param-name >age</param-name >
      <param-value >20</param-value >
   </init-param >
</filter >
<filter-mapping >
   <filter-name >myFilter1</filter-name >
   <!--
     
起到拦截作用
      当请求
/hello时,本来直接访问servlet,现在被过滤器拦截住了
      先解决过滤器中的逻辑,最后再执行
servlet
   -->
  
<url-pattern >/hello</url-pattern >
</filter-mapping >

启动服务器:

 说明:过滤器是在服务器启动的时候实例化和初始化

观测哪些数据?

再增加一个过滤器,组成过滤链

package com.njwbhz.mood.filter;
import javax.servlet.*;
import java.io.IOException;
public class MyFilter2 implements Filter {
  
private int age;
  
public MyFilter2 ( ) { }
  
@Override
  
public void init ( FilterConfig filterConfig ) throws ServletException { }
  
//doFilter相当于servlet中的service方法
  
//ServletRequestHttpServletRequest的弗雷
  
//ServletResponseHttpServletResponse的父类
  
//FilterChain是过滤链
  
@Override
  
public void doFilter ( ServletRequest servletRequest , ServletResponse servletResponse , FilterChain filterChain ) throws IOException, ServletException {
      System.
out.println ( "MyFilter2 coming");// 过滤逻辑代码
     
//放行
     
filterChain.doFilter ( servletRequest , servletResponse );
      System.
out.println ( "MyFilter2 back" );
   }
  
@Override
  
public void destroy ( ) {
   }
}

<filter >
   <filter-name >myFilter2</filter-name >
   <filter-class>com.njwbhz.mood.filter.MyFilter2</filter-class>
</filter >
<filter-mapping >
   <filter-name >myFilter2</filter-name >
   <url-pattern >/hello</url-pattern >
</filter-mapping >

启动,测试

调整过滤器的顺序,MyFilter2调整到过滤链中的第一个位置

过滤链的执行顺序可以通过配置的顺序完成。

要求:过滤器或过滤链同时作用于HelloServlet以及LifeServlet

要求:过滤器或过滤链同时作用于HelloServlet以及LifeServlet,OtherServlet

配置多个url-pattern,麻烦

使用通配符

*:所有

url-pattern:   /*  所以的请求都会被过滤器拦截

               /page/user/login.jsp ,满足 ,则会进入到过滤器中

               只想让访问控制器的时候,进入过滤器

url-pattern:  匹配所有的没有后缀的控制器地址,写不了

           必须要先约定好,假如:控制器地址在配置的时候   ,约定都加一个后缀

           如 .do  或 .action  或.xyz   后缀随便写

          

url-pattern:  *.do

测试

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FairyKunKun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值