servlet的八大监听器
HttpSessionListener、ServletContextListener

关于Listener详解ServletContextListenerServletContextListener接口能够监听ServletContext对象的生命周期,实际上就是监听Web应用的生命周期。
当Servlet容器启动或终止Web应用时,会触发ServletContextEvent事件,该事件由ServletContextListener来处理。
在ServletContextListener接口中定义了处理ServletContextEvent事件的两个方法:contextInitialized (ServletContextEvent event)当Servlet容器启动Web应用时调用该方法。
在调用完该方法之后,容器再对Filter初始化,并且对那些在Web应用启动时就需要被初始化的Servlet进行初始化。
用途:Web服务器启动时加载数据到内存中………….. contextDestroyed(ServletContextEvent event)当Servlet容器终止Web应用时调用该方法。
在调用该方法之前,容器会先销毁所有的Servlet和Filter过滤器。
public ServletContext getServletContext();//ServletContextEvent事件:取得一个ServletContext(application)对象HttpSessionListenerSession创建事件发生在每次一个新的session创建的时候,类似地Session失效事件发生在每次一个Session失效的时候。
对Session的整体状态的监听。
对每一个正在访问的用户,J2EE应用服务器会为其建立一个对应的HttpSession 对象。
当一个浏览器第一次访问网站的时候,J2EE应用服务器会新建一个HttpSession对象,并触发HttpSession创建事件,如果注册了HttpSessionListener事件监听器,则会调用HttpSessionListener事件监听器的sessionCreated方法。
《Servlet组件》-第03章- 监听器与过滤器-题目

知识点01-监听器:011203001题目1:当Web应用程序被关闭时,Servlet容器会调用Servlet Context“监听器”的哪个方法?( B ) 易A contextInitialized()B contextDestroyed()C contextFinialized()D contextShutdown()题目2:监听事件和处理事件(A )易A 都由Listener完成B 都由相应事件Listener处登记过的构件完成C 由Listener和构件分别完成D 由Listener和窗口分别完成题目3:察看下面这个类( C )易public class IfAttributsChanged implements ServletContextAttributeListener{public void attributeAdded(ServletContextAttributeEvent scab){System.out.println(“加入一个属性”);}public void attributeRemoved(ServletContextAttributeEvent scab){System.out.println(“删除一个属性”);}}关于IfAttributsChanged类的叙述,下列哪一个为真?A 此类可以成功编译B 此类无法成功编译,原因是缺少attributeChanged()方法。
C 此类无法成功编译,原因是缺少attributeReplaced()方法。
D 此类无法成功编译,原因是缺少attributeUpdated()方法。
题目4:实现下列哪一种接口的对象,并不需要在web.xml文件内进行额外的设定,Servlet 容器就能够回应该对象加入HTTP会话所发生的事件?(D )易A ServletContextListenerB HttpSessionListenerC HttpSessionAttributeListenerD HttpSessionBindingListener题目5:上下文相关的监听器(B C)(选择两项)易A HttpSessionListenerB ServletContextListenerC ServletContextAttributeListenerD ServletRequestAttributeListener题目6:Servlet2.4 以后提供了哪几种对象的事件监听。
JSP应用与开发技术第12、13、14章 课后习题答案

