目录
一、过滤器 Filter
1.什么是过滤器
Filter 过滤器它是 JavaWeb 的三大组件之一。三大组件分别是Servlet 程序、Listener 监听器、Filter过滤器。
Filter 过滤器它是 JavaEE 的规范,也就是一个接口。 Filter
过滤器它的作用是拦截请求和过滤响应。拦截请求常见的应用场景有权限检查、日记操作、事务管理等等。
2.使用
- 定义一个类,实现接口Filter
- 复写方法
public class HelloFilter implements Filter {
public HelloFilter() {
System.out.println("HelloFilter构造器");
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println(filterConfig.getInitParameter("userName"));
System.out.println("初始化HelloFilter结束");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println("前置代码");
//放行(他将调用下一个Filter的doFilter())
chain.doFilter(request, response);
System.out.println("后置代码");
}
@Override
public void destroy() {
System.out.println("销毁HelloFilter");
}
}
- 配置拦截路径
1. web.xml
2. 注解
<filter>
<filter-name>usernamefilter</filter-name>
<filter-class>com.jsoft.afternoon.filter.Filter01_UsernameFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>usernamefilter</filter-name>
<url-pattern>/login2.do</url-pattern>
</filter-mapping>
3.关于细节
1. 过滤器执行流程
- 执行过滤器
- 执行放行后的资源
- 回来执行过滤器放行代码下边的代码
3. 过滤器生命周期方法
- init:在服务器启动后,会创建Filter对象,然后调用init方法。只执行一次。用于加载资源
- doFilter:每一次请求被拦截资源时,会执行。执行多次
- destroy:在服务器关闭后,Filter对象被销毁。如果服务器是正常关闭,则会执行destroy方法。只执行一次。用于释放资源
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>谁定义在上边,谁先执行
二、监听器 Listener
1.什么是监听器
监听器也叫Listener,是Servlet的监听器,它可以监听客户端的请求、服务端的操作等。通过监听器,可以自动激发一些操作,比如监听在线的用户的数量。
2.Listener接口分类
- ServletContext监听器
ServletContextListener监听ServletContext对象
ServletContextAttributeListener监听对ServletContext属性的操作,比如增加、删除、修改 - HttpSession监听器
HttpSessionListener监听Session对象
HttpSessionAttributeListener监听Session中的属性操作
HttpSessionActivationListener监听HTTP会话的active和passivate情况,passivate是指非活动的session被写入持久设备(比如硬盘),active相反。 - ServletRequest监听器
ServletRequestListener监听Request对象
ServletRequestAttributeListener监听Requset中的属性操作
3.钝化与活化监听器
- session的序列化和反序列化:一般来说,服务器启动后就不在关闭了,但是如果迫不得已需要重启,而用户会话还在进行相应的操作,就需要将信息保存起来放在磁盘中。比如某个客户端正在进行访问服务器,但是服务器此时正常关闭了,那么tomcat就会将该客户端的session存储到磁盘中,当服务器重新启动时,可以通过反序列化还原出之前的session,里面可能包含用户的登录信息(session中的数据也要可序列化)等。(这些都是服务器自己完成的)
- 钝化与活化:当网站有大量用户访问时,服务器可能产生非常多的session,这会导致服务器的性能降低。当某个客户端超过一定的时间(可配置)没有与服务器交互,那么服务器就可以将session数据钝化(存储到磁盘中),等该用户需要重新使用的时候再活化(加载到内存)。这也是服务器帮做的。被钝化的数据也要能够被序列化。