版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
9.1.1Filter概述
Filter的基本工作原理:当在web.xml中注册了一个Filter来对某个Servlet程序进行拦截处理时,这个Filter就成了Servlet容器与该Servlet程序的通信线路上的一道关卡,该Filter可以对Servlet容器发送给Servlet程序的请求和Servlet程序回送给Servlet容器的相应进行拦截,可以决定是否将请求继续传递给Servlet程序,以及对请求和相应信息是否进行修改.9.1.2Filter的实现(1)创建一个类,实现javax.servlet.Filter接口,并且实现其中的init()、doFilter()和destroy()方法
.(2)将过滤的任务放到doFilter(ServletRequest,ServletResponse,FilterChain
)方法中,其中参数ServletRequest和ServletResponse为传递给方法的请求和响应参数,而FilterChain是用来把请求和响应传递给下一个Filter或者其他JSP/Servlet等资源。(3)在web.xml注册这个Filter,并指定它将过滤的页面9.1.2Filter的实现-案例例9-1:一个简单的Filter实现。功能描述:当客户端请求此网站的任何一个资源时,都需要先通过这个过滤器,该Filter将会在一个文本文件上写入客户的的访问时间和IP地址publicclassMyfilterimplementsFilter{ publicvoiddoFilter(ServletRequestreq,ServletResponseres, FilterChainchain)throwsIOException,ServletException{
HttpServletRequestrequest=(HttpServletRequest)req; //获取WEB应用根目录
Stringpath=request.getSession().getServletContext().getRealPath("/"); //把文件放到WEB应用根目录下
Filefile=newFile(path+"test.txt");FileWriterresultFile=newFileWriter(file,true);PrintWritermyFile=newPrintWriter(resultFile);StringclientIP=request.getRemoteAddr();//获取客户端IPDatedate=newDate();myFile.print("时间:"+date+"");myFile.println("客户IP:"+clientIP);resultFile.close();//关闭文件流
//把请求和响应传递给下一个Filter或者其他JSP/Servlet等资源
chain.doFilter(req,res);
}publicvoidinit(FilterConfigconfig)throwsServletException{//初始化方法
} publicvoiddestroy(){
}}<filter><filter-name>Myfilter</filter-name><filter-class>com.csmy.filter.Myfilter</filter-class></filter><filter-mapping><filter-name>Myfilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>Filter的实现-案例
配置过滤器:过滤器要起作用必需在web.xml中添加如下配置代码Init()和destroy()方法可以没有代码,但方法必须写上
Filter的应用请参考例9-2和例9-39.2Listener用于处理会话事件的监听器HttpSessionListener和HttpSessionAttributesListener。当一个HttpSession刚被创建(created)或者失效(invalidated)的时候,将会通知HttpSessionListener;当往一个HttpSession中添加、删除或者替换一个属性的时候,将会通知HttpSessionAttributesListener;用于处理ServletContext事件的监听器ServletContextListener和ServletContextAttributesListener。当ServletContext被创建的时候,或者ServletContext即将关闭的时候,都会通知ServletContextListener;当往ServletContext添加、删除或者替换一个属性的时候,将会通知ServletContextAttributesListener。ServletContextListener用于监听ServletContext的变化,它有两个方法:(1)servletContextInitialized(ServletContextEventevent)当ServletContext创建的时候,Servlet容器将会调用这个方法。(2)servletContextDestroyed(ServletContextEventevent)当ServletContext销毁的时候(例如关闭应用服务器或者重新加载应用),Servlet容器将会调用这个方法。
9.2.1ServletContextListener当相关事件发生时,Servlet容器会自动调用上面的方法,并会用javax.servlet.ServletContextEvent类封装一个事件对象传递到方法中。ServletContextEvent类有一个getServletContext()方法,可以获得创建的或者将要销毁的ServletContext对象publicclassMylistenerimplementsServletContextListener{ finalstaticStringdriver="com.mysql.jdbc.Driver";
publicvoidcontextDestroyed(ServletContextEventevent){ } publicvoidcontextInitialized(ServletContextEventevent){ try{ Class.forName(driver); System.out.print("数据库驱动程序加载成功"); }catch(Exceptione){ System.out.print("数据库驱动程序加载失败"); System.out.print(e.toString()); }}}ServletContextListener-案例
例9-4:ServletContextListener的例子,加载数据库驱动(3)配置监听器:监听器要起作用必需在web.xml文件中添加如下代码:<listener>
<listener-class>com.csmy.listener.Mylistener</listener-class></listener>当ServletContext中的属性值发生改变的时候,可以通过ServletContextAttributeListener来监听它们。可以自己定义一个类,让它实现ServletContextAttributeListener接口,并且实现下面的方法:9.2.2ServletContextAttributeListenervoidattributeAdded(ServletContextAttributeEventevent):当往ServletContext中加入一个属性的时候,将会调用这个方法;voidattributeRemoved(ServletContextAttributeEventevent):当从ServletContext中删除一个属性的时候,将会调用这个方法:voidattributeReplaced(ServletContextAttributeEventevent):当改变ServletContext中属性值的时候,将会调用这个方法。9.2.3HttpSessionListener当创建一个HttpSession对象或者销毁一个HttpSession对象的时候,可以用HttpSessionListener来监听,可以定义一个类,让它实现HttpSessionListener接口,并且实现接口的两个方法:voidsessionCreated(HttpSessionEventhse):当一个HttpSession对象被创建时,将会调用这个方法;voidsessionDestroyed(HttpSessionEventhse):当一个HttpSession超时或者调用HttpSession的invalidate()方法让它销毁时,将会调用这个方法。9.2.3HttpSessionListener-案例publicclassCountUserimplementsServletContextListener,HttpSessionListener{ privateintcount=0; privateServletContextctx=null; publicvoidcontextDestroyed(ServletContextEventsce){ ctx=null; } publicvoidcontextInitialized(ServletContextEventsce){ ctx=sce.getServletContext(); //获得ServletContext对象
}例9-5:用HttpSessionListener来统计在线人数publicvoidsessionCreated(HttpSessionEventevent){ count++; ctx.setAttribute("OnlineUser",newInteger(count)); } publicvoidsessionDestroyed(HttpSessionEventevent){ count--; ctx.setAttribute("OnlineUser",newInteger(count)); }}(2)配置监听器:在web.xml中添加如下的配置代码。<listener><listener-class>com.csmy.listener.CountUser</listener-class></listener>9.2.4HttpSessionAttributeListener当一个会话中的属性发生改变时,可以用HttpSessionAttributeL
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026春招:伊利集团面试题及答案
- 2026年新能源技术对传统电气节能的影响
- 2026年古建筑照明保护与创新设计
- 2026春招:项目助理真题及答案
- 2026春招:无人机组装测试面试题及答案
- 货运安全培训班课件
- 货运公司安全培训会议课件
- 货车维修保养知识
- 货梯安全教育培训计划课件
- 内科疾病诊疗新策略探讨
- 数字孪生智慧水利信息化项目建设方案
- 《监理企业安全责任清单(2.0版)参考模板》
- 建筑工地消防培训课件
- 二年级上加减乘除口算一天100题(1100题)
- 【审计复核的内容】 复核审计
- 颈动脉外膜剥脱术
- 外贸发票 PI 形式发票模板范例
- 《汽车营销技术》教案
- GB/T 30475.3-2017压缩空气过滤器试验方法第3部分:颗粒
- GB/T 22512.2-2008石油天然气工业旋转钻井设备第2部分:旋转台肩式螺纹连接的加工与测量
- 信息技术与学科深度融合课件
评论
0/150
提交评论