关于Web监听器(Servlet)定义有以下几点:
·Servlet规范中定义的一种特殊类
·用于监听ServletContext(jsp中的application),Httpsession(jsp中的session),ServletRequest(jsp中的request)等域对象的创建和销毁事件
·用于监听域对象的属性发生修改的事件
·可以在事件发生前,发生后做一些必要的处理
用途:
1.系统启动时初始化信息(ServletContextListener)
2.统计在线人数(HttpSessionListener)
3.统计网站访问量
4.跟SPRing结合
监听器的顺序:
一个web.xml下有多一个监听器的话:是按照web.xml中配置顺序的加载而加载的。加载级别:
优先级: 监听器>过滤器>Servlet(但是在Servlet中设置了load-on-startup这个级别就要另当别论了。)介绍一下这三个监听器的创建与销毁
①先来看下全局的监听器:
ServletContextListener与Spring配置的关系
ServletContextListener例子—————-对应Servlet中的ServletContext
src/下创建的FirstListener:
public class FirstListener implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent ServletContextevent) { String initParam = ServletContextevent.getServletContext().getInitParameter("initParam"); System.out.println("contextInitialized initParam= " + initParam); } @Override public void contextDestroyed(ServletContextEvent ServletContextevent) { //销毁的时候可以做一些释放数据库的操作 System.out.println("contextDestroyed"); }}在我们的web.xml中:
//这样的配置有没有觉得和配置Spring一样呢?其实Spring就是以其为基础的 <listener> <listener-class>com.FirstListener</listener-class> </listener> <context-param> <param-name>initParam</param-name> <param-value>you has got me!</param-value> </context-param>可以得到如下图的结果这样的配置有没有觉得很眼熟?
没错,在我们的框架中,每次都要加载spring的监听器,然而初始化加载我们的配置文件applicationContext.xml用到的就是ServletContextListener(相当于jsp中的application)的全局属性。
②HttpSessionListener例子———————————-对应的Servlet中的HttpSession src/下创建的MyHttpSessionListener
//这里我加上了时间//说明了超时的时间并不是严格的1分钟public class MyHttpSessionListener implements HttpSessionListener { @Override public void sessionCreated(HttpSessionEvent httpSessionEvent) { System.out.println("sessionCreated"); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); Date time = new Date(); String startTime = sdf.format(time); System.out.println("当前时间为" + startTime); } @Override public void sessionDestroyed(HttpSessionEvent httpSessionEvent) { System.out.println("sessionDestroyed"); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); Date time = new Date(); String endTime = sdf.format(time); System.out.println("结束时间为" + endTime); }}web.xml中的配置
<!-- 注册第二个监听器,HttpSessionListener --> <listener> <listener-class>com.MyHttpSessionListener</listener-class> </listener> <!-- 设置session超时,中间的值单位是分钟 --> <session-config> <session-timeout>1</session-timeout> </session-config>可以看到在web.xml中设置的时间为1分,但是session超时并没有1分钟那么准时。
③ServletRequestListener的例子:
public class MyServletRequestListener implements ServletRequestListener { @Override public void requestInitialized(ServletRequestEvent servletRequestEvent) { String name = servletRequestEvent.getServletRequest().getParameter("name"); System.out.println("name = " + name ); System.out.println("requestInitialized"); } @Override public void requestDestroyed(ServletRequestEvent servletRequestEvent) { System.out.println("requestDestroyed"); }}web.xml里的配置:
<!-- 注册第三个个监听器,HttpSessionListener --> <listener> <listener-class>com.MyServletRequestListener</listener-class> </listener>ServletRequestListener:通过这个我们可以在网页上传参,而此时就可以监听到前端页面传过来的值。
此篇是复习了webServletListener的基础内容,由此记录一下,对应上一篇的JSP+Servlet.
新闻热点
疑难解答