Java Web应用开发课件第09章_第1页
Java Web应用开发课件第09章_第2页
Java Web应用开发课件第09章_第3页
Java Web应用开发课件第09章_第4页
Java Web应用开发课件第09章_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论