Download presentation
Presentation is loading. Please wait.
1
第十二章 过滤器
2
回顾 2-1 Java Server Pages 标准标签库 (JSTL) 用于访问 SQL 数据库、国际化标签以及在 JSP 页面中显示值
核心标签库包含通用标签、条件标签和迭代标签 通用标签用于显示、设置和删除 JSP 页面内的变量值 条件标签(如 if 和 choose)用于根据条件执行操作 迭代标签(如 forEach 和 forTokens)用于多次执行标签体
3
回顾 2-2 国际化与格式化标签库用于创建国际化的 Web 应用程序 SQL 标签库用于从 JSP 页面中访问和更新 SQL 数据库
4
目标 描述过滤器 理解过滤器生命周期 实现简单的过滤器
5
过滤器简介 过滤器是向 Web 应用程序的请求和响应处理添加功能的 Web 服务组件 过滤器的工作原理: 用户 过滤器 Web 资源
用户发送请求 用户 过滤器 Web 资源 过滤器将 Web 资源的响应发送给用户 资源将响应发送至过滤器
6
过滤器生命周期 过滤器生命周期的各个阶段: 实例化 初始化 过滤 销毁
7
过滤器定义 过滤器定义用于将过滤器名称与部署描述符中的特定类关联 <filter>
<filter-name>FilterName</filter-name> <filter-class>ClassName</filter-class> </filter> 指定过滤器的名称 指定类的名称
8
过滤器映射 使用 <filter-mapping> 元素可将过滤器映射至 Web资源,如Servlet
<filter-name> MyFilter </filter-name> <url-pattern> /servletname/* </url- pattern> </filter-mapping> 指定过滤器的名称 指定 Servlet 的名称
9
过滤器定义和映射 定义和映射过滤器 部署描述符中 <filter> 和 <filter-mapping> 元素的用法
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" " <web-app> <display-name>FiltersModule</display-name> <filter> <filter-name>FilterTimer</filter-name> <filter-class>filters.TimerFilter</filter-class> </filter> <filter-mapping> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
10
Filter 接口 过滤器是一个对象,它根据用户的请求和资源的响应进行过滤 Filter 接口包含以下方法: Filter 接口
Init() doFilter() destroy()
11
过滤器链 FilterChain 接口用于调用过滤器链中的一系列过滤器 用户 过滤器1 过滤器2 过滤器3 Web 资源 过滤器链
12
getInitParameterNames()
FilterConfig 在初始化过程中,容器使用 FilterConfig 将信息传递给过滤器 FilterConfig 接口包含以下方法: FilterConfig getFilterName() getInitParameter() getInitParameterNames() getServletContext()
13
创建 Servlet ... out.println("<head><title>LoggerServlet</title></head>"); out.println("<body bgcolor=\"#ffffff\">"); out.println(“<h1>简单过滤器 Servlet</h1>"); String requestedUri = (String)request.getAttribute("requestURI"); out.println(“<b>请求的 URI 为: </b>"+requestedUri); out.println("</body>"); out.println("</html>"); 演示:示例 1
14
创建过滤器 FilterConfig、doFilter()、init() 和 destroy() 方法的用法 演示:示例 2
public class LoggerFilter extends HttpServlet implements Filter { private FilterConfig filterConfig; public void init(FilterConfig filterConfig) throws ServletException this.filterConfig = filterConfig; } public void doFilter(ServletRequest request, ServletResponse response,FilterChain filterChain) long startTime=System.currentTimeMillis(); String remoteAddress=request.getRemoteAddr(); String remoteHost=request.getRemoteHost(); HttpServletRequest myReq=(HttpServletRequest)request; String reqURI=myReq.getRequestURI(); System.out.println(reqURI); FilterConfig、doFilter()、init() 和 destroy() 方法的用法 演示:示例 2
15
创建 HTML 文件 演示:示例 3 <html> <head >
<title > 新文档 </title > </head > <body > <h1>欢迎使用第一个过滤器示例</h1> <a href=‘/FilterModule/loggerservlet’>单击此处查看过滤器的效果</a> </body > </html> 演示:示例 3
16
实现过滤器链-过滤器1 public class SimpleFilter extends HttpServlet implements Filter { private FilterConfig filterConfig; public void init(FilterConfig filterConfig) throws ServletException { this.filterConfig = filterConfig; } public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) try { filterConfig.getServletContext().log("in SimpleFilter"); System.out.println("in SimpleFilter"); filterChain.doFilter(request, response); filterConfig.getServletContext().log("Getting out of SimpleFilter"); System.out.println("Getting out of SimpleFilter"); } catch (ServletException sx) { ... 演示:示例 4
17
实现过滤器链-过滤器2 public class SimpleFilter2 extends HttpServlet implements Filter { private FilterConfig filterConfig; ... public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) { try { filterConfig.getServletContext().log("in SimpleFilter2"); System.out.println("in SimpleFilter2"); filterChain.doFilter(request, response); filterConfig.getServletContext().log("Getting out of SimpleFilter2"); System.out.println("Getting out of SimpleFilter2"); } catch (ServletException sx) { } 演示:示例 5
18
实现过滤器链-web.xml <filter>
<filter-name>simplefilter</filter-name> <filter-class>myfilter.SimpleFilter</filter-class> </filter> <filter-mapping> <url-pattern>/*</url-pattern> </filter-mapping> <filter-name>simplefilter2</filter-name> <filter-class>myfilter.SimpleFilter2</filter-class>
19
实现过滤器链 创建一个html文件作为Web资源 <html> <head></head>
<body> <h1>欢迎访问过滤器链演示程序!</h1> </body> </html>
20
总结 过滤器是 Web 服务组件 过滤器可以访问客户端输入的请求和 Web 资源输出的响应 过滤器定义用于将过滤器名称与特定的类关联在一起
Filter 接口包含各种方法,如 init()、doFilter() 和 destroy() 每次用户发送请求或 Web 资源发送响应时都会调用 doFilter() 方法 FilterChain 接口用于调用过滤器链中的下一个过滤器 在初始化过程中,Servlet 使用 FilterConfig 将信息传递给过滤器
Similar presentations