1.servlet监听器:
在 listener 这个包下 新建一个 xxxListener类,实现HttpSessionListener方法。
重写接口中的两个方法:
@Override
public void sessionCreated(HttpSessionEvent se) {
System.out.println("用户登陆了。。。");
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
//获取session
HttpSession session=se.getSession();
//获取容器
ServletContext application = session.getServletContext();
String name = (String) session.getAttribute("uname");
List<String> ulist = (List<String>) application.getAttribute("userlist");
ulist.remove(name);
System.out.println("用户销毁了。。。");
}
在web.xml文件中配置监听类的路径:
<listener>
<listener-class>com.sxt.listener.ChatListener</listener-class>
</listener>
2.Servlet过滤器
在 filters 包下新建一个 xxxFilter类 ,实现 Filter接口。
然后重写里面主要的三个方法:
//启动过滤器
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("过滤器启动。。。");
}
//进入和离开过滤器
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest)request;
HttpServletResponse res = (HttpServletResponse)response;
String URI = req.getRequestURI();
StringBuffer URL = req.getRequestURL();
System.out.println("进入过滤器。。。当前URI为:"+URI+"当前URL为:"+URL);
//进入servlet前运行的代码
chain.doFilter(request, response); //放行
//离开serlvet运行的代码
System.out.println("离开过滤器。。。");
}
//销毁过滤器
@Override
public void destroy() {
System.out.println("过滤器销毁。。。");
}
在web.xml文件中配置:
<filter>
<filter-name>charset</filter-name>
<filter-class>com.sxt.filters.CharsetFilter(过滤器的全限定名)</filter-class>
</filter>
<filter-mapping>
<filter-name>charset(与上面保持一致)</filter-name>
<url-pattern>/*(需要过滤的路径)</url-pattern>
</filter-mapping>
配置<url-pattern>的三种方式:
1. /* (过滤该web应用下的所有资源)
2. *.do *.html *.jsp (需要过滤某一类资源)
3. /admin/* (过滤该文件夹下的所有资源)
3.过滤器链(多个过滤器组合)
按 web.xml 文件中的过滤器配置先后顺序执行。
配置在前的先执行,配置在后的后执行。