JavaWeb 第五章 任务2 使用过滤器解决中文乱码问题

使用过滤器解决中文乱码问题

关键步骤如下

  • 建立实现 Filtr 接口
  • 编写实现过滤的方法、
  • 在 web.xml 文件中配置过滤器

5.2.1   认识过滤器组件

      在之前的 JSP 中,为了解决乱码的显示,都是采用对页面进行重新编码的方式。当

一个Web 项目中有很多页面都需要进行显示控制时,使用过滤器则可以极大地提高控制

效果,同时也降低了开发成本,提高了工作效率。

        1.过滤器简介

         (1)过滤器

        过滤器是向 Web  应用程序的请求和响应添加过滤功能的组件。它看在原始数据

与目标之间进行过滤,就像一个水处理装置,可以将水源中的杂质、污垢过滤掉,输出

符合要求的净水。

         对于 Web 应用程序而言,过滤器能够实现对客户端与目标资源之间交互信息的

筛选和过滤,最终保留有效的数据信息。其运行原理如图 5.5 所示。

         过滤器的工作原理,包括以下几个步骤。

  • 用户访问 web 资源时,发送的请求会先经过过滤器。
  • 由过滤器对请求数据进行过滤处理。
  • 经过过滤的请求数据被发送至目标资源进行处理。
  • 目标资源处理后的响应被发送到过滤器。
  • 经过过滤器的处理后,将响应返回给客户端。

        (2)  过滤器链

     可以在 Web 应用中部署多个过滤器,每一个过滤器具有特定的操作和功能,这些

过滤器组合在一起成为过滤器链。在请求资源时,过滤器链中的过滤器将会依次对请求

进行处理,并逐一将请求向下传递,直到最总的 Web 资源。同理,在返回响应时,也

会通过过滤器链逐一进行处理,并最终返回给客户端。

       如果在 Web 应用中存在过滤器链,那么配置文件中也会存在相应的多个配置,在

执行时,按照配置文件中过滤器的顺序,逐一进行过滤。

     (3)过滤器的应用场合

     在实际应用开发中,过滤器主要用于以下场合。

  • 对请求和响应进行统一处理。
  • 对请求进行日志记录和审核。
  • 对数据进行屏蔽和替换。
  • 对数据进行加密和解密。

 2.过滤器的生命周期

     与 Servlet 一样,过滤器也存在生命周期,也包含相应的方法。

     1)实例化。 访问 Web 资源之前, Web 容器负责创建过滤器的实列来完成过滤器的

实例化的工作,并且实例化操作仅需做一次。

     2)初始化。在进行过滤工作前会调用  init() 方法来实现初始化操作。 注意,初始化

操作也仅执行一次。

     3)执行过滤。执行过滤操作,就是调用 doFilter() 方法来实现过滤器的特定功能,可

以对请求和响应分别进行处理。在过滤器的有效期内,doFilter() 方法可以被反复地调用。

     4)销毁。 与 Servlet 相同,销毁过滤器也需要由 Web 容器调用其 destroy() 方法,

通过调用 destory() 方法实现将过滤器所占用的资源进行释放。

5.2.2 过滤器组件的开发和使用

   1. 开发过滤器的步骤

   过滤器的开发主要包括 4 个步骤。

  1)创建实现 Filter 接口的类。

   2)在 doFiler() 中编写实现过滤的方法。

   3)调用下一个过滤器或者 Web 资源。

   4)在 Web.xml 文件中配置过滤器。

   2. Filter 接口

    实现过滤器的过程与实现 Servlet 有些类似。在开发过滤器时,需要实现 Filter 接口,

这个接口存在于 javax.servlet 包中。

    Filter 接口定义了 3 个方法, 如表 5-6 所示。

    提示

              Filter 接口没有相应的实现类进行继承,所以在编写过滤器时,必须实现

   Filter 接口。

表 5-6 Filter 接口的方法
方法 说明
void init (FilterConfig filterConfig) Web 容器调用该方法实现过滤器的初始化
void doFilter(ServletRequest request,Servlet-Response response,FilterChain chain) doFilter()方法。在该方法中,可以对请求和响应进行处理,实现过滤功能
void destroy() Web 容器调用该方法,造成过滤器失效

      示例4

      编写过滤器,实现字符编码的设置。

      分析如下。

      过滤器在实际的开发过程中,以类的形式存在,同时还必须实现Filter 接口,然后

在 doFilter() 方法内编写设置字符编码的语句。

      关键代码:

public class CharacterEncondingFilter  implements Filter{
     ……
     public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain) throws  IOException,ServletException{
     //设置请求时的编码方式
     request.setCharacterEncoding("UTF-8");
     //设置响应时的编码格式
     reponse.setCharacterEncoding("UTF-8");
     //调用 Web 资源,也可以调用其他过滤器
     chain.doFilter(request,response);
   }
   ……
}

3.过滤器的配置

     为了实现过滤器功能,需要对 Web 应用中的 Web.xml 文件进行配置,配置的方式与

Servlet 也非常类似。配置的过程包括以下两步。

       (1)在 Web.xml 文件中添加 <filter> 元素,用于设置过滤器的名称,以及过滤器的

完全限定名。

        (2)添加<filter-mapping> 元素,其中 <filter-name> 元素必须与 <filter> 元素中的

设置相同。 <url-pattern> 元素则表示过滤器映射的 Web 资源。

       与 Servlet 中的配置类似,在 Web.xml 中常用的 <url-pattem> 设置方法有以下 4 种形式。

  • 精确匹配:<url-pattern>xxx</url-pattern>。
  • 目录匹配:<url-pattern>/admin/*</url-pattern>。
  • 扩展名匹配:<url-pattern>*.do</url-pattern>。
  • 全部匹配:<url-pattern>/*<url-pattern>。

         在匹配时会首先查找精确匹配,如果找不到,再找目录匹配,然后是扩展名匹配,

最后时全部匹配。配置过滤器的代码如 示例5 所示。

       示例5

       在配置文件中进行过滤器设置。

       分析如下。

       过滤器需要在 web.xml 文件中 进行配置,配置完毕后,系统就会自动调用相应的过

滤器执行过滤功能。

      关键代码:

<filter>
   <display-name>CharacterEncodingFilter</display-name>
   <filter-name>CharacterEncodingFilter</filter-name>
   <filter-class>com.kgc.news.web.filter.CharacterEncodingFilter</filter-class>
<filter>

<filter-mapping>
    <filter-name>CharacterEcodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

过滤器的使用项目与数据库脚本

过滤器的使用,资源包括,JDBC三层项目,以及数据库脚本,学生信息管理系统,重点掌握过滤器的使用。此项目为过滤器讲解素材。

https://download.csdn.net/my

项目演示:……

猜你喜欢

转载自blog.csdn.net/weixin_44129498/article/details/92830081
今日推荐