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

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.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值