首页 > 学院 > 开发设计 > 正文

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

2019-11-08 01:23:39
字体:
来源:转载
供稿:网友

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.


上一篇:一笔画问题

下一篇:文章标题

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表