第12章Servlet基础1.简述Servlet和JSP的关系。
答:Servlet是服务器端运行的一种Java应用程序。
当浏览器端有请求则将其结果传递给浏览器。
在JSP中使用到的所有对象都将被转换为Servlet或者非Servlet的Java对象,然后被执行,所以执行JSP实际上与执行Servlet是一样的。
2.简述Servlet的生命周期。
答:Servlet的生命周期可分为下面几个阶段:(1)装载Servlet。
(2)实例化一个Servlet实例对象。
(3)调用Servlet的init( )方法进行初始化。
(4)服务。
(5)卸载。
3.简述HttpSession接口的功能和使用方法。
答:.HttpSession接口是Servlet提供会话追踪解决方案。
HttpSession对象存放在服务器端,只是对cookie和url重写技术的封装应用。
使用HttpSession进行会话控制的过程:(1)获得一个HttpSession实例对象;(2)访问和设置与会话相关联信息,维护会话的状态;(3)废弃会话数据。
4.简述开发一个Servlet所需要的步骤。
答:第一步:编写Servlet实例第二步:在web.xml文件中配置该Servlet第三步:编写其它文件5.编写一个html页面和一个Servelt,实现利用Servelt的doPost方法读取html文件中Form表单内容。
答:参考12.6.26.写一个利用HttpSession接口的用户登录的Servlet,当用户已经登录时,返回欢迎信息;否则转向登录页面。
答:第一步:编写Servlet实例SessionServlet.java所示。
package com;import java.io.*;import java.util.*;import javax.servlet.*;import javax.servlet.http.*;/**** 使用HttpSession管理会话的登录Servlet*/public class LoginServlet extends HttpServlet {p rotected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException { doPost(request, response);}p rotected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=GB2312");PrintWriter out = response.getWriter();out.println("<html>");out.println("<body>");out.println("<head>");out.println("<title>使用HttpSession管理会话的登录页面</title>");out.println("</head>");out.println("<body>");// 获取会话对象HttpSession session = request.getSession();// 从会话对象中读取数据Boolean isLogin = (Boolean) session.getAttribute("isLogin");if (isLogin == null) {isLogin = Boolean.FALSE;}String user = request.getParameter("user");String password = request.getParameter("pass");if (isLogin.booleanValue()) {// 从会话对象中读取数据user = (String) session.getAttribute("user");Date loginTime = new Date(session.getCreationTime());out.println("<h2>欢迎您," + user + "!</h2>");out.println("<h2>您的登录时间是:" + loginTime + "!</h2>");} else if ((user != null) && (password != null)) {// 在会话对象中保存数据session.setAttribute("user", user);session.setAttribute("isLogin", Boolean.TRUE);Date loginTime = new Date(session.getCreationTime());out.println("<h2>欢迎您," + user + "!</h2>");out.println("<h2>您的登录时间是:" + loginTime + "!</h2>");} else {out.println("<h2>请在下面输入登录信息</h2>");out.println("<form method=\"post\" action=\"login\">");out.println("<table>");out.println("<tr>");out.println("<td>用户名:</td>");out.println("<td><input name=\"user\" type=\"text\"></td>");out.println("</tr>");out.println("<tr>");out.println("<td>密码:</td>");out.println("<td><input name=\"pass\" type=\"password\"></td>");out.println("</tr>");out.println("<tr>");out.println("<td></td>");out.println("<td><input name=\"ok\" type=\"submit\" value=\"确定\">");out.println("<input name=\"cancel\" type=\"reset\" value=\"重置\"></td>");out.println("</tr>");out.println("</table>");out.println("</form>");}out.println("</body>");out.println("</html>");}}第二步:在web.xml文件中配置该Servlet<web-app>……<!-- ServerInfoServlet definition --><servlet><description></description><display-name>getSession</display-name><servlet-name> getSession </servlet-name><servlet-class>com.SessionServlet</servlet-class></servlet><!-- SessionServlet definition --><servlet-mapping><servlet-name>getSession</servlet-name><url-pattern>/getSession</url-pattern></servlet-mapping>……</web-app>第13章使用Servlet过滤器和监听器1、什么是过滤器?什么是监听器?分别应用在哪些方面?答:对Web应用来说,过滤器就是驻留在服务器端,在源数据和目的数据间,对Web请求和Web响应的头属性(Header)和内容体(Body)进行操作的一种特殊Web组件。
Java三大器之监听器(Listener)的工作原理和代码演示

