《第16章 过滤器.ppt》由会员分享,可在线阅读,更多相关《第16章 过滤器.ppt(21页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、清华大学出版社清华大学出版社 JavaEE基础教程基础教程 第第1616章章 过滤器过滤器16.1 Servlet过滤器简介过滤器简介16.2 Servlet过滤器体系结构过滤器体系结构16.3 Servlet过滤器的实现过滤器的实现16.4 中文乱码问题中文乱码问题16.1 Servlet过滤器器简介介返回 Servlet过滤器能器能够对Servlet容器的容器的请求和响求和响应对象象进行行检查和修改。和修改。Servlet过滤器本器本身并不生成身并不生成请求和响求和响应对象,它只提供象,它只提供过滤作用。作用。Servlet过滤器能器能够在在调用用请求的求的Servlet之前之前检查Req
2、uest对象,修改象,修改Request Header和和Request对象本身的内象本身的内容;在容;在Servlet被被调用之后用之后检查Response对象,修改象,修改Response Header和和Response内容。内容。Servlet过滤器可以器可以过滤的的资源可以是源可以是Servlet、JSP和和HTML。Servlet过滤器的工作器的工作过程如程如图16-1所示。所示。2022/12/272 2Java EEJava EE基础教程基础教程vServlet过滤器能器能够对Servlet容器的容器的请求和响求和响应对象象进行行检查和修改。和修改。Servlet过滤器本身并不
3、生成器本身并不生成请求和响求和响应对象,它只提供象,它只提供过滤作用。作用。vServlet过滤器能器能够:在在调用用请求的求的Servlet之前之前检查Request对象,修象,修改改Request Header和和Request对象本身的内容;象本身的内容;在在Servlet被被调用之后用之后检查Response对象,修改象,修改Response Header和和Response内容。内容。vServlet过滤器可以器可以过滤的的资源可以是源可以是Servlet、JSP和和HTML。Servlet过滤器的工作器的工作过程如程如图16-1所示。所示。16.1 Servlet过滤器器简介介20
4、22/12/273 3Java EEJava EE基础教程基础教程Servlet过滤器的工作过程Web客户端Servlet过滤器链ServletJSP页面HTML页面客户请求响应响应客户请求2022/12/274 4Java EEJava EE基础教程基础教程v过滤器主要有以下作用:以常规的方式调用资源;在调用Servlet之前修改请求信息;在调用Servlet之后修改响应信息阻止资源调用,转到其它资源,返回一个特定的状态码或生成替换输出。16.1 Servlet过滤器器简介介2022/12/275 5Java EEJava EE基础教程基础教程v过滤器主要有以下几方面应用:v权限检查:根据请
5、求过滤非法用户;v记录日志:记录指定的日志信息;v解码:对非标准的请求解码;v解析XML:和XSLT结合生成HTML;v设置字符集:解决中文乱码问题。16.1 Servlet过滤器器简介介2022/12/276 6Java EEJava EE基础教程基础教程vServlet过滤器用于拦截传入的请求和传出的响应,并监视、修改正通过的数据流。v过滤器是自包含的组件,可以在不影响web应用程序的情况下添加或删除他们。一个过滤器可以被关联任意多个资源,一个资源也可以被关联到任意多个过滤器,web资源和过滤器的关系如图16-2所示。16.2 Servlet过滤器体系器体系结构构F1F2F3S1S2S3返
6、回2022/12/277 7Java EEJava EE基础教程基础教程16.3 Servlet过滤器的器的实现v16.3.1 编写写实现类v16.3.2 过滤器的配置器的配置返回2022/12/278 8Java EEJava EE基础教程基础教程v过滤器必须实现javax.servlet.Filter接口,这一接口声明了如下三个方法:init()、doFilter()和destroy()。它们作用如下vInit(FilterConfigconfig):这个方法是由容器调用进行初始化,它是在第一次访问时被执行的,并且只执行一次。通过这个方法可以获取在web.xml文件中指定的初始化参数。vd
7、oFilter(ServletRequest,ServletResponse,FilterChain):过滤器的自定义行为主要在这里完成,其中参数FilterChain对象提供了后续过滤器所要调用的信息。vdestroy():在停止使用过滤器前,由容器调用过滤器的这个方法,完成必要的清除和释放资源的工作。16.3 Servlet过滤器的器的实现2022/12/279 9Java EEJava EE基础教程基础教程v下面以一个示例来说明如何创建过滤器。在线考试系统中经常有这样的需求,只有在指定范围的IP地址才可以登录考试,而不在此范围的IP地址则拒绝登录。为此我们可将起始IP地址和终止IP地址写
8、在web.xml配置文件中,在过滤中读取这些配置信息。当有客户请求资源时,首先获取客户的IP地址,并将客户的IP与读取配置文件的IP地址作比较,如果客户IP在有效范围内,则允许登录,否则拒绝登录。v程序清单:ch16FilterIP.java16.3.1 编写写实现类2022/12/271 10 0Java EEJava EE基础教程基础教程v在web.xml中要对过滤器进行配置,配置代码如下:vvfilterIpvch16.FilterIpvvstartIpv192.168.0.1vvvendIpv192.168.0.3vvvvfilterIpv/*v16.3.2 过滤器的配置器的配置202
9、2/12/271 11 1Java EEJava EE基础教程基础教程v在上面的配置中,元素配置了过滤IP地址的过滤器,过滤器的名字是filterIp,实现类的完整类名是ch16.FilterIp,其中的子元素定义了两个初始化参数starpIp和endIp,分别表示IP的起始地址和终止地址;元素定义了filterIP过滤器对哪些资源的访问进行过滤,这里设置为/*,表示对所有资源都要过滤。在ch16文件夹下建立三个JSP文件:index.jsp、success.jsp和error.jsp。当我们访问Web服务下的任何一个资源,这个过滤器都会起作用,如我们在地址栏中输入如下网址:vhttp:/lo
10、calhost:8080/javaEE/ch16/index.jsp16.3.2 过滤器的配置器的配置2022/12/271 12 2Java EEJava EE基础教程基础教程v16.4.1 JSP页面中文乱面中文乱码问题v16.4.2 表表单提交乱提交乱码问题16.4 中文乱中文乱码问题返回2022/12/271 13 3Java EEJava EE基础教程基础教程v由于Java语言内部采用UNICODE编码,所以 在 程 序 运 行 时,就 存 在 着 一 个 从UNICODE编码和对应操作系统及浏览器支持的编码格式转换输入、输出的问题。在这个转换过程中有一系列的步骤,如果其中任何一步出
11、错,则输出就会出现乱码。这就是常见的中文乱码问题。在Web开发中遇到的中文编码问题主要有JSP页面显示、表单提交和数据库应用等。16.4 中文乱中文乱码问题返回2022/12/271 14 4Java EEJava EE基础教程基础教程16.4.1 JSP页面中文乱面中文乱码问题v在JSP页面中输出中文时乱码,这是因为没有指定JSP文件的响应结果MIME类型。JSP页面缺省的字符编码是ISO-8859-1,这个字符集不能包含中文字符。解决办法是在JSP页面中通过page指令指定响应结果的MIME类型,即在JSP文件第一行添加如下代码:vv此命令表示响应类型为text/html,编码字符集为gb
12、k。这样在JSP页面上的中文就不会出现乱码了。2022/12/271 15 5Java EEJava EE基础教程基础教程v在JSP页面中提交表单时(用POST或GET方法),使用request.getParameter()方法获取表单控件值时出现乱码。出现这种现象的原因是因为在TOMCAT中处理参数时,采用缺省的字符集为ISO-8859-1,而这个字符集是不包含中文的,所以出现乱码。在TOMCAT中由于对POST方法和GET方法提交数据处理方式不同,因此解决中文乱码方法也不相同。16.4.2 表表单提交乱提交乱码问题2022/12/271 16 6Java EEJava EE基础教程基础教程
13、v在网上书店的程序设计过程中,我们对提交数据中文乱码的解决方法是,首先获取字符串的字节码,然后再转换为相应的字符编码,命令为vnewString(s.getBytes(“ISO-8859-1”),“GBK”);/s为要转换的字符串变量v这个方法有一个缺点:同样的代码分布在大部分的JSP页面中和Servlet里,这显然不符合面向对象设计的基本思想,如何解决这个问题呢?16.4.2 表表单提交乱提交乱码问题2022/12/271 17 7Java EEJava EE基础教程基础教程v对于GET方法提交的表单,要在TOMCAT的HOME主目录中的CONF目录下的server.xml中进行配置。在co
14、nf目录下的server.xml文件中,找到对8080端口进行服务的Connector组件的设置部分,给这个Connector组件添加一个属性:URIEncoding=“GBK”。修改后的Connector组件的设置代码如下:vv这样修改后,重启TOMCAT服务器可以正确处理GET访求提交的请求数据了。16.4.2 表表单提交乱提交乱码问题2022/12/271 18 8Java EEJava EE基础教程基础教程v对POST方法提交的表单数据可以通过编写过滤器的方法解决,过滤器在用户提交的数据被处理之前被调用,可以在这里改变请求参数的编码方式。我们只要在过滤器中设置一个命令:vrequest
15、.setCharacterEncoding(gbk);v这个命令可以解决POST请求字符串带来的字符乱码问题。具体实现步骤为:v创建过滤器;v配置过滤器。v程序清单:SetCharacterEncodingFilter.java16.4.2 表表单提交乱提交乱码问题2022/12/271 19 9Java EEJava EE基础教程基础教程v在配置文件中定义了一个encoding参数,其值为GBK,过滤器中就是根据这个参数设置的字符集。这样做的好处是更改字符集时不需要更改源程序,只需修改配置文件即可。在过滤器中添加了这个设置以后,会对所有的请求资源进行字符转换,程序中不再需要将ISO-8859-1字符转换为GBK了,可以将程序中的所有newString(s.getBytes(ISO-8859-1),GBK)语句去掉。16.4.2 表表单提交乱提交乱码问题2022/12/272 20 0Java EEJava EE基础教程基础教程清华大学出版社清华大学出版社
限制150内