Servlet事件监听器

更新时间:2023-03-15 19:23:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

在Servlet技术中已经定义了一些事件,并且我们可以针对这些事件来编写相关的事件监听器,从而对事件作出相应处理。Servlet事件主要有3类:Servlet上下文事件、会话事件与请求事件。下面具体讲解这3类事件的监听器实现。 1.对Servlet上下文进行监听

可以监听ServletContext对象的创建和删除以及属性的添加、删除和修改等操作。该监听器需要使用到如下两个接口类:

● ServletContextAttributeListener:监听对ServletContext属性的操作,如增加、删除、修改操作。

● ServletContextListener:监听ServletContext,当创建ServletContext时,激发contextInitialized (ServletContextEvent sce)方法;当销毁ServletContext时,激发contextDestroyed(ServletContext- Event sce)方法。

2.监听Http会话

可以监听Http会话活动情况、Http会话中属性设置情况,也可以监听Http会话的active、paasivate情况等。该监听器需要使用到如下多个接口类: ● HttpSessionListener:监听HttpSession的操作。当创建一个Session时,激发session Created (SessionEvent se)方法;当销毁一个Session时,激发sessionDestroyed (HttpSessionEvent se) 方法。

● HttpSessionActivationListener:用于监听Http会话active、passivate情况。

● HttpSessionAttributeListener:监听HttpSession中属性的操作。当在Session增加一个属性时,激发attributeAdded(HttpSessionBindingEvent se) 方法;当在Session删除一个属性时,激发

attributeRemoved(HttpSessionBindingEvent se)方法;在Session属性被重新设置时,激发attributeReplaced(HttpSessionBindingEvent se) 方法。 3.对客户端请求进行监听

对客户端的请求进行监听是在Servlet 2.4规范中新添加的一项技术,使用的接口类如下:

● ServletRequestListener接口类。

● ServletRequestAttrubuteListener接口类。 Servlet上下文监听器实例

下面编写一个实例,使它能够对ServletContext以及属性进行监听。由以上介绍可知,该类需要实现ServletContextAttributeListener和ServletContextListener接口类,其详细代码如下:

[java] view plaincopyprint?

1.package servlet; 2.

3.import java.io.FileOutputStream; 4.

5.import java.io.PrintWriter; 6.

7.import javax.servlet.ServletContext; 8.

9.import javax.servlet.ServletContextAttributeEvent; 10.

11. import javax.servlet.ServletContextAttributeListener; 12.

13. import javax.servlet.ServletContextEvent; 14.

15. import javax.servlet.ServletContextListener; 16.

17. public class MyServletContextListener 18.

19. implements ServletContextListener,ServletContextAttributeListener{ 20.

21. private ServletContext context = null; //定义

一个ServletContext对象变量,赋为null

22.

23. public void contextInitialized(ServletContextEvent s) { 24.

25. //TODO 该方法实现了ServletContextListener接口定义的方法,对

ServletContext进行初始化 26.

27. this.context = s.getServletContext(); //初始化一

个ServletContext对象 28.

29. print(\初始化......\打印出该

方法的操作信息 30. 31. } 32.

33. public void contextDestroyed(ServletContextEvent s) { 34.

35. //TODO 该方法实现了ServletContextListener接口类定义方法,用

于释放ServletContext对象 36.

37. this.context = null; 38.

39. print(\被释放......\40. 41. } 42.

43. public void attributeAdded(ServletContextAttributeEvent sa) { 44.

45. //TODO 当上下文添加属性时,将调用该方法。这里只是将添加的属

性信息打印出来 46.

47. print(\增加ServletContext对象的一个属性:

attributeAdded('\48. 49. } 50.

51. public void attributeRemoved(ServletContextAttributeEvent sa) { 52.

53. //TODO 当把ServletContext中的某个属性删除时,调用该方法 54.

55. print(\删除ServletContext对象的某一个属性:attributeRemoved(' 56.

57. \58. 59. } 60.

61. public void attributeReplaced(ServletContextAttributeEvent sa) { 62.

63. //TODO 当上下文进行属性值更新时,将调用该方法 64.

65. print(\更改ServletContext对象的某一个属性:attributeReplaced(' 66.

67. \68.

69. } 70.

71. private void print(String message){ 72.

73. //调用该方法在txt文件中打印出message字符串信息 74.

75. PrintWriter out = null; 76.

77. try{ 78.

79. out = new PrintWriter(new FileOutputStream(\

rue)); 80.

81. out.println(new java.util.Date().toLocaleString()+\

ener: \82.

83. out.close();

84.

85. } 86.

87. catch(Exception e) 88.

89. { 90.

91. e.printStackTrace(); 92.

93. } 94. 95. } 96. 97. }

程序说明:该监听器类实现了ServletContextAttributeListener和ServletContextListener两个接口类中的5个方法:

● contextInitialized(ServletContextEvent s)方法用来初始化ServletContext对象。

● contextDestroyed(ServletContextEvent s)方法在上下文中删除某个属性时调用。

● attributeAdded(ServletContextAttributeEvent sa)方法在上下文中添加一个新的属性时调用。

● attributeReplaced(ServletContextAttributeEvent sa)方法在更新属性时调用。

● attributeRemoved(ServletContextAttributeEvent sa)方法在上下文中删除某个属性时会被调用。

在使用这个监听器之前还需要在Web模块中的web.xml配置文件中进行声明,代码如下:

本文来源:https://www.bwwdw.com/article/1j6v.html

Top