事件监听器

发表时间:2017-05-15 16:30:28 浏览量( 20 ) 留言数( 0 )

学习目标:

1、了解Java的历史

2、为什么要学习Java语言

3、端正学习态度


学习过程:

一、监听器

什么是事件监听器,是指支持ServletContext、HttpSession及ServletRequest中状态改变的事件通知,在2.3规范后出现。实现了一个或多个servlet事件监听器接口的类型。

监听器类的规定,必须在部署描述符中配置实现类,最常用ServletContextListener和HttpSessionListener

1、ServletContextListener

ServletContextListener的作用一般是为整个WEB应用提供一些服务和支持。可以在服务器启动时做一些初始化的设置,或者服务器销毁是做一些回收操作等。

(1)ServletContextListener代码实现:

   ** * 整个应用程序监听 * @author Administrator * */public class ApplicatonListener implements ServletContextListener {   public void contextInitialized(ServletContextEvent arg0) {        System.out.println("服务器启动时触发");    }    public void contextDestroyed(ServletContextEvent arg0) {        System.out.println("服务器关闭触发");    }}

在web.xml的配置:

<!-- 注册监听器 -->
<listener>
  <listener-class>com.listener.ApplicatonListener</listener-class>
</listener>

2、HttpSessionListener

可以监听新建或者销毁session时候自动触发

   public class SessionListener implements HttpSessionListener{    public void sessionCreated(HttpSessionEvent arg0) {        System.out.println("session建立");    }    public void sessionDestroyed(HttpSessionEvent arg0) {        System.out.println("session的销毁");    }}

在web.xml的配置:

<listener>
  <listener-class>com.listener.SessionListener</listener-class>
</listener>

二、session实现机制

我们前面讲过http协议是一种无状态的协议,是一次连接,服务器本身并不能区分出当前是哪一个浏览器在访问它,以为一次连接后就断开这个连接了,那么我们的的Session保存的数据又是如何实现的呢。服务器是如何区分当前是哪一个会话呢?各种网页编程语言如:asp.net php java都实现了自己的一套session管理机制的:

1、服务器需要一个很好的办法来区分不同的浏览器的会话,就是每一个新的用户访问服务器时都会为其分配一个唯一的sessionid。所有每一个会话都会分配一个唯一标识。

2、因为服务器需要知道这个客户端是哪一个,服务器需要在客户端与服务器间不停的传递sessionid的,会话状态的维护就是要靠增加这个来做到的吧,这个操作不需要我们用户或者程序员操作的,有浏览器和服务器之间自动完成。当然我们明白这个机制后,也可以自己写一个http的连接,然后保存这个sessionid,这样我们就可以保存和服务器的会话了。

3、这个sessionid既保持在服务器,也保存在客户端,第一次访问是有服务器生成,并发回给浏览器,浏览器以后每次访问服务都会发给服务器。举个例子来说吧,比如你第一天上班,公司会给你办一张门禁卡,以后你天天上班都要带着这张门禁卡打卡,公司就知道是你来上班了。

在客户端一般sessionid是保存在cookie中的,如果cookie禁用了,那么会一get的方式在url中发送给服务器。当用户关闭浏览器是,服务器事实上是不知道的,sessionid会在默认会在用户不访问30分钟后才会把这个session销毁。大家也可以登录tomcat的服务器界面看看当前有几个sessionid在保存着。

如果你没有给你的tomcat添加管理用户,要先添加一个管理用户,打开tomcat的目录下的conf目录下的tomcat-users.xml,打开这个文件,发现内容很多,其实都是注释,在这里添加一个用户就可以了。

<user username="admin" password="admin" roles="manager"/>

打开tomcat的管理界面http://localhost:8080/。点击Tomcat Manager。

attcontent/3386e989-8c89-4014-babe-439ac3134ff9.png

出现登录界面,输入你刚才添加的用户名和密码就可以了。

attcontent/cbfad322-2b3e-43ad-847e-9ade5e590e52.png

这时候你可以看到所有的项目,你可以看到当前有几个session,点击这个数字就可以看到sessionid了。

attcontent/6095e316-7c7b-4e1e-ae85-5b400756bb26.png

这个就是随机生成的保存在服务器的ssessionid

attcontent/a32e42e5-02ac-4fc0-ac13-70243c988392.png

4、session id 应该是可以被监听到,然后伪造攻击的。