【JavaWeb】过滤器与监听器

过滤器

过滤器:依赖于servlet容器。它具有拦截客户端请求的功能,Servlet过滤器可以改变请求中的内容,来满足实际开发中的需要。一般用于完成通用的操作,如:登陆验证、统一编码处理、敏感字符过滤…

快速入门

1.步骤

  1. 定义一个类,实现接口Filter
  2. 复写方法
  3. 配置拦截路径
    3.1 web.xml
    3.2 注解 :@WebFilter
  4. 根据需要修改request头和request数据;
  5. 在servlet被调用之后截获.

最简单的例子(使用注解):

@WebFilter("/*") //访问所有资源之前都会执行该过滤器
public class FilterDemo1 implements Filter {
   
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
   

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
   
        System.out.println("filter 被执行了");
        //放行
        filterChain.doFilter(servletRequest,servletResponse);
    }

    @Override
    public void destroy() {
   

    }
}

2.使用web.xml进行配置

<filter>
	<filter-name>demo1</filter-name>
	<filter-class>cn.lwl.filter.FilterDomo1</filter-class>
</filter>
<filter-mapping> 
	<filter-name>demo1</filter-name>
	<!-- 拦截路径  -->
	<url-pattern>/*</url-pattern>
</filter-mapping>

3. 执行流程

  1. 在服务器启动后创建Filter对象,然后调用init方法,一般用于加载资源
  2. 执行doFilter方法,进行拦截
  3. 在服务器关闭后,Filter被销毁。一般用于释放资源

4.过滤器配置

拦截路径配置:

  1. 拦截具体资源路径: /index.jsp   代表只有访问index.jsp资源的时候,过滤器才会被执行
  2. 拦截目录:/user/*     代表访问/user下的所有资源时,过滤器都会被执行
  3. 后缀名拦截: *.jsp 所有后缀名为jsp的资源被访问时,都会执行过滤器
  4. 拦截所有资源: /*

拦截方式配置:资源被访问的方式

  1. 注解配置 , 对dispatcherTypes的只值进行配置
      1. REQUEST:默认值。浏览器直接请求资源
      2. FORWARD:转发访问资源
      3. INCLUDE:包含访问资源
      4. ERROR:错误跳转资源
      5. ASYNC:异步访问资源

  2. web.xml配置
    设置 < dispatcher > < /dispatcher >标签即可

5.过滤器链

执行顺序:如果有两个过滤器:过滤器1和过滤器2

  1. 过滤器1
  2. 过滤器2
  3. 资源执行
  4. 过滤器2
  5. 过滤器1

过滤器先后顺序问题:
6. 注解配置:按照类名的字符串比较规则比较,值小的先执行
   如: AFilter 和 BFilter,AFilter就先执行了。
7. web.xml配置: 谁定义在上边,谁先执行

案例1:登陆验证

需求

  1. 访问day17_case案例的资源。验证其是否登录
  2. 如果登录了,则直接放行。
  3. 如果没有登录,则跳转到登录页面,提示"您尚未登录,请先登录"。

分析:

  1. 判断用户要访问的资源是否是登录相关的资源,如果是的话直接放行,否则进入第二步
  2. 判断用户是否已经登录,也就是Session中是否已经有User,如果有的话说明已经登录,直接放行。否则就是没有登录,跳转到登录页面。
    源码:
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
   
        //0.强制转换
        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

编程芝士

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

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

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

打赏作者

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

抵扣说明:

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

余额充值