版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Servlet应用开发高级技术应 用 Servlet应用开发高级技术应用 Servlets高级编程 nServlet 过滤 q概述 q实例学习 qEclipse编写Servlet过滤 n应用和会话事件 q概述 qEclipse编写实现时间监听 Servlet应用开发高级技术应用 Servlets高级编程 nServlet 过滤 q概述 q实例学习 qEclipse编写Servlet过滤 n应用和会话事件 q概述 qEclipse编写实现时间监听 Servlet应用开发高级技术应用 学习目标 n掌握过滤器(filters)的处理流程 n了解实现Servlet过滤器的API和接口 n掌握过滤器创建
2、方法 n实例学习 Servlet应用开发高级技术应用 Servlet过滤器及其用途 n过滤器(Filter) q在HttpServletRequest和 HttpServletResponse对 象被传递给Servlet之前,对其进行必要的处理 n过滤器的用途举例 q记录到来的请求信息,以及其发起机器的IP地址 q作为加密/解密的设备 q用户的认证、数据的压缩和用户输入的验证等 Servlet应用开发高级技术应用 Web应用中的Servlet Filters nServlet filters可截取在 Web客户端和 Web资源之间进/ 出的HTTP消息 q 在一个HTTP请求到达一个Web资源
3、(Servlet)之前,一个或 多个filters可对其进行截取和修改 q在一个Web资源使用一个请求转发器转发或者包含另一Web资 源时,过滤器也可运行 Servlet应用开发高级技术应用 Filters的典型应用 nServlet 过滤规范给出的典型应用: q认证filters q登录和审计filters q图像转换filters q数据压缩 filters q加密filters q触发资源访问事件的Filters q转换XML内容的XSLT filters q缓存filters Servlet应用开发高级技术应用 Filter的处理流程 响应 Web资源 请求 访问/修改请求 doFil
4、ter() 访问/修改响应 过滤器 客户端(请求Web Resource) 容器 Servlet应用开发高级技术应用 Filter链处理 nFilters能够被配置成为一条过滤链 n一个FilterChain对象描述该链 nFilters可以通过内嵌的调用来激活 qServlet容器调用Filter链中第一个filter的doFilter()方法 n类: 实现接口javax.servlet.Filter n参数: q请求,ServletRequest q响应,ServletResponse q过滤链,FilterChain Servlet应用开发高级技术应用 q过滤链中的第一个filter调用
5、doFilter(),并激活其中的 下一个filter n类: javax.servlet.FilterChain n参数: q请求,ServletRequest q响应,ServletResponse q过滤链的最后一个入口是Web资源 Filter链处理 Servlet应用开发高级技术应用 doFilter()嵌套调用 (1) (2) (3) Servlet应用开发高级技术应用 Filter实现 n创建一个类,实现接口 javax.servlet.Filter n实现方法: qinit() qdoFilter() qdestroy() n配置,Web.xml q定义filter, q映射该
6、filter到 servlet, q如果一个filter在多个servlet上起作用,可以将该 filter映射到一个映射到一个URL pattern,使得满足该模式的,使得满足该模式的 所有请求将被过滤 n例如:/* Servlet应用开发高级技术应用 Filter API简介 n编写一个filter时,主要需要实现下面的三个接口 (包javax.servlet中): qFilter qFilterConfig qFilterChain Servlet应用开发高级技术应用 Filter 接口 njavax.servlet.Filter是编写filter必须实现的接 口 n一个filter 的
7、生命周期通过该接口的三个方法来 体现: init, doFilter和destroy qpublic void init(FilterConfig filterConfig) qpublic void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain) qpublic void destroy() Servlet应用开发高级技术应用 Init方法 n一个filter在servlet容器调用其init方法时,开始 其生命周期 nServlet容器只调用一次init方法,调用发生
8、在容 器完成该filter的实例化时 nServlet容器将通过FilterConfig对象,获取该 filter的配置信息 Servlet应用开发高级技术应用 doFilter ndoFilter方法具体执行过滤过程 n用户每次请求一个filter被映射到的Web资源(例如 Servlet)时,Servlet容器将调用该filter的doFilter 方法 n调用doFilter时,Servlet容器将会传递一个 HttpServletRequest对象、 HttpServletResponse对象和 FilterChain对象 q可以操纵前两个对象,例如:给HttpServletReque
9、st 请求增加一个属性( setAttribute) qFilterChain对象被用于将控制传递到下一个资源 ndoFilter方法与Servlet的service方法类似 Servlet应用开发高级技术应用 destroy nServlet容器调用 destroy方法来通知该filter,将 要被销毁,因此,该filter能够进行一些必要的处 理操作。 Servlet应用开发高级技术应用 FilterConfig接口 nFilterConfig对象提供一个filter的配置信息 q该对象允许获取ServletContext对象 q向filter传递初始参数,该过程依赖于其部署描述中定 义的
10、初始参数 nFilterConfig接口有四个方法: qpublic String getFilterName() qpublic String getInitParameter(String parameterName) qpublic java.util.Enumeration getInitParameterNames() qpublic ServletContext getServletContext() Servlet应用开发高级技术应用 FilterChain接口 nFilterChain对象由Servlet容器传递给filter类的 doFilter方法 nFilterChain
11、接口只有一个方法doFilter qpublic void doFilter(HttpServletRequest request, HttpServletResponse response) n总是需要调用FilterChain接口的doFilter方法来将控制传递到 下一个filter n如果仅使用一个filter, doFilter方法将控制传递到下一个资源, 该资源可以是要进行过滤的servlet. n调用该方法失败,将使整个程序流程结束 Servlet应用开发高级技术应用 实例:一个基本的Filter n该实例仅通过打印消息展示Filter的生命周期 n说明:filter的doFil
12、ter方法调用FilterChain对象 的doFilter方法 Servlet应用开发高级技术应用 BasicFilter类 nimport java.io.IOException; nimport javax.servlet.Filter; nimport javax.servlet.FilterChain; nimport javax.servlet.FilterConfig; nimport javax.servlet.ServletException; nimport javax.servlet.ServletRequest; nimport javax.servlet.Servle
13、tResponse; npublic class BasicFilter implements Filter n private FilterConfig filterConfig; n public void init(FilterConfig filterConfig) throws ServletException n System.out.println(Filter initialized); n this.filterConfig = filterConfig; n Servlet应用开发高级技术应用 npublic void destroy() n System.out.prin
14、tln(Filter destroyed); n this.filterConfig = null; n n npublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException n System.out.println(doFilter); n chain.doFilter(request, response); n n Servlet应用开发高级技术应用 实例:一个基本的Filter(续) n为使上述fil
15、ter工作,需要告诉Servlet容器,要 过滤哪个或者哪些servlet。该过程通过在部署 描述文件中使用和元 素来完成 n上述两个元素必须出现在任何和 元素之前 Servlet应用开发高级技术应用 部署描述 n n n n n n n Basic Filter n n n BasicFilter n n n Servlet应用开发高级技术应用 n n n n Basic Filter n n n FilteredServlet n n n n n SessionLifeCycleEventDemo n n n n n FilteredServlet n n n FilteredServle
16、t n n n Servlet应用开发高级技术应用 在多个Servlet上应用Filter n对每个servlet重复元素 q例如:在FilteredServlet和FilteredServlet2上应用 Filter的部署描述 n n n Basic Filter n FilteredServlet n n n n Basic Filter n FilteredServlet2 n Servlet应用开发高级技术应用 使用URL模式映射Filter n将一个filter映射到一个URL模式,可使用部署 描述文件中的 元素 n作为一种替代方法,可使用/*使得该filter对所 有的静态和动态资
17、源起作用,例如: Logging Filter /servlet/FilteredServlet Logging Filter /filter-name /* Servlet应用开发高级技术应用 实例 - LoggingFilter n一个简单的filter实例,将用户的IP地址写入日志文件 nimport java.io.IOException; nimport javax.servlet.Filter; nimport javax.servlet.FilterChain; nimport javax.servlet.FilterConfig; nimport javax.servlet.S
18、ervletContext; nimport javax.servlet.ServletException; nimport javax.servlet.ServletRequest; nimport javax.servlet.ServletResponse; npublic class LoggingFilter implements Filter n private FilterConfig filterConfig = null; n public void destroy() n System.out.println(Filter destroyed); n this.filterC
19、onfig = null; n Servlet应用开发高级技术应用 实例 - Logging Filter(续) npublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException n System.out.println(doFilter); n / 记录用户IP n ServletContext servletContext = filterConfig.getServletContext(); n se
20、rvletContex.log(request.getRemoteHost(); n chain.doFilter(request, response); n n public void init(FilterConfig filterConfig) throws ServletException n System.out.println(Filter initialized); n this.filterConfig = filterConfig; n n Servlet应用开发高级技术应用 LoggingFilter部署描述 n n n n n n n Logging Filter n n
21、 n LoggingFilter n n Servlet应用开发高级技术应用 n n n n Logging Filter n n n FilteredServlet n n n n n FilteredServlet n n n FilteredServlet n n n Servlet应用开发高级技术应用 LoggingFilter作用的Servlet nimport javax.servlet.*; nimport javax.servlet.http.*; nimport java.io.*; npublic class FilteredServlet extends HttpServ
22、let n public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException n response.setContentType(text/html); n PrintWriter out = response.getWriter(); n out.println(); n out.println(); n out.println(User Counter); n out.println(); n out.println(); n ou
23、t.println(IP: + request.getRemoteHost(); n out.println(); n out.println(); n n Servlet应用开发高级技术应用 Filter 配置 n可传递一些初始参数给一个filter, 这些参数在 FilterConfig对象中,被传递给Filter接口的init 方法 n初始参数在部署描述中以元素定 义,该元素是的子元素 Servlet应用开发高级技术应用 实例:访问初始参数 n下面的部署描述符描述了一个叫MyFilter的过滤器, 有两个初始参数: adminPhone和 adminEmail. n n n n n n
24、MyFilter n n n MyFilter n Servlet应用开发高级技术应用 n n n adminPhone n n n 0414789098 n n n n n adminEmail n n n n n n n Servlet应用开发高级技术应用 实例:访问初始参数 n可以访问AdminPhone和AdminEmail的值 , 使用doFilter方法: n String adminPhone = filterConfig.getInitParameter(adminPhone); String admin Email = filterConfig.getInitParamete
25、r(adminEmail); Servlet应用开发高级技术应用 实例:用户输入检查的过滤器 n如果用户的输入不正确,通常需要发送一个错 误消息,告诉用户需要正确的输入 n如果输入不完全错误,例如,需要增加或者剪 除空格,需要使用trim函数来校正输入数据 String firstName = request.getParameter(firstName); if (firstName != null) firstName = firstName.trim(); Servlet应用开发高级技术应用 实例:用户输入检查的过滤器 n可以编写过滤器来对每个参数执行trim函数,参数保 存在HttpS
26、ervletRequest对象中,trim要在参数被 servlet接收前完成 n可以改变参数的值,方法如下: q将修剪过的参数值作为属性,参数名作为属性名 q然后,在servlet中,获取修剪后的输入属性 Enumeration enum = request.getParameterNames(); while (enum.hasMoreElements() String parameterName = (String) enum.nextElement(); String parameterValue = request.getParameter(parameterName); reque
27、st.setAttribute(parameterName, parameterValue.trim(); request.getAttribute(parameterName); Servlet应用开发高级技术应用 TrimFilter nimport java.io.*; nimport javax.servlet.Filter; nimport javax.servlet.FilterChain; nimport javax.servlet.FilterConfig; nimport javax.servlet.ServletContext; nimport javax.servlet.
28、ServletException; nimport javax.servlet.ServletRequest; nimport javax.servlet.ServletResponse; nimport java.util.Enumeration; npublic class TrimFilter implements Filter n private FilterConfig filterConfig = null; n public void destroy() n System.out.println(Filter destroyed); n this.filterConfig = n
29、ull; n n Servlet应用开发高级技术应用 npublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException n System.out.println(Filter); n Enumeration enum = request.getParameterNames(); n while (enum.hasMoreElements() n String parameterName = (String)
30、 enum.nextElement(); n String parameterValue = request.getParameter(parameterName); n request.setAttribute(parameterName, parameterValue.trim(); n n n chain.doFilter(request, response); n n public void init(FilterConfig filterConfig) throws ServletException n System.out.println(Filter initialized);
31、n this.filterConfig = filterConfig; n n Servlet应用开发高级技术应用 nservlet的功能: q发送一个HTML表单,该表单有四个输入框:firstName, lastName, userName, 和password,然后调用doGet方法 q当doPost方法被调用时,显示用户输入 nimport javax.servlet.*; nimport javax.servlet.http.*; nimport java.io.*; npublic class TrimFilteredServlet extends HttpServlet n n
32、public void doGet(HttpServletRequest request, HttpServletResponse response) n throws ServletException, IOException n response.setContentType(text/html); n PrintWriter out = response.getWriter(); n out.println(); 实例(续): 用户输入检查过滤器 Servlet应用开发高级技术应用 n out.println(); n out.println(User Input Form); n ou
33、t.println(); n out.println(); n out.println(); n out.println(Please enter your details.); n out.println(); n out.println(); n out.println(); n out.println(); n out.println(First Name:); n out.println(); n out.println(); n out.println(); n out.println(Last Name:); n out.println(); n out.println(); n
34、out.println(); Servlet应用开发高级技术应用 nout.println(User Name:); n out.println(); n out.println(); n out.println(); n out.println(Password:); n out.println(); n out.println(); n out.println(); n out.println(); n out.println(); n out.println(); n out.println(); n out.println(); n out.println(); n out.print
35、ln(); n out.println(); n n Servlet应用开发高级技术应用 npublic void doPost(HttpServletRequest request, HttpServletResponse response) n throws ServletException, IOException n String firstName = (String) request.getAttribute(firstName); n String lastName = (String) request.getAttribute(lastName); n String userN
36、ame = (String) request.getAttribute(userName); n String password = request.getParameter(password); n response.setContentType(text/html); n PrintWriter out = response.getWriter(); n out.println(); n out.println(); n out.println(Displaying Values); n out.println(); n out.println(); n out.println(); n
37、out.println(Here are your details.); n out.println(); Servlet应用开发高级技术应用 nout.println(); n out.println(First Name:); n out.println( + firstName + ); n out.println(); n out.println(); n out.println(Last Name:); n out.println( + lastName + ); n out.println(); n out.println(); n out.println(User Name:);
38、 n out.println( + userName + ); n out.println(); n out.println(); n out.println(Password:); n out.println( + password + ); n out.println(); n out.println(); n out.println(); n out.println(); n n Servlet应用开发高级技术应用 部署描述符 n n n n n n n Trim Filter n n n TrimFilter n n n Servlet应用开发高级技术应用 n n n n Trim F
39、ilter n n n TrimFilteredServlet n n n n n TrimFilteredServlet n n n TrimFilteredServlet n n n Servlet应用开发高级技术应用 运行结果初始 Servlet应用开发高级技术应用 运行结果提交后 Servlet应用开发高级技术应用 实例:过滤响应 n可以过滤响应 n例如:一个过滤器用于连接每个Servlet的 header和和footer Servlet应用开发高级技术应用 ResponseFilter类 nimport java.io.*; nimport javax.servlet.Filter;
40、 nimport javax.servlet.FilterChain; nimport javax.servlet.FilterConfig; nimport javax.servlet.ServletContext; nimport javax.servlet.ServletException; nimport javax.servlet.ServletRequest; nimport javax.servlet.ServletResponse; nimport java.util.Enumeration; npublic class ResponseFilter implements Fi
41、lter n private FilterConfig filterConfig = null; n n Servlet应用开发高级技术应用 npublic void destroy() n System.out.println(Filter destroyed); n this.filterConfig = null; n n n public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException n Sys
42、tem.out.println(doFilter); n PrintWriter out = response.getWriter(); n /输出Header n out.println(); n out.println(); n out.println(); n out.println(Page header); n out.println(); n chain.doFilter(request, response); n / 输出Footer Servlet应用开发高级技术应用 n out.println(); n out.println(Page footer); n out.prin
43、tln(); n out.println(); n out.println(); n n public void init(FilterConfig filterConfig) throws ServletException n System.out.println(Filter initialized); n this.filterConfig = filterConfig; n n Servlet应用开发高级技术应用 实例 过滤链 n可以在一个资源上应用多个过滤器 ,例如:创建 UpperCaseFilter 、 TrimFilter 和 DoublyFilteredServlet. Up
44、perCaseFilter: nimport java.io.*; nimport javax.servlet.Filter; nimport javax.servlet.FilterChain; nimport javax.servlet.FilterConfig; nimport javax.servlet.ServletContext; nimport javax.servlet.ServletException; nimport javax.servlet.ServletRequest; nimport javax.servlet.ServletResponse; nimport ja
45、va.util.Enumeration; npublic class UpperCaseFilter implements Filter n private FilterConfig filterConfig = null; n public void destroy() n System.out.println(Filter destroyed); n this.filterConfig = null; n Servlet应用开发高级技术应用 n public void doFilter(ServletRequest request, ServletResponse response, Fi
46、lterChain chain) throws IOException, ServletException n System.out.println(Filter); n Enumeration enum = request.getAttributeNames(); n while (enum.hasMoreElements() n String attributeName = (String) enum.nextElement(); n String attributeValue = (String) request.getAttribute(attributeName); n reques
47、t.setAttribute(attributeName, attributeValue.toUpperCase(); n n n chain.doFilter(request, response); n n public void init(FilterConfig filterConfig) throws ServletException n System.out.println(Filter initialized); n this.filterConfig = filterConfig; n n Servlet应用开发高级技术应用 DoublyFilteredServlet nimpo
48、rt javax.servlet.*; nimport javax.servlet.http.*; nimport java.io.*; npublic class DoublyFilteredServlet extends HttpServlet n public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException n response.setContentType(text/html); n PrintWriter out = re
49、sponse.getWriter(); n out.println(); n out.println(); n out.println(User Input Form); n out.println(); n out.println(); n out.println(); Servlet应用开发高级技术应用 n out.println(Please enter your details.); n out.println(); n out.println(); n out.println(); n out.println(); n out.println(First Name:); n out.
50、println(); n out.println(); n out.println(); n out.println(Last Name:); n out.println(); n out.println(); n out.println(); n out.println(User Name:); n out.println(); n out.println(); n out.println(); n out.println(Password:); n out.println(); n Servlet应用开发高级技术应用 n out.println(); n out.println(); n out.println(); n out.prin
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度xyz与pqr就智慧城市解决方案的合作合同
- 建筑工程施工补充合同
- 2024年度南京二手房买卖合同
- 2024店铺商铺租赁合同范本
- 合伙开店合同:共同经营店铺协议书样本
- 承揽合同与雇佣合同的实质区别
- 工程合同风险管理
- 专业劳务派遣合同协议
- 招商引资协议案例
- 2024年水电工承包合同范本
- 口腔牙科诊所技工室工作制度
- 英语KET官方样题Test1- Test 2
- 七年级语文上册15梅岭三章课件
- 财务管理考试试题及答案
- Unit 4 The Earth【速记清单】含答案解析
- 【课件】第七单元能源的合理利用与开发新版教材单元分析-九年级化学人教版(2024)上册
- 2024年认证行业法律法规及认证基础知识 CCAA年度确认 试题与答案
- 水库除险加固工程实施方案
- 5.1平行与垂直(进阶练习)2024-2025学年人教版数学四年级上册
- 8《安全记心上》第1课时 教学设计-2024-2025学年道德与法治三年级上册统编版
- 2024年人教版小学六年级数学(上册)期中考卷附答案
评论
0/150
提交评论