Servlet过滤器Servlet程序主要分3类:标准Servlet监听器过滤器实现步骤类似:创建相应的类配置web.xml过滤器也是Web应用程序的组件,但与其它Web应用程序组件不同的是,过滤器处在客户端与所请求的资源(Servlet或JSP)之间,过滤器不能独立执行,总要依附在所请求的资源上才能执行。过滤器可以对经过过滤器的请求和响应数据进行处理,实现Web应用中的一些非功能性需求。客户端Servlet或JSP过滤器如果有需要,在一个Web应用中,可以部署多个过滤器,这些过滤器可以组成一个链(过滤链)来执行多个操作或检查。只有当客户端的请求通过这个过滤链的检查后,才能将请求发送到目标组件,如果请求不能通过过滤链中的某一个过滤器那么请求就会被阻止。过滤器的示例禁止未授权的IP请求服务器上的资源。客户端试图请求suc.jsp,过滤器根据客户端IP地址进行过滤:是禁止的IP,请求被拒绝,转至出错页面error.jsp合法的IP,可以得到请求的资源suc.jsp配置过滤器配置过滤器名称和类,以及初始化参数filterfilter-nameFilterIP/filter-namefilter-classfilter.FilterIP/filter-classinit-paramparam-nameFilteredIP/param-nameparam-value127.0.0.1/param-value/init-param/filter过滤器的映射配置:过滤器对url-pattern指明的资源起作用。filter-mappingfilter-nameFilterIP/filter-nameurl-pattern/*/url-pattern/filter-mappingFilter接口自定义的过滤器类需要实现Filter接口(javax.servlet.Filter),其中包含3个方法:voidinit(FilterConfigfilterConfig)throwsServletException:初始化方法,利用参数filterConfig可以从配置文件读取初始化参数voiddestroy()核心方法voiddoFilter(ServletRequestrequest,ServletResponseresponse,FilterChainchain)throwsIOException,ServletException:最重要的方法,进行过滤处理逻辑的方法转码过滤器编写过滤器EncodingFilter,解决提交表单参数时的中文乱码问题。配置过滤器,通过初始化参数设置表单参数传输过程中的编码方式课内实验:自行动手实现转码过滤器过滤器链1个web组件可以有多个过滤器,它们按照web.xml中配置的先后顺序形成过滤器链,客户端请求的web组件需要通过链上的每一个过滤器的过滤。通过过滤器的顺序取决于在web.xml中对filter的配置的顺序。示例使用过滤器验证用户身份,通过验证的用户可以访问suc.jsp,否则回到登陆页index.jsp。2重验证:IP是否合法是否已经以合法身份登陆过index.jspresult.jspsuc.jsp提交成功失败所有页都要通过IPFilter的过滤……suc.jsp及其它需要通过身份验证的页还需要通过LoginFilter的过滤对suc.jsp而言,需要通过如下的过滤器链才可以访问到:客户端IPFilterLoginFiltersuc.jspLoginFilter:主要是拦截那些未经过登陆就试图直接访问suc.jsp的请求(即未经过index.jsp页上的登陆就直接请求suc.jsp,将被拦截)如果是登陆时帐户信息出错,将被result.jsp处理,而不是由LoginFilter拦截。web.xmlIPFilter的配置在前,LoginFilter的配置在后filterfilter-nameIPFilter/filter-namefilter-classfilter.IPFilter/filter-classinit-paramparam-namefilteredIP/param-nameparam-value/param-value/init-param/filterfilter-mappingfilter-nameIPFilter/filter-nameurl-pattern/*/url-pattern/filter-mappingfilterfilter-nameLoginFilter/filter-namefilter-classfilter.LoginFilter/filter-class/filterfilter-mappingfilter-nameLoginFilter/filter-nameurl-pattern/suc.jsp/url-pattern/filter-mapping!--1个filter可以配置多个filter-mappingfilter-mappingfilter-nameLoginFilter/filter-nameurl-pattern/……/url-pattern/filter-mapping--Filter实验用过滤器过滤用户名,若用户名中含“鬼”的字样,则阻止该用户发表留言,否则可以发表留言。index.jspshow.jspNameFilter表单提交NameFilter:从请求中获取用户名若用户名中含“鬼”的字样,则返回error.jsp否则,认为是合法用户,继续处理,可以到show.jsp【注】提交的压缩包按“090?-姓名-实验11”命名