1、第八章 Web页面的过滤与监听8.2 Listener8.1 Filter8.0 任务引入任务引入了解Filter基本概念和适用场合掌握使用Filter的基本步骤会定义和使用Filter 掌握全局对象监听器的使用和应用掌握会话对象监听器的使用和应用学习能力责任感问题解决能力主动性 Filter基本概念和适用场合 使用Filter的基本步骤 定义和使用Filter Listener基础 全局对象监听器的使用和应用 会话对象监听器的使用和应用任务引入 美国Loucs公司希望开发的客户投保系统,由多种权限,如客户权限、操作员权限、财务人员权限及管理人员权限,客户除能看到自身的投保信息,应不能看到公司
2、的投保利润所得,所以要求系统能够对权限进行严格处理。本章节的过滤器可以很方便在对于所有已经登录的客户进行页面及的权限控制,达到系统的要求。8.1 Filter8.1.3 用Filter处理权限案例8.1.2 Filter的实现8.1.1 Filter概述8.1.4 相关注意点8.1.1 Filter主要用途:当客户端请求某个网页(HTML/JSP/Servlet)之前,让过滤器先对其进行适当的“过滤”;或者当服务器端对客户端的请求做出响应之前,让过滤器先对其进行适当的“过滤”;在从一个页面跳转(forward)到其他页面的时候;在包含(include)其他的内容的时候;在发生错误的时候。8.1
3、.1 Filter 在实际的应用中,可以使用过滤器来完成以下任务:访问特定资源(HTML、JSP 页、Servlet)时的身份认证;应用程序级的访问资源的审核和记录;应用程序范围内对资源的加密访问,它建立在定制的加密方案基础上;对被访问资源的及时转换,包括从 Servlet 和 JSP 的动态输出等。8.1.2 使用Filter 1.创建一个类,实现Filter接口,并且实现其中的方法:init()方法是它的初始化方法,在Filter被装载的时候被自动调用;doFilter()方法是Filter类的核心方法,我们希望过滤器完成的功能,都应该放到这个方法中;destroy()方法是当Filter
4、销毁的时候调用的方法;8.1.2 使用Filter 2.将过滤的任务放到doFilter()方法中,这个方法有三个参数:ServletRequest、ServletResponse和FilterChain,其中ServletRequest和ServletResponse为传递给方法的请求和响应参数,而FilterChain是用来把请求和响应传递给下一个Filter或者其他JSP/Servlet等资源;8.1.2 使用Filter .在doFilter()中调用FilterChain的doFilter()方法,它只有两个参数:ServletRequest和ServletResponse,通常只要
5、将Filter的doFilter()方法的前两个当作它的参数就可以了;.在web.xml注册这个Filter,以及它将过滤的页面。案例8-1 FirstFilter.java web.xml8.1.3 用Filter处理权限案例 需求:在实际应用中,通常是需要对网站全部或部分网页进行权限控制。步骤:将所有需要进行权限控制的内容都放在“auth”目录中。案例8-2过滤器的实现 案例8-3登录页面8.1.4 相关注意点 1.在Web中若配置了多个过滤器时,Web服务器将会根据web.xml中定义的filter顺序进行过滤。2.一个过滤器也可以对多个资源进行过滤,只需要配置多个filter-mapp
6、ing即可。8.2 Listener8.2.3 HttpSessionListener8.2.2 ServletContextAttributeListener8.2.1 ServletContextListener8.2.4 HttpSessionAttributeListener8.2.1 ServletContextListener 当Servlet Context刚被创建准备接受第一个请求的时候,或者Servlet Context即将关闭的时候,都会通知ServletContext Listener。ServletContextListener用于监听Servlet Context的变
7、化,它有两个方法:servletContextInitialized(ServletContext Event sce):当Servlet Context创建的时候,将会调用这个方法;8.2.1 ServletContextListener servletContextDestroyed(ServletContext Event sce):当Servlet Context销毁的时候(例如关闭应用服务器或者重新加载应用),将会调用这个方法。案例8-58.2.2 ServletContextAttributeListener 当往Servlet Context添加、删除或者替换一个属性的时候,将会
8、通知ServletContext AttributeListener。方法:void attributeAdded(ServletContextAttributeEvent scab):当往ServletContext中加入一个属性的时候,将会调用这个方法;8.2.2 ServletContextAttributeListener void attributeRemoved(ServletContextAttributeEvent scab):当从ServletContext中删除一个属性的时候,将会调用这个方法;void attributeReplaced(ServletContextAtt
9、ributeEvent scab):当改变ServletContext中的属性的时候,将会调用这个方法。8.2.3 HttpSessionListener当一个HttpSession刚被创建(created)或者失效(invalidated)的时候,将会通知HttpSessionListener。方法:void sessionCreated(HttpSessionEvent hse):当一个HttpSession对象被创建时,将会调用这个方法;8.2.3 HttpSessionListener当一个HttpSession刚被创建(created)void sessionDestroyed(Ht
10、tpSessionEvent hse):当一个HttpSession超时或者调用HttpSession的invalidate()方法让它销毁时,将会调用这个方法。案例8-6onlineUser.java login.jsp onlineuser.jsp8.2.4 HttpSessionAttributeListener 当往一个HttpSession中添加、删除或者替换一个属性的时候,将会通知Http SessionAttributeListener 方法:void attributeAdded(HttpSessionBindingEvent e):当往会话中加入一个属性的时候,将会调用这个方
11、法;8.2.4 HttpSessionAttributeListener void attributeRemoved(HttpSessionBindingEvent e):当从会话中删除一个属性的时候,将会调用这个方法;void attributeReplaced(HttpSessionBindingEvent e):当改变会话中的属性的时候,将会调用这个方法。Servlet含义;Tomcat的安装、配置及布署;配置Servlet 映射;请求对象request与应答对象response;常用request的请求参数;会话对象Cookie与Session的实现;全局对象ServletContext类的使用。本章小结 设计:Web后台登录 要求:该功能使用Servlet完成;完成登录界面设计(至少包括用户名及口令两项内容);由Servlet连接数据库判断客户的有效性;当登录成功显示欢迎界面,登录失败重新导向到登录界面;实训作业