




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验十 Servlet事件处理网络112 李海佩 201106090204一、实验目的1. 了解在哪些对象上可以产生事件;2. 掌握ServletContext和HttpSession对象上的事件处理方法。3. 了解在ServletRequest对象上的事件及处理方法。二、实验原理在Web应用程序中,事件的处理也是通过事件监听器接口处理的。Web应用事件处理的原理为:当Web应用中某些状态改变时,Servlet容器就产生某种事件,如ServletContext对象初始化时会产生ServletContextEvent事件,此时Servlet容器就会从注册的事件监听器中寻找处理该事件的监听器对象,并执行相应的代码。在Servlet 2.4规范中共定义了6种事件类型和8个事件监听器接口,它们可以处理三种对象上的事件,如表13.1所示:表13.1 监听器接口与事件类监听对象监听器接口监听事件ServletContextServletContextListenerServletContextEventServletContextAttributeListenerServletContextAttributeEventHttpSessionHttpSessionListenerHttpSessionEventHttpSessionActivationListenerHttpSessionAttributeListenerHttpSessionBindingEventHttpSessionBindingListenerServletRequestServletRequestListenerServletRequestEventServletRequestAttributeListenerServletRequestAttributeEvent三、实验内容与步骤(一)创建一个名为chap10的Web项目,编写一个ServletContext事件监听器,该事件监听器的功能是当Web应用程序初始化和销毁时以及在ServletContext对象上添加属性、删除属性和替换属性时,在Tomcat日志中记录有关信息。【步骤1】编写监听器类。package listener;import java.util.Date;import javax.naming.Context;import javax.naming.InitialContext;import javax.servlet.*;import javax.sql.DataSource;Public final class MyListener implements ServletContextListener,ServletContextAttributeListenerprivate ServletContext servletContext = null;private Context context = null;private DataSource dataSource = null;public void contextDestroyed(ServletContextEvent arg0) context = (Context) arg0.getServletContext();(ServletContext) context).removeAttribute(dataSource);(ServletContext) context).log(应用程序已关闭:+new Date();public void contextInitialized(ServletContextEvent arg0) context = (Context) arg0.getServletContext();try if(context=null)context = new InitialContext();dataSource = (DataSource)context.lookup(java:comp/env/jdbc/sampleDS); catch (Exception e) (ServletContext) context).log(Exception+e);(ServletContext) context).setAttribute(dataSource,dataSource);(ServletContext) context).log(应用程序已启动:+new Date();public void attributeAdded(ServletContextAttributeEvent arg0) context = (Context) arg0.getServletContext();(ServletContext) context).log(添加一个属性:+arg0.getName()+:+arg0.getValue();public void attributeRemoved(ServletContextAttributeEvent arg0) context = (Context) arg0.getServletContext();(ServletContext) context).log(删除一个属性:+arg0.getName()+:+arg0.getValue();public void attributeReplaced(ServletContextAttributeEvent arg0) context = (Context) arg0.getServletContext();(ServletContext) context).log(替换一个属性:+arg0.getName()+:+arg0.getValue();【步骤2】注册监听器类。修改web.xml文件,加入下面代码: listener.MyListener 【步骤3】编写一个测试Servlet。import java.io.*;import java.util.Date;import javax.servlet.*;import javax.servlet.http.*;public class EventTestServlet extends HttpServlet ServletContext context =null; public void init() context = getServletConfig().getServletContext(); public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException response.setContentType(text/html); PrintWriter out = response.getWriter(); out.println(Event Test); Integer anInteger =new Integer(100); Date aDate = new Date(); context.setAttribute(obj,anInteger); /添加属性 context.setAttribute(obj,aDate); /替换属性 context.removeAttribute(obj); /删除属性 out.println(+ 已在ServletContext对象上添加、替换和删除了属性); out.println(); out.close(); 【步骤4】修改web.xml,加入下面代码: EventTestServlet EventTestServlet EventTestServlet /eventtest 【步骤5】重新启动Tomcat,然后使用下面URL访问EventTestServlet: http:/localhost:8080/ helloapp/eventtest额,因为Tomcat一直无法正常打开页面,路径是对的,自己演示不了。显示界面如下:图13.1 EventTestServlet 程序的运行结果 【步骤6】检查日志文件 打开logs目录中的localhost.2012-05-15.log日志文件(你的文件名可能与此不同),在其中可以找到下面这些行:信息: 应用程序已关闭:Sun Feb 05 12:42:33 CST 2006信息: 应用程序已启动:Sun Feb 05 12:42:57 CST 2006信息: 添加一个属性:obj:100信息: 替换一个属性:obj:100信息: 删除一个属性:obj:Sun Feb 05 12:43:30 CST 2006这些信息就是执行事件监听器后写到日志文件中的。(二)编写一个HttpSession事件监听器用来记录当前在线人数。【步骤1】编写HttpSessionListener监听器处理类,记录在线人数。package listener;import javax.servlet.http.HttpServletRequest;import javax.servlet.ServletRequestListener;import javax.servlet.ServletRequestEvent;import ernal.generic.NEW;public class HttpSessionListener implements ServletRequestListenerprivate int count = 0;public void requestDestroyed(ServletRequestEvent arg0) public void requestInitialized(ServletRequestEvent arg0) HttpServletRequest request = (HttpServletRequest) arg0.getServletRequest();if(request.getRequestURI().equals(/helloapp/online)count+;arg0.getServletContext().setAttribute(count,new Integer(count);【步骤2】注册事件监听器,在web.xml文件中加入下面代码: listener.MySessionListener 【步骤3】编写一个测试Servlet,如下所示:import java.io.*;import javax.servlet.*;import javax.servlet.http.*;public class OnlineCountServlet extends HttpServlet public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException HttpSession session = request.getSession(true); ServletContext context = getServletConfig().getServletContext(); Integer count =(Integer)context.getAttribute(onlineCount); response.setContentType(text/html;charset=gb2312); PrintWriter out = response.getWriter(); out.println(Session Event Test); out.println(+ 当前在线人数:+count+); out.println(); out.close(); 【步骤4】修改web.xml文件,加入下面代码: OnlineCountServlet OnlineCountServlet OnlineCountServlet /online 【步骤5】使用URL地址http:/localhost:8080/ch10/online 访问OnlineCountServlet。再启动两个浏览器窗口访问该Servlet,计数器就会增加,而点击浏览器的“刷新”按钮,计数器不会增加(因为没有开始新会话)。图13.2 OnlineCountServlet 程序的运行结果(三)编写一个ServletRequestListener监听器,记录某个页面自应用程序启动以来被访问的次数。【步骤1】编写监听器接口MyRequestListener,在某页面请求初始化时进行计数器累加,并将计数器变量保存到应用作用域的属性中。package listener;import javax.servlet.http.HttpServletRequest;import javax.servlet.ServletRequestListener;import javax.servlet.ServletRequestEvent;import ernal.generic.NEW;public class MyRequestListener implements ServletRequestListenerprivate int count
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025金华武义县教育系统赴安徽师范大学招聘5人模拟试卷及答案详解(典优)
- 2025年咸阳秦都怡心学校招聘考前自测高频考点模拟试题及参考答案详解
- 2025年水发集团权属一级公司纪委副书记专项招聘考前自测高频考点模拟试题及答案详解(新)
- 2025年春季江苏南通市通州区部分事业单位(医疗卫生类岗位)招聘90人模拟试卷附答案详解(完整版)
- 安全培训教师开头语课件
- 小学安全培训教育心得课件
- 2025湖南省永州市双牌县引进急需紧缺人才(医卫岗25人)考前自测高频考点模拟试题含答案详解
- 2025福建三明大田县公开招聘紧缺急需专业教师7人模拟试卷及1套参考答案详解
- 小学安全体验培训感悟课件
- 2025贵州民族大学高层次人才引进85人考前自测高频考点模拟试题及参考答案详解
- 2024版2025秋贵州黔教版综合实践活动五年级上册全册教案教学设计
- 转作风重实干课件
- 村干部饮水安全培训总结课件
- 安全生产治本攻坚三年行动半年工作总结
- 单招备考科学方案
- 医美咨询培训课件
- 海船船员适任 评估规范(2024)轮机专业
- DB50-T 1463.2-2023 牛羊布鲁氏菌病防控技术规范 第2部分:人员防护
- NoSQL数据库应用与实践 课件 第1-6章 认识NoSQL - 增删改查
- 20世纪宋史研究:主要趋势、热点领域与未来展望
- 2025年度餐饮店知识产权保护与合伙人合同
评论
0/150
提交评论