【JavaWeb】Filter&Listener(35)

引言

  • 据开学还有20天;

知识点总结

在这里插入图片描述

Filter

概念

在Web中,过滤器被称为Filter,通过过滤器可以对Web请求进行过滤,从而完成权限管理,敏感字筛选等功能。

快速入门

1.使用步骤
1.定义一个类,实现Filter接口;
2.复写方法;
3.配置拦截路径;

package filter;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter("/*")
public class FilterDemo01 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("filter01执行了");
        //放行
        filterChain.doFilter(servletRequest,servletResponse);
    }

    @Override
    public void destroy() {

    }
}

注意

1.Web.xml配置
在这里插入图片描述
2.过滤器执行流程
在这里插入图片描述

3.过滤器生命周期

4.过滤器配置详解

1. 具体资源路径: /index.jsp   只有访问index.jsp资源时,过滤器才会被执行
2. 拦截目录: /user//*	访问/user下的所有资源时,过滤器都会被执行
3. 后缀名拦截: *.jsp		访问所有后缀名为jsp资源时,过滤器都会被执行
4. 拦截所有资源:/*		访问所有资源时,过滤器都会被执行
* 拦截方式配置:资源被访问的方式
		* 注解配置:
			* 设置dispatcherTypes属性
					1. REQUEST:默认值。浏览器直接请求资源
					2. FORWARD:转发访问资源
					3. INCLUDE:包含访问资源
					4. ERROR:错误跳转资源
					5. ASYNC:异步访问资源
			* web.xml配置
					* 设置<dispatcher></dispatcher>标签即可

5.过滤器链
执行多个过滤器;

		* 执行顺序:如果有两个过滤器:过滤器1和过滤器2
				1. 过滤器1
				2. 过滤器2
				3. 资源执行
				4. 过滤器2
				5. 过滤器1 

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

案例

https://blog.youkuaiyun.com/alpha_xia/article/details/108558740

Listener

概念

Web三大组件之一(Servlet,Filter);

事件监听机制

		* 事件	:一件事情
		* 事件源 :事件发生的地方
		* 监听器 :一个对象
		* 注册监听:将事件、事件源、监听器绑定在一起。 当事件源上发生某个事件后,执行监听器代码

ServletContextListener对象

在这里插入图片描述

void contextDestroyed(ServletContextEvent sce) 
        //服务器关闭时自动销毁ServletContext对象
 void contextInitialized(ServletContextEvent sce) 
         //服务器开启时自动创建ServletContext对象
package Listener;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

@WebListener
public class ListenerDemo01 implements ServletContextListener {
    public static void main(String[] args) {
       // ff
    }
    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        System.out.println("对象创建了");
    }

    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
        System.out.println(" 对象销毁了");
    }
}

用ServletContext对象获取配置文件

package Listener;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
import java.io.FileInputStream;
import java.io.FileNotFoundException;

@WebListener
public class ListenerDemo01 implements ServletContextListener {

    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        //获取配置文件
        //1.获取ServletContext对象
        ServletContext servletContext = servletContextEvent.getServletContext();
        //2.加载文件进内存
        String contextConfigLocation = servletContext.getInitParameter("contextConfigLocation");
        //3.文件的路径(通过参数名)(在web.xml中配置)
        String realPath = servletContext.getRealPath(contextConfigLocation);
        try {
            FileInputStream fis=new FileInputStream(realPath);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        System.out.println(realPath);
         System.out.println("对象创建了");
    }

    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
        System.out.println(" 对象销毁了");
    }
}

web.xml文件下的配置:

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>WEB-INF/classes/T1.xml</param-value>
    </context-param>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

高冷小伙

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

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

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

打赏作者

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

抵扣说明:

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

余额充值