Java三大器之监听器(Listener)的工作原理和代码演示现在来说说Servlet的监听器Listener,它是实现了javax.servlet.ServletContextListener 接口的服务器端程序,它也是随web应用的启动而启动,只初始化一次,随web应用的停止而销毁。
主要作用是:做一些初始化的内容添加工作、设置一些基本的内容、比如一些参数或者是一些固定的对象等等。
首先来看一下ServletContextListener接口的源代码:[java] view plain copyprint?1.public abstract interface ServletContextListener extends E ventListener{2.public abstract void contextInitialized(ServletContextEven t paramServletContextEvent);3.public abstract void contextDestroyed(ServletContextEvent paramServletContextEvent);4.}下面利用监听器对数据库连接池DataSource的初始化演示它的使用:ListenerTest.java[java] view plain copyprint?1.import javax.servlet.ServletContext;2.import javax.servlet.ServletContextEvent;3.import javax.servlet.ServletContextListener;4.import mons.dbcp.BasicDataSource;5./**6.* 现在来说说Servlet的监听器Listener,它是实现了javax.servlet.ServletContextListener 接口的7.* 服务器端程序,它也是随web应用的启动而启动,只初始化一次,随web应用的停止而销毁。
面试题:filter过滤器listener监听器案例有点用

⾯试题:filter过滤器listener监听器案例有点⽤1、Filter⼯作原理(执⾏流程)当客户端发出Web资源的请求时,Web服务器根据应⽤程序配置⽂件设置的过滤规则进⾏检查,若客户请求满⾜过滤规则,则对客户请求/响应进⾏拦截,对请求头和请求数据进⾏检查或改动,并依次通过过滤器链,最后把请求/响应交给请求的Web资源处理。
请求信息在过滤器链中可以被修改,也可以根据条件让请求不发往资源处理器,并直接向客户机发回⼀个响应。
当资源处理器完成了对资源的处理后,响应信息将逐级逆向返回。
同样在这个过程中,⽤户可以修改响应信息,从⽽完成⼀定的任务。
上⾯说了,当⼀个请求符合某个过滤器的过滤条件时该请求就会交给这个过滤器去处理。
那么当两个过滤器同时过滤⼀个请求时谁先谁后呢?这就涉及到了过滤链FilterChain。
所有的奥秘都在Filter的FilterChain中。
服务器会按照web.xml中过滤器定义的先后循序组装成⼀条链,然后依次执⾏其中的doFilter()⽅法。
执⾏的顺序就如下图所⽰,执⾏第⼀个过滤器的chain.doFilter()之前的代码,第⼆个过滤器的chain.doFilter()之前的代码,请求的资源,第⼆个过滤器的chain.doFilter()之后的代码,第⼀个过滤器的chain.doFilter()之后的代码,最后返回响应。
先请求1,2 但是执⾏放⾏后反过来执⾏2,1这⾥还有⼀点想补充:⼤家有没有想过,上⾯说的“执⾏请求的资源”究竟是怎么执⾏的?对于“执⾏第⼀个过滤器的chain.doFilter()之前的代码,第⼆个过滤器的chain.doFilter()之前的代码”这些我可以理解,⽆⾮就是按顺序执⾏⼀句句的代码,但对于这个“执⾏请求的资源”我刚开始却是怎么也想不明⽩。
其实是这样的:通常我们所访问的资源是⼀个servlet或jsp页⾯,⽽jsp其实是⼀个被封装了的servlet,于是我们就可以统⼀地认为我们每次访问的都是⼀个Servlet,⽽每当我们访问⼀个servlet时,web容器都会调⽤该Servlet的service⽅法去处理请求。
第6章 Servlet、Filter和Listener 课件

Java Web程序设计
3
1.1 Servlet简介
Servlet是独立于平台和协议的、运行在服务器端的 Java小程序,用来生成动态的Web页面(能处理客户端 的请求并返回结果)。
Servlet工作在客户端请求与服务器响应的中间层。 Servlet通常是部署在容器内,由容器连接到Web服务 器,当客户端进行请求时,Web服务器将请求传递给 Servlet容器,容器会调用相应的Servlet。
2020/11/24
Java Web程序设计
7
1.2 创建Servlet
创建Servlet有两种方法
继承GenericServlet:普通的、与协议无关的Servlet【不 常用】 继承HttpServlet:用于Web的HTTP Servlet【常用】
2020/11/24
Java Web程序设计
第6章 Servlet、Filter和Listener
本章目录
1. Servlet及其应用 2. Filter过滤器 3. Listener监听器
2020/11/24
Java Web程序设计
2
本章目录
1. Servlet及其应用 2. Filter过滤器 3. Listener监听器
2020/11/24
8
1.2.1 继承GenericServlet
1、创建Servlet类 创建一个Java类,使该Java类实现Servlet接口或者继
承Servlet接口的实现类GenericServlet来实现。 GenericServlet是一个与协议无关、普通的Servlet。
继承GenericServlet时必须重载service()方法
2020/11/24
java_过滤器、监听器_拦截器_原理个人总结
过滤器创建一个Filter 只需两个步骤:(1)创建Filter 处理类:(2)在web.xml 文件中配置Filter 。
创建Filter 必须实现javax.servlet.Filter 接口,在该接口中定义了三个方法。
• void init(FilterConfig config): 用于完成Filter 的初始化。
• void destroy(): 用于Filter 销毁前,完成某些资源的回收。
• void doFilter(ServletRequest request, ServletResponse response,FilterChain chain): 实现过滤功能,该方法就是对每个请求及响应增加的额外处理。
过滤器Filter也具有生命周期:init()->doFilter()->destroy(),由部署文件中的filter元素驱动。
在servlet2.4中,过滤器同样可以用于请求分派器,但须在web.xml中声明,<dispatcher>INCLUDE或FORWARD或REQUEST或ERROR</dispatcher>该元素位于filter-mapping中。
一、理解Struts2拦截器1. Struts2拦截器是在访问某个Action或Action的某个方法,字段之前或之后实施拦截,并且Struts2拦截器是可插拔的,拦截器是AOP的一种实现.解析:--------------------------------------------------------------------------------------------拦截器和AOP的关系拦截器与AOP (Aspect Orient Program ,面向切面编程)是密切相关的,AOP 从程序运行角度来考虑程序的流程,取得业务处理过程的切面,在特定切面通过系统自动插入特定方法。
Java监听器Listener使用详解
Java监听器Listener使⽤详解转载请注明原⽂地址:在我的项⽬中有具体应⽤:https:///ygj0930/CoupleSpace监听器⽤于监听web应⽤中某些对象、信息的创建、销毁、增加,修改,删除等动作的发⽣,然后作出相应的响应处理。
当范围对象的状态发⽣变化的时候,服务器⾃动调⽤监听器对象中的⽅法。
常⽤于统计在线⼈数和在线⽤户,系统加载时进⾏信息初始化,统计⽹站的访问量等等。
分类:按监听的对象划分,可以分为ServletContext对象监听器HttpSession对象监听器ServletRequest对象监听器按监听的事件划分对象⾃⾝的创建和销毁的监听器对象中属性的创建和消除的监听器session中的某个对象的状态变化的监听器⽰例:⽤监听器统计⽹站在线⼈数原理:每当有⼀个访问连接到服务器时,服务器就会创建⼀个session来管理会话。
那么我们就可以通过统计session的数量来获得当前在线⼈数。
所以这⾥⽤到的是HttpSessionListener。
1:创建监听器类,实现HttpSessionListener接⼝。
2:重写监听器类中的⽅法public class onLineCount implements HttpSessionListener {public int count=0;//记录session的数量public void sessionCreated(HttpSessionEvent arg0) {//监听session的创建count++;arg0.getSession().getServletContext().setAttribute("Count", count);}@Overridepublic void sessionDestroyed(HttpSessionEvent arg0) {//监听session的撤销count--;arg0.getSession().getServletContext().setAttribute("Count", count);}}3:在web.xml中配置监听器。
servlet面试题目(3篇)
第1篇一、Servlet基础知识1. 什么是Servlet?Servlet是一种运行在服务器端的Java程序,用于处理客户端请求并生成响应。
它通常用于构建动态网页和Web应用程序。
2. Servlet与JSP的区别是什么?Servlet和JSP都是用于开发Web应用程序的技术,但它们的主要区别在于:- Servlet是一种Java类,而JSP是一种特殊的HTML页面,其中可以嵌入Java代码。
- Servlet通过Java代码直接处理请求,而JSP将Java代码与HTML标记混合在一起。
- Servlet具有更高的性能,因为它是编译后的Java程序,而JSP每次请求都会重新解析和编译。
3. Servlet的生命周期有哪些阶段?Servlet的生命周期包括以下几个阶段:- 编译:Servlet被编译成Java字节码。
- 初始化:Servlet容器调用Servlet的init()方法,进行初始化操作。
- 服务:Servlet容器调用Servlet的service()方法,处理客户端请求并生成响应。
- 销毁:Servlet容器调用Servlet的destroy()方法,进行清理操作。
4. 什么是Servlet映射?Servlet映射是指将URL模式与Servlet类进行关联的过程。
当客户端发起请求时,Servlet容器根据URL模式找到对应的Servlet类进行处理。
5. 什么是请求转发和响应重定向?请求转发(Request Dispatching)是指将请求从一个Servlet转发到另一个Servlet或资源的过程。
响应重定向(Response Redirect)是指将请求重定向到另一个URL的过程。
二、Servlet请求与响应6. 什么是HttpServletRequest和HttpServletResponse?HttpServletRequest表示客户端请求的信息,HttpServletResponse表示服务器端响应的信息。
Filter和Listener的区别
Filter和Listener的区别2008-09-22 17:23web.xml里面可以配置Filter和Listener,他们有什么区别,有什么共同点吗?应该在什么情况下使用他们?Filter是过滤器,过滤一些不友好或是你不想要的东东,Listener是Servlet的监听器,可以监听客户端的请求、服务端的操作等。
通过监听器,可以自动激发一些操作。
Filter可以实现对请求的过滤和重定向等,也就是说可以操作request和response,session 等对象,listner只能监听到以上对象的属性的修改。
Filter 是struts的核心控制器,负责拦截所有用户请求。
listener是监听器,通常都是监听并加载一些插件用的,比如spring。
log4j等Filter(过滤器):你可以写个类实现Filter接口,然后配置到web.xml中,那么Tomcat在接受到Http请求后首先会调用FilterChain中的第一个过滤器,为了能调用下个过滤器或真正的请求(servlet or jsp),所以你的实现类所实现的方法中必须要调用chain.doFilter(request,response),不然会得到空白页面!过滤器通常用做处理乱码,权限控制,也可以管理Hibernate中的session!Listener(监听器):利用观察者模式实现,在Tomcat中,如果要对application,session,request,response等对象监听,要实现类似****Listener接口,再配置到web.xml中,那么Tomcat在启动的时候就会把你写的这些监听类实例化成对象加入到一个集合中,此后对你要监听的对象操作时,都将会调用listener中的方法,比如HttpSessionListener 可以用来监听当前在线的所有用户!Filter和servlet基本类似可以用做servlet来用(struts2.0就是这么干的) 有reqeust请求才能运行listener是监听器是系统启动就运行一般监听都是用来事先加载系统文件的。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
JSP/Servlet 中的事件处理写过AWT或Swing程序的人一定对桌面程序的事件处
理机制印象深刻:通过实现Listener接口的类可以在特定事件(Event)发生时,
呼叫特定的方法来对事件进行响应。
其实我们在编写JSP/Servle程序时,也有类似的事件处理机制,所不同的是在
JSP/Servlet中是在web.xml中注册Listener,由Container在特定事件发生时
呼叫特定的实现Listener的类。
1. Servlet中的Listener和Event:
在JSP 2.0/Servlet 2.4中,共有八个Listener接口,六个Event类别。
ServletContextListener接口
[接口方法] contextInitialized()与 contextDestroyed()
[接收事件] ServletContextEvent
[触发场景] 在Container加载Web应用程序时(例如启动 Container之后),
会呼叫contextInitialized(),而当容器移除Web应用程序时,会呼叫
contextDestroyed ()方法。
ServletContextAttributeListener
[接口方法] attributeAdded()、 attributeReplaced()、attributeRemoved()
[接收事件] ServletContextAttributeEvent
[触发场景] 若有对象加入为application(ServletContext)对象的属性,则
会呼叫attributeAdded(),同理在置换属性与移除属性时,会分别呼叫
attributeReplaced()、attributeRemoved()。
HttpSessionListener
[接口方法] sessionCreated()与sessionDestroyed ()
[接收事件] HttpSessionEvent
[触发场景] 在session (HttpSession)对象建立或被消灭时,会分别呼叫这
两个方法。
HttpSessionAttributeListener
[接口方法] attributeAdded()、 attributeReplaced()、attributeRemoved()
[接收事件] HttpSessionBindingEvent
[触发场景] 若有对象加入为session(HttpSession)对象的属性,则会呼叫
attributeAdded(),同理在置换属性与移除属性时,会分别呼叫
attributeReplaced()、 attributeRemoved()。
HttpSessionActivationListener
[接口方法] sessionDidActivate()与 sessionWillPassivate()
[接收事件] HttpSessionEvent
[触发场景] Activate与Passivate是用于置换对象的动作,当session对象为
了资源利用或负载平衡等原因而必须暂时储存至硬盘或其它储存器时(透 过对
象序列化),所作的动作称之为Passivate,而硬盘或储存器上的session对象
重新加载JVM时所采的动作称之为Activate,所以容 易理解的,
sessionDidActivate()与 sessionWillPassivate()分别于Activeate后与将
Passivate前呼叫。
ServletRequestListener
[接口方法] requestInitialized()与 requestDestroyed()
[接收事件] RequestEvent
[触发场景] 在request(HttpServletRequest)对象建立或被消灭时,会分别
呼叫这两个方法。
ServletRequestAttributeListener
[接口方法] attributeAdded()、 attributeReplaced()、attributeRemoved()
[接收事件] HttpSessionBindingEvent
[触发场景] 若有对象加入为request(HttpServletRequest)对象的属性,则
会呼叫attributeAdded(),同理在置换属性与移除属性时,会分别呼叫
attributeReplaced()、 attributeRemoved()。
HttpSessionBindingListener
[接口方法] valueBound()与valueUnbound()
[接收事件] HttpSessionBindingEvent
[触发场景] 实现HttpSessionBindingListener接 口的类别,其实例如果被加
入至session(HttpSession)对象的属性中,则会呼叫 valueBound(),如果被
从session(HttpSession)对象的属性中移除,则会呼叫valueUnbound(),实
现 HttpSessionBindingListener接口的类别不需在web.xml中设定。
2. 如何注册Servlet中的事件
实现上面这几个接口的类别,除了HttpSessionBindingListener外,必须在
web.xml中向容器注册,容器才会在对应的事件发生时呼叫对应的类别,如:
< listener >
< listener-class >
demo.servlet.listener.CustomServletContextListener
3. Servlet事件的应用实例
看到这里,你也许会有疑问: 了解这些 listener和event 有什么用呢?我平时
开发没有用到这些,一样也能完成任务啊.
不错,在日常的开发中很少用到这些事件处理的方面,但是在某些情况下使用事
件处理机制却可以达到事半功倍的效果,例如下面两个例子:
4.Java类实例
==========
//侦听启动和关闭
import javax.servlet.ServletContextListener;
import javax.servlet.*;
public class TigerListen implements ServletContextListener {
public void contextInitialized(ServletContextEvent sce)
{
System.out.print("Init") ;
}
public void contextDestroyed(ServletContextEvent sce)
{
System.out.print("Destroved") ;
}
}
对应的web.xml是
============
TigerListen
============