Servlet3.0中的监听器相比于2.5的差别在于3.0增加了对注解的支持。
作用
在JavaWeb
中Listener是Servlet规范定义的一种特殊类,主要用于监听3个作用域的创建、销毁,以及其属性变更
Servlet中的三个作用域分别为:
HttpServletRequest,HttpSession,ServletContext。
注意pageContext表示jsp整个页面,不属于Servlet中的作用域
应用场景:
统计在线人数
页面访问量
应用启动时做一些初始化工作等等
监听器类应该实现下面接口之一:
1.对Request的监听有ServletRequestListener和ServletRequestAttributeListener。
前者可见监听Request的创建和销毁;
而后者可以对Request的属性进行监听。
2.对Session的监听有HttpSessionListener和HttpSessionAttributeListener。
HttpSessionListener可以监听HttpSession的创建跟销毁,
而HttpSessionAttributeListener则是对session中属性的监听,它可以监听到session新增属性、移除属性和属性值被替换时。
3.对于ServletContext的监听器有ServletContextListener和ServletContextAttributeListener。
ServletContextListener可以监听到ServletContext的创建和销毁,
而ServletContextAttributeListener可以监听到ServletContext中属性的新增、移除和属性值的替换。
解决路径问题:
import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.annotation.WebListener; @WebListener public class AppListener implements ServletContextListener{ @Override public void contextDestroyed(ServletContextEvent arg0) { System.out.println("contextDestroyed 方法被调用"); } @Override public void contextInitialized(ServletContextEvent arg0) { //取到ServletContext ServletContext context=arg0.getServletContext(); context.setAttribute("qijian", context.getContextPath()); System.err.println("---------Servlet容器创建成功 ctx被放到ServletContext作用域-------"); } }
前端页面就可以这样使用:
<form class="layui-form" id="loginFrm" method="post" action="${qijian}/login/login.action"> </form>