Servlet
里的监听器
servlet规范包括三个技术点:
servlet
,
listener
,
filter
。监听器有三类
8
种
什么是监听器
监听器就是监听某个对象的的状态变化的组件,是一个实现特定接口的Java
类,当被监听对象发生特定事件后,监听器的某个对应的方法将会被立即执行
监听器的相关概念
事件源:被监听的对象 -----
三个域对象
request session servletContext
监听器:监听事件源对象
事件源对象的状态的变化都会触发监听器
注册监听器:将监听器与事件源进行绑定
响应行为:监听器监听到事件源的状态变化时 所涉及的功能代码 ----
程序员编写代码
监听器的作用
当应用中特定事件发生时自动执行一些操作,可以检测网站的在线人数、统计网站的访问量等在Servlet
规范中定义了多种类型的监听器,它们用于监听的事件源分别
ServletContext, HttpSession
和ServletRequest这三个域对象。和其它事件监听器略有不同的是,
servlet
监听器的注册不是直接注册在事件源上,而是由WEB
容器负责注册,开发人员只需在
web.xml
文件中使用
<listener>
标签配置好监听器。
监听对象的创建和销毁
HttpSessionListener、
ServletContextListener
、
ServletRequestListener
分别监控着Session、Context、Request对象的创建和销毁
HttpSessionListener可以用来收集在线者信息
ServletContextListener可以获取
web.xml
里面的参数配置,实现页面计数器
ServletRequestListener
监听对象属性变化
ServletContextAttributeListener、
HttpSessionAttributeListener
、
ServletRequestAttributeListener
分别监听着
Context
、
Session
、
Request
对象属性的变化。这三个接口中都定义了三个方法来处理被监听对象中的属性的增加,删除和替换的事件,同一个事件在这三个接口中对应的方法名称完全相同,只是接受的参数类型不同。例如attributeAdded()
、
attributeRemoved()
、
attributeReplaced()
监听
Session
内的对象
HttpSessionBindingListener和
HttpSessionActivationListener
,实现这两个接口并不需要在
web.xml 文件中注册实现HttpSessionBindingListener
接口,
JavaBean
对象可以感知自己被绑定到
Session
中和从 Session 中删除的事件【和
HttpSessionAttributeListener
的作用是差不多的】
实现
HttpSessionActivationListener
接口,
JavaBean
对象可以感知自己被活化和钝化的事件(当
服务器关闭时,会将
Session
的内容保存在硬盘上【钝化】,当服务器开启时,会将
Session
的内容
在硬盘式重新加载【活化】)
想要测试出
Session
的硬化和钝化,需要修改
Tomcat
的配置的。在
META-INF
下的
context.xml
文件中添
加下面的代码:
<Context>
<Manager className="org.apache.catalina.session.PersistentManager" maxIdleSwap="1">
<Store className="org.apache.catalina.session.FileStore" directory="yanjun"/>
</Manager>
</Context>
跟踪用户的
4
种方法
会话就是从客户端打开与服务器的连接并发出请求,到服务器响应客户请求的全过程
会话跟踪就是对一个用户对服务器的连续请求和接受响应的监视。由于客户和服务器是基于
HTTP
协议进行通信的,不能保存客户的信息,也就是说一次响应结束之后连接就断开了,下一次请求时,需要重新建立连接,建立连接后还需要判断是否是同一个客户。
隐藏字段:非常适合步需要大量数据存储的会话应用
URL重写:可以确保所有浏览器中有效,但是大量数据会降低性能。 而且这样的
URL
是不安全的,不过对于简单应用,URL
重写是可信赖的,也很容易实现
Cookie:优点是在浏览器会 话结束后,甚至在客户端计算机重启后它仍可以保留其值
Session:记录一系列状态,Session的两种传递方法第一种通过cookies实现。第二种通过URL重写来实现。