Servlet应用开发高级技术.ppt

上传人:sh****n 文档编号:7425141 上传时间:2020-03-21 格式:PPT 页数:70 大小:783.50KB
返回 下载 相关 举报
Servlet应用开发高级技术.ppt_第1页
第1页 / 共70页
Servlet应用开发高级技术.ppt_第2页
第2页 / 共70页
Servlet应用开发高级技术.ppt_第3页
第3页 / 共70页
点击查看更多>>
资源描述
第二讲 Servlet高级编程 过滤 应用和会话事件 1 陈旺虎 Servlets高级编程 Servlet过滤概述实例学习Eclipse编写Servlet过滤应用和会话事件概述Eclipse编写实现时间监听 Servlets高级编程 Servlet过滤概述实例学习Eclipse编写Servlet过滤应用和会话事件概述Eclipse编写实现时间监听 学习目标 掌握过滤器 filters 的处理流程了解实现Servlet过滤器的API和接口掌握过滤器创建方法实例学习 Servlet过滤器及其用途 过滤器 Filter 在HttpServletRequest和HttpServletResponse对象被传递给Servlet之前 对其进行必要的处理过滤器的用途举例记录到来的请求信息 以及其发起机器的IP地址作为加密 解密的设备用户的认证 数据的压缩和用户输入的验证等 Web应用中的ServletFilters Servletfilters可截取在Web客户端和Web资源之间进 出的HTTP消息在一个HTTP请求到达一个Web资源 Servlet 之前 一个或多个filters可对其进行截取和修改在一个Web资源使用一个请求转发器转发或者包含另一Web资源时 过滤器也可运行 Filters的典型应用 Servlet过滤规范给出的典型应用 认证filters登录和审计filters图像转换filters数据压缩filters加密filters触发资源访问事件的Filters转换XML内容的XSLTfilters缓存filters Filter的处理流程 响应 Filter链处理 Filters能够被配置成为一条过滤链一个FilterChain对象描述该链Filters可以通过内嵌的调用来激活Servlet容器调用Filter链中第一个filter的doFilter 方法类 实现接口javax servlet Filter参数 请求 ServletRequest响应 ServletResponse过滤链 FilterChain 过滤链中的第一个filter调用doFilter 并激活其中的下一个filter类 javax servlet FilterChain参数 请求 ServletRequest响应 ServletResponse过滤链的最后一个入口是Web资源 Filter链处理 doFilter 嵌套调用 1 2 3 Filter实现 创建一个类 实现接口javax servlet Filter实现方法 init doFilter destroy 配置 Web xml定义filter 映射该filter到servlet 如果一个filter在多个servlet上起作用 可以将该filter映射到一个URLpattern 使得满足该模式的所有请求将被过滤例如 FilterAPI简介 编写一个filter时 主要需要实现下面的三个接口 包javax servlet中 FilterFilterConfigFilterChain Filter接口 javax servlet Filter是编写filter必须实现的接口一个filter的生命周期通过该接口的三个方法来体现 init doFilter和destroypublicvoidinit FilterConfigfilterConfig publicvoiddoFilter HttpServletRequestrequest HttpServletResponseresponse FilterChainchain publicvoiddestroy Init方法 一个filter在servlet容器调用其init方法时 开始其生命周期Servlet容器只调用一次init方法 调用发生在容器完成该filter的实例化时Servlet容器将通过FilterConfig对象 获取该filter的配置信息 doFilter doFilter方法具体执行过滤过程用户每次请求一个filter被映射到的Web资源 例如Servlet 时 Servlet容器将调用该filter的doFilter方法调用doFilter时 Servlet容器将会传递一个HttpServletRequest对象 HttpServletResponse对象和FilterChain对象可以操纵前两个对象 例如 给HttpServletRequest请求增加一个属性 setAttribute FilterChain对象被用于将控制传递到下一个资源doFilter方法与Servlet的service方法类似 destroy Servlet容器调用destroy方法来通知该filter 将要被销毁 因此 该filter能够进行一些必要的处理操作 FilterConfig接口 FilterConfig对象提供一个filter的配置信息该对象允许获取ServletContext对象向filter传递初始参数 该过程依赖于其部署描述中定义的初始参数FilterConfig接口有四个方法 publicStringgetFilterName publicStringgetInitParameter StringparameterName publicjava util EnumerationgetInitParameterNames publicServletContextgetServletContext FilterChain接口 FilterChain对象由Servlet容器传递给filter类的doFilter方法FilterChain接口只有一个方法 doFilterpublicvoiddoFilter HttpServletRequestrequest HttpServletResponseresponse 总是需要调用FilterChain接口的doFilter方法来将控制传递到下一个filter如果仅使用一个filter doFilter方法将控制传递到下一个资源 该资源可以是要进行过滤的servlet 调用该方法失败 将使整个程序流程结束 实例 一个基本的Filter 该实例仅通过打印消息展示Filter的生命周期说明 filter的doFilter方法调用FilterChain对象的doFilter方法 BasicFilter类 importjava io IOException importjavax servlet Filter importjavax servlet FilterChain importjavax servlet FilterConfig importjavax servlet ServletException importjavax servlet ServletRequest importjavax servlet ServletResponse publicclassBasicFilterimplementsFilter privateFilterConfigfilterConfig publicvoidinit FilterConfigfilterConfig throwsServletException System out println Filterinitialized this filterConfig filterConfig publicvoiddestroy System out println Filterdestroyed this filterConfig null publicvoiddoFilter ServletRequestrequest ServletResponseresponse FilterChainchain throwsIOException ServletException System out println doFilter chain doFilter request response 实例 一个基本的Filter 续 为使上述filter工作 需要告诉Servlet容器 要过滤哪个或者哪些servlet 该过程通过在部署描述文件中使用和元素来完成上述两个元素必须出现在任何和元素之前 部署描述 BasicFilterBasicFilter BasicFilterFilteredServletSessionLifeCycleEventDemoFilteredServletFilteredServlet 在多个Servlet上应用Filter 对每个servlet重复元素例如 在FilteredServlet和FilteredServlet2上应用Filter的部署描述BasicFilterFilteredServletBasicFilterFilteredServlet2 使用URL模式映射Filter 将一个filter映射到一个URL模式 可使用部署描述文件中的元素作为一种替代方法 可使用 使得该filter对所有的静态和动态资源起作用 例如 实例 LoggingFilter 一个简单的filter实例 将用户的IP地址写入日志文件importjava io IOException importjavax servlet Filter importjavax servlet FilterChain importjavax servlet FilterConfig importjavax servlet ServletContext importjavax servlet ServletException importjavax servlet ServletRequest importjavax servlet ServletResponse publicclassLoggingFilterimplementsFilter privateFilterConfigfilterConfig null publicvoiddestroy System out println Filterdestroyed this filterConfig null 实例 LoggingFilter 续 publicvoiddoFilter ServletRequestrequest ServletResponseresponse FilterChainchain throwsIOException ServletException System out println doFilter 记录用户IPServletContextservletContext filterConfig getServletContext servletContex log request getRemoteHost chain doFilter request response publicvoidinit FilterConfigfilterConfig throwsServletException System out println Filterinitialized this filterConfig filterConfig LoggingFilter部署描述 LoggingFilterLoggingFilter LoggingFilterFilteredServletFilteredServletFilteredServlet LoggingFilter作用的Servlet importjavax servlet importjavax servlet http importjava io publicclassFilteredServletextendsHttpServlet publicvoiddoGet HttpServletRequestrequest HttpServletResponseresponse throwsServletException IOException response setContentType text html PrintWriterout response getWriter out println out println out println UserCounter out println out println out println IP request getRemoteHost out println out println Filter配置 可传递一些初始参数给一个filter 这些参数在FilterConfig对象中 被传递给Filter接口的init方法初始参数在部署描述中以元素定义 该元素是的子元素 实例 访问初始参数 下面的部署描述符描述了一个叫MyFilter的过滤器 有两个初始参数 adminPhone和adminEmail MyFilterMyFilter adminPhone0414789098adminEmailadmin 实例 访问初始参数 可以访问AdminPhone和AdminEmail的值 使用doFilter方法 实例 用户输入检查的过滤器 如果用户的输入不正确 通常需要发送一个错误消息 告诉用户需要正确的输入如果输入不完全错误 例如 需要增加或者剪除空格 需要使用trim函数来校正输入数据StringfirstName request getParameter firstName if firstName null firstName firstName trim 实例 用户输入检查的过滤器 可以编写过滤器来对每个参数执行trim函数 参数保存在HttpServletRequest对象中 trim要在参数被servlet接收前完成可以改变参数的值 方法如下 将修剪过的参数值作为属性 参数名作为属性名然后 在servlet中 获取修剪后的输入属性 TrimFilter importjava io importjavax servlet Filter importjavax servlet FilterChain importjavax servlet FilterConfig importjavax servlet ServletContext importjavax servlet ServletException importjavax servlet ServletRequest importjavax servlet ServletResponse importjava util Enumeration publicclassTrimFilterimplementsFilter privateFilterConfigfilterConfig null publicvoiddestroy System out println Filterdestroyed this filterConfig null publicvoiddoFilter ServletRequestrequest ServletResponseresponse FilterChainchain throwsIOException ServletException System out println Filter Enumerationenum request getParameterNames while enum hasMoreElements StringparameterName String enum nextElement StringparameterValue request getParameter parameterName request setAttribute parameterName parameterValue trim chain doFilter request response publicvoidinit FilterConfigfilterConfig throwsServletException System out println Filterinitialized this filterConfig filterConfig servlet的功能 发送一个HTML表单 该表单有四个输入框 firstName lastName userName 和password 然后调用doGet方法当doPost方法被调用时 显示用户输入importjavax servlet importjavax servlet http importjava io publicclassTrimFilteredServletextendsHttpServlet publicvoiddoGet HttpServletRequestrequest HttpServletResponseresponse throwsServletException IOException response setContentType text html PrintWriterout response getWriter out println 实例 续 用户输入检查过滤器 out println out println UserInputForm out println out println out println out println Pleaseenteryourdetails out println out println out println out println out println FirstName out println out println out println out println LastName out println out println out println out println UserName out println out println out println out println Password out println out println out println out println out println out println out println out println out println out println out println publicvoiddoPost HttpServletRequestrequest HttpServletResponseresponse throwsServletException IOException StringfirstName String request getAttribute firstName StringlastName String request getAttribute lastName StringuserName String request getAttribute userName Stringpassword request getParameter password response setContentType text html PrintWriterout response getWriter out println out println out println DisplayingValues out println out println out println out println Hereareyourdetails out println out println out println FirstName out println firstName out println out println out println LastName out println lastName out println out println out println UserName out println userName out println out println out println Password out println password out println out println out println out println 部署描述符 TrimFilterTrimFilter TrimFilterTrimFilteredServletTrimFilteredServletTrimFilteredServlet 运行结果 初始 运行结果 提交后 实例 过滤响应 可以过滤响应例如 一个过滤器用于连接每个Servlet的header和footer ResponseFilter类 importjava io importjavax servlet Filter importjavax servlet FilterChain importjavax servlet FilterConfig importjavax servlet ServletContext importjavax servlet ServletException importjavax servlet ServletRequest importjavax servlet ServletResponse importjava util Enumeration publicclassResponseFilterimplementsFilter privateFilterConfigfilterConfig null publicvoiddestroy System out println Filterdestroyed this filterConfig null publicvoiddoFilter ServletRequestrequest ServletResponseresponse FilterChainchain throwsIOException ServletException System out println doFilter PrintWriterout response getWriter 输出Headerout println out println out println out println Pageheader out println chain doFilter request response 输出Footer out println out println Pagefooter out println out println out println publicvoidinit FilterConfigfilterConfig throwsServletException System out println Filterinitialized this filterConfig filterConfig 实例 过滤链 可以在一个资源上应用多个过滤器 例如 创建UpperCaseFilter TrimFilter和DoublyFilteredServlet UpperCaseFilter importjava io importjavax servlet Filter importjavax servlet FilterChain importjavax servlet FilterConfig importjavax servlet ServletContext importjavax servlet ServletException importjavax servlet ServletRequest importjavax servlet ServletResponse importjava util Enumeration publicclassUpperCaseFilterimplementsFilter privateFilterConfigfilterConfig null publicvoiddestroy System out println Filterdestroyed this filterConfig null publicvoiddoFilter ServletRequestrequest ServletResponseresponse FilterChainchain throwsIOException ServletException System out println Filter Enumerationenum request getAttributeNames while enum hasMoreElements StringattributeName String enum nextElement StringattributeValue String request getAttribute attributeName request setAttribute attributeName attributeValue toUpperCase chain doFilter request response publicvoidinit FilterConfigfilterConfig throwsServletException System out println Filterinitialized this filterConfig filterConfig DoublyFilteredServlet importjavax servlet importjavax servlet http importjava io publicclassDoublyFilteredServletextendsHttpServlet publicvoiddoGet HttpServletRequestrequest HttpServletResponseresponse throwsServletException IOException response setContentType text html PrintWriterout response getWriter out println out println out println UserInputForm out println out println out println out println Pleaseenteryourdetails out println out println out println out println out println FirstName out println out println out println out println LastName out println out println out println out println UserName out println out println out println out println Password out println out println out println out println out println out println out println out println out println out println out println publicvoiddoPost HttpServletRequestrequest HttpServletResponseresponse throwsServletException IOException StringfirstName String request getAttribute firstName StringlastName String request getAttribute lastName StringuserName String request getAttribute userName Stringpassword request getParameter password response setContentType text html PrintWriterout response getWriter out println out println out println DisplayingValues out println out println out println out println Hereareyourdetails out println out println out println FirstName out println firstName out println out println out println LastName out println lastName out println out println out println UserName out println userName out println out println out println Password out println password out println out println out println out println 本例的部署描述符 TrimFilterTrimFilter UpperCaseFilterUpperCaseFilterTrimFilterDoublyFilteredServlet UpperCaseFilterDoublyFilteredServletDoublyFilteredServletDoublyFilteredServlet DoublyFilteredServlet运行结果 doPost 使用Eclipse编写Filter 总结 介绍了过滤器 是Servlet2 3规范中的新内容 使得在HTTP请求到达servlet之前 可以执行一些操作编写一个过滤器涉及三个接口 Filter FilterConfig和FilterChain 对于一个在特定资源上工作的过滤器 需要在部署表述符中声明该过滤器 方法是用元素 并且使用元素映射到相应的资源可以映射一个filter到一个servlet或者一个URL模式
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!