Servlet的高级应用
Servlet的高级应用
Servlet的高级应用 ●过滤器 ○掌握过滤器的工作原理 ○学会应用中文过滤器 ●监听器 ○了解各种监听器
Servlet的高级应用 ⚫过滤器 掌握过滤器的工作原理 学会应用中文过滤器 ⚫监听器 了解各种监听器
1过滤器 ●常见需求 O针对Servlet,想要了解从请求到响应之间的时 间差 ○特定页面,只能是拥有特定用户权限的才能访问 ○安全字符过滤,将一些敏感字符过滤为无害字符 ○字符的编码转码等 ●以往解决方法 ○在具体语句中进行编程,功能缺乏通用性,一旦 出现需求变化,需要在多处进行修改
1 过滤器 ⚫常见需求 针对Servlet,想要了解从请求到响应之间的时 间差 特定页面,只能是拥有特定用户权限的才能访问 安全字符过滤,将一些敏感字符过滤为无害字符 字符的编码转码等 ⚫以往解决方法 在具体语句中进行编程,功能缺乏通用性,一旦 出现需求变化,需要在多处进行修改
1过滤器 ●分析: ○这些需求与业务没有直接关系,属于应用程序的额外 服务。 ●解决方法 ○用一个标准的方式来创建插件式(pluggable)的过滤 器做某些共通处理,使用这种方式,无需改变核心的 请求处理代码。 O过滤器通过对输入(request)输出(response)进 行拦截,做一些前处理/后处理操作。能够简单地增加/ 移除这些过滤器而无需对原有的代码做任何修改。 O这就是J2EE的核心设计模式之一Intercepting Filter模 式(P437页)
1 过滤器 ⚫ 分析: 这些需求与业务没有直接关系,属于应用程序的额外 服务。 ⚫ 解决方法 用一个标准的方式来创建插件式(pluggable)的过滤 器做某些共通处理,使用这种方式,无需改变核心的 请求处理代码。 过滤器通过对输入(request)输出(response)进 行拦截,做一些前处理/后处理操作。能够简单地增加/ 移除这些过滤器而无需对原有的代码做任何修改。 这就是J2EE的核心设计模式之一Intercepting Filter模 式(P437页)
1过滤器 Intercepting Filter模式常被用来解决以下 ● 问题: O认证 页面导航与转发等 Session管理 国际化或本地化处理 日志 其它共通处理等等
1 过滤器 ⚫Intercepting Filter模式常被用来解决以下 问题: 认证 页面导航与转发等 Session管理 国际化或本地化处理 日志 其它共通处理等等
WEB SYSTEM CLIENT FilterManager Target FilterChain FilterOne FilterTwo FilterThree
1过滤器 ●○ ●定义 ○驻留在服务器端的Web组件,截取客户端和目的资 源间的请求和响应信息,对这些信息进行过滤 Web容器 「迂1迂1厂 滤1 滤 滤 浏览器 器器 器 标文件 过器 目标文 L2T) 2 过滤器在Web应用程序中的位置
1 过滤器 ⚫定义 驻留在服务器端的Web组件,截取客户端和目的资 源间的请求和响应信息,对这些信息进行过滤 浏览器 Web容器 过 滤 器 (1) 过 滤 器 (.) 过 滤 器 (2) 目 标 文 件1 过滤器在Web应用程序中的位置 目 标 文 件2 过 滤 器
1.1过滤器的基本结构 ●过滤器包含在javax.servlet包,要实现过滤器就 必须实现Filter接口, ●javax.servlet.Filter:定义了三个方法 Opublic void init (FilterConfig filterConfig), 化方法。 O public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain)类似与 Servlet的service方法。在调用service方法前,调用该方 法。 O public void destroy()方法,销毁方法
1.1 过滤器的基本结构 ⚫ 过滤器包含在javax.servlet包,要实现过滤器就 必须实现Filter接口, ⚫ javax.servlet.Filter:定义了三个方法 public void init(FilterConfig filterConfig),初始 化方法 。 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)类似与 Servlet的service方法。在调用service方法前,调用该方 法。 public void destroy()方法,销毁方法
1.1过滤器的基本结构 ●相关接口 Ojavax.servlet.FilterConfig ●类似于Servlet:接口的ServletConfig,是实现Filter接口的 类上使用标注或Web.xml过滤器设置信息的代表对象由容器 实现,作为参数传入Filter的init方法 Ojavax.servlet.FilterChain ●由容器实现,作为参数传入Filter的doFilter,方法,使 用FilterChain.对象调用下一个过滤器,若为最后一个 则调用目标文件 ●若因为某种情况没有调用doFilter方法,则请求不会 继续交给过滤器或目标文件,这就是所谓的拦截请求
1.1 过滤器的基本结构 ⚫相关接口 javax.servlet.FilterConfig ⚫类似于Servlet接口的ServletConfig,是实现Filter接口的 类上使用标注或Web.xml过滤器设置信息的代表对象由容器 实现,作为参数传入Filter的init方法 javax.servlet.FilterChain ⚫由容器实现,作为参数传入Filter的doFilter方法,使 用FilterChain对象调用下一个过滤器,若为最后一个 则调用目标文件 ⚫若因为某种情况没有调用doFilter方法,则请求不会 继续交给过滤器或目标文件,这就是所谓的拦截请求
过滤器实例 ● 举例:test,jsp,SimpleFilter,java package cc.openhome; import java.io.*; import javax.servlet.*; public class SimpleFilter implements Filter {//init方法 public void init(FilterConfig filterConfig) throws ServletException l/destroy方法 public void destroy(){}
过滤器实例 ⚫ 举例: test.jsp, SimpleFilter.java package cc.openhome; import java.io.*; import javax.servlet.*; public class SimpleFilter implements Filter { //init方法 public void init(FilterConfig filterConfig) throws ServletException { } //destroy方法 public void destroy(){} }