《2_第5章_Servlet_4.ppt》由会员分享,可在线阅读,更多相关《2_第5章_Servlet_4.ppt(43页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、L/O/G/O第第5章章 Servlet褚龙现褚龙现软件学院软件学院回顾回顾-CookievCookieCookie的常用用途:的常用用途:CookieCookie是站点是站点跟踪特定访问者访问的次数跟踪特定访问者访问的次数,最最后访问的时间后访问的时间以及以及访问者进入站点的路径访问者进入站点的路径;CookieCookie能够帮助站点能够帮助站点统计用户个人资料统计用户个人资料以实现以实现各种各样的个性化服务。各种各样的个性化服务。cookiecookie实现自动登录功能实现自动登录功能,使得用户不需要输,使得用户不需要输入用户名和密码就可以进入曾经浏览的站点。入用户名和密码就可以进入曾经
2、浏览的站点。软件学院软件学院回顾回顾-Servlet操作操作Cookiev向客户端写入向客户端写入Cookie的步骤的步骤创建创建CookieCookiec=newCookie(“name”,“value”);设置设置Cookie的属性的属性c.setMaxAge(60*60*24);c.setDomain(“”)c.setPath(“/”)调用调用response的的addCookie方法将其写入到客户端方法将其写入到客户端response.addCookie(c)软件学院软件学院回顾回顾-Servlet操作操作Cookiev读取读取Cookie的步骤的步骤从客户端读取所有能够被本服务器读取
3、的从客户端读取所有能够被本服务器读取的CookieCookiecookies=request.getCookies();从中找出需要的从中找出需要的Cookiefor(inti=0;icookies.length;i+)if(cookiesi.getName().equals(“wanted”)软件学院软件学院回顾回顾-回话机制回话机制请求中是否包请求中是否包含含session_id收到一个请求收到一个请求检索检索session_id获取会话对象获取会话对象分配分配session_id创建会话对象创建会话对象是是否否类似散列表的会话管理类似散列表的会话管理session_idobject*#M
4、atched idOld obj*#*#*#New idNew Obj发送携带发送携带session_id响应响应软件学院软件学院回顾回顾-回话追踪机制回话追踪机制v常用的会话常用的会话追踪机制追踪机制有:有:cookiesURL重写重写表单隐藏表单隐藏SSLSessions软件学院软件学院回顾回顾-回话管理机制回话管理机制v创建会话创建会话HttpServletRequestHttpServletRequest的的getSessiongetSession()()方法方法 若有会话则返回当前会话,没有则创建新会话若有会话则返回当前会话,没有则创建新会话调用调用getSession(truege
5、tSession(true)执行同样的功能执行同样的功能调用调用getSession(falsegetSession(false)访问一个现有的会话、而访问一个现有的会话、而不是新创建一个会话,如果没有合法的会话则返不是新创建一个会话,如果没有合法的会话则返回回nullnullHttpSessionsession=request.getSession(true)软件学院软件学院回顾回顾=回话管理机制回话管理机制v存储和访问会话属性存储和访问会话属性标标准准会会话话属属性性包包括括会会话话标标识识符符、数数据据、创创建建时时间间、上次访问时间等,都以上次访问时间等,都以“名名-值值”对形式保存对
6、形式保存HttpSessionHttpSession提提供供了了一一种种把把对对象象存存储储到到内内存存、在在同一用户的后继请求中提取这些对象的标准办法同一用户的后继请求中提取这些对象的标准办法在会话中保存数据的方法在会话中保存数据的方法 setAttribute(Strings,Objecto)从会话提取原来所保存对象的方法从会话提取原来所保存对象的方法getAttribute(Strings)软件学院软件学院回顾回顾-回话管理机制回话管理机制v关闭会话关闭会话显式关闭显式关闭 HttpSession.invalidate()隐式关闭隐式关闭-会话超时会话超时(等待超时自动操作等待超时自动操
7、作)默认默认的超时时间间隔是的超时时间间隔是18001800秒秒无效之前,可以使用无效之前,可以使用setInactiveInterval(intsetInactiveInterval(int seconds)seconds)方法方法在客户请求之间控制这个时间间隔。在客户请求之间控制这个时间间隔。设置设置负值负值可以确保会话永远不会超时可以确保会话永远不会超时软件学院软件学院 过滤器的功能和特点器的功能和特点 过滤器的器的实现12教教 学学 内内 容容软件学院软件学院教教教教 学学学学 目目目目 标标标标难点点 理解理解过滤器的基本概念器的基本概念重重点点 理解理解过滤器的功能和生命周期器的功
8、能和生命周期 掌握掌握过滤器器实现 过滤器生命周期器生命周期过滤器器实现软件学院软件学院教教教教学学学学具具具具体体体体内内内内容容容容v过滤器概念过滤器概念v过滤器的功能过滤器的功能v过滤器接口过滤器接口v过滤器生命周期过滤器生命周期v过滤器应用示例过滤器应用示例软件学院软件学院5.8 过滤器过滤器vServletServlet过滤器是在过滤器是在JavaJavaServletServlet规范规范2.32.3中定义的,中定义的,它能够它能够对对ServletServlet容器的请求和响应对象进行检查和容器的请求和响应对象进行检查和修改修改vServletServlet过滤器本身并不产生请求
9、和响应对象,它只过滤器本身并不产生请求和响应对象,它只能提供过滤作用。能提供过滤作用。ServletServlet过滤能够在过滤能够在ServletServlet被调被调用之前检查用之前检查RequestRequest对象,修改对象,修改RequestHeaderRequestHeader和和RequestRequest内容;在内容;在ServletServlet被调用之后检查被调用之后检查ResponseResponse对象,修改对象,修改ResponseHeaderResponseHeader和和ResponseResponse内容内容vServletServlet过滤负责过滤的过滤负责过
10、滤的WebWeb组件可以是组件可以是ServletServlet、JSPJSP或者或者HTMLHTML文件,即动态或静态的文件,即动态或静态的webweb资源资源软件学院软件学院5.8 过滤器过滤器v过滤器过滤器处在客户端与所请求的资源(处在客户端与所请求的资源(处在客户端与所请求的资源(处在客户端与所请求的资源(ServletServletServletServlet或或或或JSPJSPJSPJSP)之间)之间)之间)之间,过滤器不能独立执行,总要依附在所过滤器不能独立执行,总要依附在所请求的资源上才能执行请求的资源上才能执行v过滤器可以对经过过滤器的请求和响应数据进行过滤器可以对经过过滤器
11、的请求和响应数据进行处理,实现处理,实现WebWeb应用中的一些非功能性需求应用中的一些非功能性需求客户端客户端Servlet或或JSP过过滤滤器器软件学院软件学院5.8.1 过滤器的特点过滤器的特点vServletServlet过滤器可以过滤器可以检查和修改检查和修改ServletRequestServletRequest和和ServletResponseServletResponse对象对象vServletServlet过滤器可以被指定和特定的过滤器可以被指定和特定的URLURL关联,只有关联,只有当客户请求访问该当客户请求访问该URLURL时,才会触发过滤器时,才会触发过滤器vServl
12、etServlet过滤器可以被串联在一起,形成管道效应,过滤器可以被串联在一起,形成管道效应,协同修改请求和响应对象协同修改请求和响应对象(过滤器链)(过滤器链)软件学院软件学院5.8.2 过滤器的作用过滤器的作用v查询请求并作出相应的行动。查询请求并作出相应的行动。v阻塞请求阻塞请求-响应对,使其不能进一步传递。响应对,使其不能进一步传递。v修改请求的头部和数据。用户可以提供自定义修改请求的头部和数据。用户可以提供自定义的请求。的请求。v修改响应的头部和数据。用户可以通过提供定修改响应的头部和数据。用户可以通过提供定制的响应版本实现。制的响应版本实现。v与外部资源进行交互。与外部资源进行交互
13、。软件学院软件学院5.8.3 过滤器的适用场景过滤器的适用场景v认证过滤认证过滤v登录和审核过滤登录和审核过滤v图像转换过滤图像转换过滤 v数据压缩过滤数据压缩过滤 v加密过滤加密过滤 v资源访问触发事件过滤资源访问触发事件过滤 vXSLTXSLT过滤过滤 软件学院软件学院5.8.4 过滤器的实现过滤器的实现v建立一个过滤器涉及下列五个步骤:建立一个过滤器涉及下列五个步骤:1 1)建立一个实现)建立一个实现FilterFilter接口的类。接口的类。2 2)在)在doFilterdoFilter方法中实现过滤行为。方法中实现过滤行为。3 3)调用)调用FilterChainFilterChai
14、n对象的对象的doFilterdoFilter方法。方法。4 4)对相应的)对相应的servletservlet和和JSPJSP页面注册过滤器。页面注册过滤器。5 5)禁用激活器)禁用激活器servletservlet。软件学院软件学院1 1)建立一个实现)建立一个实现FilterFilter接口的类接口的类vServletServlet过滤器类必须实现过滤器类必须实现javax.servlet.Filterjavax.servlet.Filterv这个接口含有这个接口含有3 3个过滤器类必须实现的方法:个过滤器类必须实现的方法:init()doFilter()destroy()软件学院软件学
15、院1 1)建立一个实现)建立一个实现FilterFilter接口的类接口的类vpublicvoidinit(FilterConfigconfig)thowsServletExceptionvinitinit方法只在此过滤器第一次初始化时执行,不是每次调用方法只在此过滤器第一次初始化时执行,不是每次调用过滤器都执行它过滤器都执行它v简单过滤器可提供此方法的空体,两种情况使用简单过滤器可提供此方法的空体,两种情况使用initinitFilterConfigFilterConfig对象提供对对象提供对servletservlet环境及环境及web.xmlweb.xml文件中指文件中指派的过滤器名的访
16、问。利用派的过滤器名的访问。利用initinit将将FilterConfigFilterConfig对象存放对象存放在一个字段中,以便在一个字段中,以便doFilterdoFilter方法能够访问方法能够访问servletservlet环境环境或过滤器名。或过滤器名。FilterConfigFilterConfig对象具有一个对象具有一个getInitParametergetInitParameter方法,它能方法,它能够访问部署描述符文件(够访问部署描述符文件(web.xmlweb.xml)中分配的过滤器)中分配的过滤器初始初始化参数化参数。软件学院软件学院1 1)建立一个实现)建立一个实现
17、FilterFilter接口的类接口的类vpublicvoiddoFilter(ServletRequsetrequest,ServletResponseresponse,FilterChainchain)thowsServletException,IOExceptionv第一个参数为与传入请求有关的第一个参数为与传入请求有关的ServletRequestServletRequest。对于。对于简单的过滤器,大多数过滤逻辑是基于这个对象的。如简单的过滤器,大多数过滤逻辑是基于这个对象的。如果处理果处理HTTPHTTP请求,并且需要访问诸如请求,并且需要访问诸如getHeadergetHeade
18、r或或getCookiesgetCookies等在等在ServletRequestServletRequest中无法得到的方法,就中无法得到的方法,就要把此对象构造成要把此对象构造成HttpServletRequestHttpServletRequest。软件学院软件学院1 1)建立一个实现)建立一个实现FilterFilter接口的类接口的类v第二个参数为第二个参数为ServletResponseServletResponse。如果完全阻塞对相关。如果完全阻塞对相关servletservlet或或JSPJSP的访问。可调用的访问。可调用response.getWriterresponse.g
19、etWriter并直接并直接发送一个响应到客户机。如果希望修改相关发送一个响应到客户机。如果希望修改相关servletservlet或或JSPJSP的输出,可把响应包含在一个收集所有发送到它的输出对的输出,可把响应包含在一个收集所有发送到它的输出对象中。然后在调用象中。然后在调用serlvetserlvet或或JSPJSP页面后,过滤器可检查输页面后,过滤器可检查输出,如果合适就修改它,之后发送到客户机出,如果合适就修改它,之后发送到客户机v最后一个参数最后一个参数FilterChainFilterChain对象。对此对象调用以激活与对象。对此对象调用以激活与servletservlet或或J
20、SPJSP相关的下一个过滤器。如果没有另一个相关相关的下一个过滤器。如果没有另一个相关的过滤器,则对的过滤器,则对doFilterdoFilter的调用激活的调用激活servletservlet或或JSPJSP本身本身软件学院软件学院2 2)在)在doFilterdoFilter方法中实现过滤行为方法中实现过滤行为vdoFilterdoFilter方法为大多数过滤器的关键部分。方法为大多数过滤器的关键部分。每当每当调用一个过滤器时,都要执行调用一个过滤器时,都要执行doFilterdoFilter。对于大对于大多数过滤器来说,多数过滤器来说,doFilterdoFilter执行的步骤是基于传执
21、行的步骤是基于传入信息的。因此,可能要利用作为入信息的。因此,可能要利用作为doFilterdoFilter的第的第一个参数提供的一个参数提供的ServletRequestServletRequest。这个对象常常。这个对象常常构造为构造为HttpServletRequestHttpServletRequest类型,以提供对该类类型,以提供对该类的更特殊方法的访问。的更特殊方法的访问。软件学院软件学院3 3)调用)调用FilterChainFilterChain对象的对象的doFilterdoFilter方法方法vFilterFilter接口的接口的doFilterdoFilter方法在调用方
22、法在调用FilterChainFilterChain对象的对象的doFilterdoFilter方法时,激活下一个相关的过滤器。这个过程一方法时,激活下一个相关的过滤器。这个过程一般持续到链中最后一个过滤器为止。在最后一个过滤器调般持续到链中最后一个过滤器为止。在最后一个过滤器调用其用其FilterChainFilterChain对象的对象的doFilterdoFilter方法时,激活方法时,激活servletservlet或或页面自身。页面自身。v链中的任意过滤器都可以通过不调用其链中的任意过滤器都可以通过不调用其FilterChainFilterChain的的doFilterdoFilte
23、r方法中断这个过程。在这样的情况下,不再调用方法中断这个过程。在这样的情况下,不再调用JSPJSP页面的页面的serlvetserlvet,并且中断此调用过程的过滤器负责将,并且中断此调用过程的过滤器负责将输出提供给客户机。输出提供给客户机。软件学院软件学院4 4)对相应的)对相应的servletservlet和和JSPJSP页面注册过滤器页面注册过滤器v部署描述符文件的部署描述符文件的2.32.3版本引入了两个用于过滤版本引入了两个用于过滤器的元素,分别是器的元素,分别是:filter和和filter-mapping。vFilter元素向系统注册一个过滤对象元素向系统注册一个过滤对象vfil
24、ter-mapping元素指定该过滤对象所应用的元素指定该过滤对象所应用的URL 软件学院软件学院4 4)对相应的)对相应的servletservlet和和JSPJSP页面注册过滤器页面注册过滤器filterfilter元素位于元素位于web.xmlweb.xml的前部,所有的前部,所有filter-mappingfilter-mapping、servletservlet元素之前。元素之前。filterfilter元素具有六个可能的子元素:元素具有六个可能的子元素:可选,它声明可选,它声明IDE能够使用的一个图象文件能够使用的一个图象文件必需元素,给过滤器分配一个选定的名字必需元素,给过滤器分
25、配一个选定的名字可选,给出可选,给出IDE使用的短名称使用的短名称description:可选,给出:可选,给出IDE的信息,提供文本文档的信息,提供文本文档必需元素,指定过滤器实现类的完全限定名必需元素,指定过滤器实现类的完全限定名可选,利用可选,利用FilterConfig的的getInitParameter方方法读取的初始化参数。可包含多个法读取的初始化参数。可包含多个init-param元素元素软件学院软件学院4 4)对相应的)对相应的servletservlet和和JSPJSP页面注册过滤器页面注册过滤器v过滤是在过滤是在serlvet规范规范2.3版中初次引入的。版中初次引入的。w
26、eb.xml文文件必须使用件必须使用DTD的的2.3版本版本MyFiltermyPackage.FilterClass.软件学院软件学院4 4)对相应的)对相应的servletservlet和和JSPJSP页面注册过滤器页面注册过滤器vfilter-mapping元素位于元素位于web.xml文件中文件中filter元素之后元素之后serlvet元素之前。它包含三个可能的子元素元素之前。它包含三个可能的子元素必需元素,必须与用必需元素,必须与用filter元素声明时给予过滤元素声明时给予过滤器的名称相匹配器的名称相匹配必需元素,此元素声明一个以斜杠(必需元素,此元素声明一个以斜杠(/)开始的)
27、开始的模式,它指定过滤器应用的模式,它指定过滤器应用的URL。必须提供必须提供url-pattern或或servlet-name。但不能对单个。但不能对单个filter-mapping元素提供多个元素提供多个url-pattern元元素。如果过滤器适用于多个模式,可重复整个素。如果过滤器适用于多个模式,可重复整个filter-mapping元素元素此名称必须与利用此名称必须与利用servlet元素给予元素给予servlet名称名称相匹配。相匹配。不能给单个不能给单个filter-mapping元素提供多个元素提供多个servlet-name元素。元素。如果过滤器适合于多个如果过滤器适合于多个s
28、ervlet名,可重复这个名,可重复这个filter-mapping元素元素软件学院软件学院4 4)对相应的)对相应的servletservlet和和JSPJSP页面注册过滤器页面注册过滤器MyFiltermyPackage.FilterClassMyFilter/someDir/MyServlet软件学院软件学院5 5)禁用激活器)禁用激活器servletservletv在对资源应用过滤器时,可通过指定要应用过滤在对资源应用过滤器时,可通过指定要应用过滤器的器的URLURL模式或模式或servletservlet名来完成。名来完成。v如果提供如果提供servletservlet名,则此名称必
29、须与名,则此名称必须与web.xmlweb.xml的的servletservlet元素中给出的名称相匹配。元素中给出的名称相匹配。v如果使用应用到一个如果使用应用到一个serlvetserlvet的的URLURL模式,则此模模式,则此模式必须与利用式必须与利用web.xmlweb.xml的元素的元素servletservlet-mapping-mapping指指定的模式相匹配。定的模式相匹配。v防止用户利用缺省防止用户利用缺省servletservletURLURL绕过过滤器设置绕过过滤器设置 软件学院软件学院5 5)禁用激活器)禁用激活器servletservletv指定指定servlet名
30、过滤名过滤v利用利用filter和和filter-mapping指示名为指示名为SomeFilter的过滤的过滤器应用到名为器应用到名为SomeServlet的的servletSomeFiltersPackage.SFilterClassSomeFilterSomeServlet软件学院软件学院5 5)禁用激活器)禁用激活器servletservletv指定指定servlet的的URL模式过滤模式过滤v用用servlet和和servlet-mapping运行运行URLhttp:/host/webAppPrefix/Blah调用调用SomeSerlvetSomeFiltersPackage.SF
31、ilterClassSomeFilter/Blah软件学院软件学院5.8.5 过滤器生命周期器生命周期-对请求求的的过滤A AServletServlet容器创建一个过滤器实例容器创建一个过滤器实例B B过滤器实例调用过滤器实例调用initinit方法,读取过滤器初始化参数方法,读取过滤器初始化参数C C过滤器实例调用过滤器实例调用doFilterdoFilter方法,根据初始化参数的方法,根据初始化参数的 值判断该请求是否合法值判断该请求是否合法D D如果该请求不合法则阻塞该请求如果该请求不合法则阻塞该请求E E如果该请求合法则调用如果该请求合法则调用chain.doFilterchain.
32、doFilter方法将该请方法将该请 求向后续传递求向后续传递 软件学院软件学院5.8.5 过滤器生命周期器生命周期-对响响应的的过滤A A过滤器截获客户端的请求过滤器截获客户端的请求B B重新封装重新封装ServletResponseServletResponse,在封装后的,在封装后的ServletResponseServletResponse中中 提供用户自定义的输出流提供用户自定义的输出流C C将请求向后续传递将请求向后续传递D DWebWeb组件产生响应组件产生响应E E从封装后的从封装后的ServletResponseServletResponse中获取用户自定义的输出流中获取用户
33、自定义的输出流F F将响应内容通过用户自定义的输出流写入到缓冲流将响应内容通过用户自定义的输出流写入到缓冲流G G在缓冲流中修改响应的内容后清空缓冲流,输出响应内容在缓冲流中修改响应的内容后清空缓冲流,输出响应内容软件学院软件学院5.8.6 过滤器使用注意事器使用注意事项A A由于由于FilterFilter、FilterConfigFilterConfig、FilterChainFilterChain都是都是位于位于javax.servletjavax.servlet包下,并非包下,并非HTTPHTTP包所特有的,包所特有的,所以其中所用到的请求、响应对象所以其中所用到的请求、响应对象Ser
34、vletRequestServletRequest、ServletResponseServletResponse在使用前都必在使用前都必须先转换成须先转换成HttpServletRequestHttpServletRequest、HttpServletResponseHttpServletResponse再进行下一步操作。再进行下一步操作。B B在在web.xmlweb.xml中配置中配置ServletServlet和和ServletServlet过滤器,应过滤器,应该先声明过滤器元素,再声明该先声明过滤器元素,再声明ServletServlet元素元素软件学院软件学院5.8.7 过滤器示例器
35、示例-解决中文乱解决中文乱码vServlet对中文支持不好对中文支持不好(数据库存储数据库存储)提交提交软件学院软件学院5.8.7 过滤器示例器示例-解决中文乱解决中文乱码vServlet中转码方法:中转码方法:Stringname=request.getParameter(param_name);name=newString(name.getBytes(ISO8859_1);缺点缺点:1.从从request中取出的每个中取出的每个中文变量都要转换。中文变量都要转换。2.不能动态的改变编码。不能动态的改变编码。软件学院软件学院publicclassMyFilterimplementsFilte
36、rprivateStringtarEncoding=gb2312;protectedFilterConfigfilterConfig;publicvoidinit(FilterConfigconfig)throwsServletExceptionthis.filterConfig=config;this.tarEncoding=config.getInitParameter(encoding);publicvoiddoFilter(ServletRequestsrequest,ServletResponsesresponse,FilterChainchain)throwsIOException
37、,ServletException/过滤处理过滤处理publicvoiddestroy()this.filterConfig=null;过滤器方法过滤器方法软件学院软件学院v过滤处理代码:过滤处理代码:publicvoiddoFilter(ServletRequestsrequest,ServletResponsesresponse,FilterChainchain)throwsIOException,ServletExceptionHttpServletRequestrequest=(HttpServletRequest)srequest;HttpServletResponserespons
38、e=(HttpServletResponse)sresponse;/把请求用指定的方式编码把请求用指定的方式编码request.setCharacterEncoding(targetEncoding);/把响应用指定的方式编码把响应用指定的方式编码response.setCharacterEncoding(targetEncoding);/把处理发送到下一个过滤器把处理发送到下一个过滤器chain.doFilter(srequest,sresponse);软件学院软件学院v过滤器部署描述:过滤器部署描述:.chu.MyFilterencodinggb2312encod/*软件学院软件学院5.8
39、.7 过滤器示例器示例-解决中文乱解决中文乱码v过滤器只能解决过滤器只能解决PostPost提交的中文乱码问题提交的中文乱码问题vGetGet提交中文乱码解决方法:提交中文乱码解决方法:打开打开 confconf目录下目录下server.xmlserver.xml文文件,找到对件,找到对80808080端口进行服务的端口进行服务的ConnectorConnector组组件的设置部分,给这个组件添加一个属性:件的设置部分,给这个组件添加一个属性:URIEncodingURIEncoding=GBK=GBK 软件学院软件学院小小 结v过滤器的基本概念过滤器的基本概念v过滤器的特点过滤器的特点v过滤器的应用场景过滤器的应用场景v创建过滤器的基本步骤创建过滤器的基本步骤v过滤器的生命周期过滤器的生命周期v过滤器过滤请求信息过滤器过滤请求信息v过滤器过滤响应信息过滤器过滤响应信息v过滤器应用实例过滤器应用实例L/O/G/O下次课程内容下次课程内容Request Dispatcher与与ServletContext