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>
可以得到如下图的结果

webServlet监听器(Listener)(框架基础)_基础

这样的配置有没有觉得很眼熟?

  没错,在我们的框架中,每次都要加载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>

webServlet监听器(Listener)(框架基础)_webservlet_02

可以看到在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>

webServlet监听器(Listener)(框架基础)_框架_03

webServlet监听器(Listener)(框架基础)_webservlet_04

ServletRequestListener:通过这个我们可以在网页上传参,而此时就可以监听到前端页面传过来的值。

此篇是复习了webServletListener的基础内容,由此记录一下,对应上一篇的JSP+Servlet.