Day53
*过滤器filter
单个过滤器的流程图
多个过滤器的流程图:顺序是根据过滤器的全类名的字典顺序来的
//urlPatterns表示需要过滤的资源,/*表示所有资源(jsp,css,png,servlet)
@WebFilter(filterName = "firstFilter", urlPatterns = "/*")
public class FirstFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
//初始化方法
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
//实现过滤功能
//因为我们现在用的请求都是http请求,所以先将请求做一个类型强转
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
System.out.println("1");
//执行下一个过滤器或者资源文件
filterChain.doFilter(request,response);
System.out.println("2");
}
@Override
public void destroy() {
//销毁方法
}
}
*监听器:(仅做了解)
通过统计session的个数来统计在线的人数(不精确的,因为用户关闭浏览器之后,session不会立马销毁)
@WebListener
public class SessionListener implements HttpSessionListener {
private int m = 0;
//当session被创建时,会调用此方法
@Override
public void sessionCreated(HttpSessionEvent httpSessionEvent) {
synchronized ("a"){
m++;
}
System.out.println("当前人数为"+m);
}
@Override
public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
synchronized ("a"){
m--;
}
System.out.println("有用户下线,当前人数为"+m);
}
}