引言
- 据开学还有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>
330

被折叠的 条评论
为什么被折叠?



