当前位置:文档之家› 第9章_过滤器和监听器技术

第9章_过滤器和监听器技术


9.1.2 设计过滤器
2.过滤器的建立 在MyEclipse开发环境下创建过滤器是很方便的,其创建过程: • 创建实现Filter接口的类:在项目的src下,创建一个或多个过 滤器,并采用“包”结构的方式组织所有的过滤器。 • 实现init方法,读取过滤器的初始化函数。 • 将过滤行为放入doFilter()方法中:实现doFilter(),完成该过滤 器所需要过滤功能。 • 调用filterchain对象的doFilter方法:filterChain对象是过滤器接 口的doFilter方法的一个参数,调用Filterchain的doFilter方法时 ,下一个关联的过滤器将被调用,若没有其他与Servlet或JSP 相关联的过滤器,就调用Servlet或JSP本身。 • 将过滤器与特定的Servlet或JSP页面关联:使用部署配置文件 (web.xml)中的filter元素和filter-mapping元素。
9.1.2 设计过滤器
过滤器的设计需要实现Filter接口,并要根据处 理的功能需要,实现Filter接口中的3个方法: 1、public void init(FilterConfig filterConfig) throws ServletException 2、public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException,ServletException 3、public void destroy()
9.1.2 设计过滤器
1. 过滤器基本结构 一个过滤器程序的基本结构如下:
package …; import …; public class Filter1 implements Filter{ //这里是给出Filter的一个实现类Filter1 public void destroy(){ //添加代码 } public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException,ServletException{ //添加代码 } public void init(FilterConfig filterConfig) throws ServletException{ //添加代码 } }
<filter> <filter-name> FilterName </filter-name> <filter-class>package.className </filter-class> <init-param> <param-name>ParamName1</param-name> <param-value>ParamValue1</param-value> </init-param> </filter> <filter-mapping> <filter-name>FilterName </filter-name> <url-pattern>/path</url-pattern> </filter-mapping> <filter-mapping> <filter-name>FilterName </filter-name> <servlet-name>ServletName</servlet-name> </filter-mapping>
说明: (1)<init-param>标签(可有多个)用来设置过滤器的初始化参数, 在init(FilterConfig config)方法中通过config的 getInitParameter("ParamName")获得参数值。
(2)url-pattern用来设定过滤器的过滤地址,可带通配符“/*”, 表示任何地址都要经过该过滤器。
9.1.3 案例——基于过滤器的用户权限控制
【设计关键】 (1) 在过滤器中获取session对象(HttpSession): HttpServletRequest requ = (HttpServletRequest)request; HttpSession session = requ.getSession(true); (2) 过滤地址在web.xml中设置,假设是以/admin打头的所有地址。
要设计的组件: (1)登录检验过滤器:LoginFilter.java (2)在Web.xml中注册配置过滤器 (3)在WebRoot目录下,创建页面 (register.jsp)、以及登录处理页面(主要将请 求参数uaerName保存到session中的u_name属性 中。 (4)在WebRoot自下创建目录admin,并创建登录页 面(login.jsp)
3.过滤器的部署与运行 过滤器编译后的字节码文件必须部署到web目录 /WEB-INF/classes下才能起作用9-1】在一个Web应用程序中,有些JSP页面或Servlet必须是 注册用户登录后才有权访问。设计一个过滤器用于对用户是否 是登录用户进行检验。 【分析】判断一个用户是否登录的方法通常是:当用户登录成 功后,将用户名存放到session范围内 (session.setAttribute(“u_name”,username)), 判断时,从session中取出u_name属性 (session.getAttribute(“u_name”)),若取值不为空就是登录用户, 否则,就不是登录用户,可转入注册页面。 在每个需要登录用户才可以访问的页面或Servlet中加入登录 检验代码很冗余,可以通过编写过滤器统一解决,过滤地址设 为需要进行登录检验的那些Servlet或JSP的地址。
第2步:将过滤行为放入doFilter()方法中,按功能需要,实现 doFilter()方法。 第3步: 过滤器与相关联的servlet、JSP注册, 过滤器的配置信息要在web .xml注册。配置过滤器需要使用 <filter>和<filter-mapping>元素,并且要放在<app>与</app>之间。 其配置格式:
接口Filter的主要方法:
(2)doFilter()方法 方法原型: public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException,ServletException{} 当请求地址和过滤地址匹配时将进行过滤操作,该方法 被执行。 第1个参数为ServletRequest对象,此对象给过滤器提供了 对请求信息(包括表单数据、Cookie和HTTP请求头)的完全 访问。 第2个参数为ServletResponse,用于响应请求。 第3个参数为FilterChain对象,使用该参数对象调用Servlet、 JSP页面或者过滤器链中的下一个过滤器。 调用方法为: public void doFilter(ServletRequest request, ServletResponse response)
(3)若对Servlet实现过滤,其配置方式是: <filter-mapping> <filter-name>FilterName </filter-name> <servlet-name>ServletName</servlet-name> </filter-mapping>
9.1.2 设计过滤器
第9章 过滤器和监听器技术
9.1 过滤器技术 9.2 监听器技术 本章小结
9.1 过滤器技术
过滤器是在服务器上运行的,且位于请求与响应 中间的起过滤功能的程序,其工作原理如图9-1所示。
浏览器
请求/request 响应/response
过滤器 1 过滤器 2 过滤器 3
JSP、Servlet、HTML 等 Web 容器
第1步:实现Filter的接口,建立过滤器 选中工程,右击工程src目录,选择“new”,再选择 “class”,显示如图9-2所示的对话框,并按提示输入有关的信 息:在包filter下新建过滤器类Filter_first.java。
点击图9-2中的“Finish”按钮后,就建立了过滤器程序的基本框 架。新建的Servlet的基本结构代码:
9.1 过滤器技术
在与过滤器相关联的Servlet或JSP运行前,过滤器 先执行。一个过滤器可以与一个或多个Servlet或JSP绑 定,可以检查访问这些资源的请求信息。检查请求信 息后,过滤器可以选择下一个动作: • 正常调用请求的资源(即Servlet或JSP). • 用修改后的请求信息调用请求资源。 • 调用请求的资源,修改请求响应,再将响应发送到 客户端。 • 禁止调用该资源,将请求重定向到其它的资源,或 返回一个特定的状态码,或产生替换的输出。
9.1 过滤器技术
本节主要内容:
9.1.1 9.1.2 9.1.3 9.1.4 9.1.5 过滤器编程接口 设计过滤器 案例——基于过滤器的用户权限控制 案例——基于过滤器的中文乱码解决 案例——禁止未授权的IP访问站点过滤器
9.1.1 过滤器编程接口
进行过滤器编程用到javax.servlet.jar中的一组接 口和类,表9-1只列出了与过滤器设计有关的三个重要 接口,而与Servlet编程有关的接口、类请参考第6章。 表9-1 Servlet编程接口 功能 类和接口
第9章 过滤器和监听器技术
相关主题