webServlet监听器(Listener)(框架基础)
原创
©著作权归作者所有:来自51CTO博客作者咪哥杂谈的原创作品,请联系作者获取转载授权,否则将追究法律责任
webServlet监听器(Listener)(review)
关于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.