Servlet过滤器--Filter

一、定义:

  • 是一种特殊的Servlet,可以用来对请求进行过滤,多个过滤器可以形成过滤链;
  • 当请求发送到servlet之前,可以用过滤器截获和处理请求,在servlet结束工作之后,在响应发回给客户之前,可以用过滤器处理响应。
  • 实现javax.servlet.Filter接口里面的 init,doFilter、destroy等抽象方法,是过滤器的生命周期。

  • 过滤器的工作原理:

二、Web.xml中的配置声明

  • 根据servlet2.3规范,filter执行是按照 filter-mapping 先后顺序进行执行;
  • 第一段代码:声明过滤器名;第二段代码:将过滤器映射到你想过滤的web 资源 声明对应URL模式的过滤器映射
<filter>
         <filter-name>  文件名 </filter-name>
         <filter-class> 包名. 文件名 </filter-class>
         <init-param>{可选}
             <param-name>变量名  </param-name>
             <param-value>  变量 </param-value>
          </init-param>
 </filter>
<filter-mapping>
     <filter-name>文件名</filter-name>
     <url-pattern>/*</url-pattern>
</filter-mapping>
  • 若与servlet有联系,需插入下一段代码:
<servlet>
     <servlet-name>Demo1</servlet-name>
     <servlet-class>servlet.Demo1</servlet-class>
</servlet>

三、与servlet联系的例子——解决中文问题

1、创建新的javaweb工程TestFL,在filter包下创建CharacterEncoderFilter.java——

public class CharacterEncoderFilter implements Filter{
 private FilterConfig filterConfig=null;
 public void destroy() { }
 public void doFilter(ServletRequest req, ServletResponse resp,
       FilterChain chain) throws IOException, ServletException {
          String charset=filterConfig.getInitParameter("charset");
          req.setCharacterEncoding(charset);
          resp.setCharacterEncoding(charset);
          resp.setContentType("text/html;charset="+charset);
          chain.doFilter(req, resp);
 }
 public void init(FilterConfig filterConfig) throws ServletException {
          this.filterConfig=filterConfig;
  }
} 

2、servlet包下的Demo2.java——

public class Demo2 extends HttpServlet {
 public void doGet(HttpServletRequest request, HttpServletResponse response)
       throws ServletException, IOException {
            doPost(request, response);
  }
 public void doPost(HttpServletRequest request, HttpServletResponse response)
       throws ServletException, IOException {
          String username=request.getParameter("username");
          System.out.println(username);
          response.getWriter().write("中文");
  }
}

3、在web.xml中要再声明一次filter文件名、变量名和servlet文件 :

(注意此处的/*是代表网址不需要写文件名,只需要写 http://localhost:8080/TestFL/,

若为/abc/*,则要写为 http://localhost:8080/TestFL/abc/ 才能运行)

<filter>
      <filter-name>CharacterEncoderFilter</filter-name>
      <filter-class>filter.CharacterEncoderFilter</filter-class>
      <init-param>
          <param-name>charset</param-name>
          <param-value>utf-8</param-value>
       </init-param>
 </filter>

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

<servlet>
        <servlet-name>Demo1</servlet-name>
        <servlet-class>servlet.Demo1</servlet-class>
</servlet>
 <servlet-mapping>
        <servlet-name>Demo1</servlet-name>
        <url-pattern>/Demo1</url-pattern>
</servlet-mapping>   

3、在jsp文件中设计个简单form:(记得将pageEncoding改为utf-8)

<form action="/TestFL/Demo2" method="post">
         用户名:<input name="username"/>
         <input type="submit" value="提交" />
 </form>

4、打开tomcat服务,Redeploy部署文件,在浏览器上运行http://localhost:8080/TestFL/,提交后如图所示:(所有页面的请求都要经过该过滤器先行过滤 )

 

时间: 2024-08-06 03:55:46

Servlet过滤器--Filter的相关文章

Servlet过滤器Filter

Filter与Listener是Servlet规范里的两个高级特性.不用于处理客户端请求,只用于对request,response进行修改或者对context,session,request事件进行监听.善于处理一些特殊问题. sun公司在Servlet2.3规范中添加了Filter功能,并在Servlet2.4中对Filter进行了细节的补充.ServletFilter提现的是设计模式中的Filter模式. 实例参考: http://book.51cto.com/art/201004/1934

JavaWeb学习篇之----Servlet过滤器Filter和监听器

JavaWeb学习篇之----Servlet过滤器Filter和监听器 首先来看一下Servlet的过滤器内容: 一.Servlet过滤器的概念: *************************************************************************************** Servlet过滤器是在Java Servlet规范2.3中定义的,它能够对Servlet容器的请求和响应对象进行检查和修改. Servlet过滤器本身并不产生请求和响应对象,

Servlet过滤器Filter用法

1 Servlet 过滤器方法 过滤器是一个实现了 javax.servlet.Filter 接口的 Java 类.javax.servlet.Filter 接口定义了三个方法:public void doFilter (ServletRequest, ServletResponse, FilterChain)该方法完成实际的过滤操作,当客户端请求方法与过滤器设置匹配的URL时,Servlet容器将先调用过滤器的doFilter方法.FilterChain用户访问后续过滤器. public vo

Servlet基础知识(四)——Servlet过滤器Filter

一.什么是过滤器: 政府大楼的安检保安,它既能对进入政府大楼的人员进行检查,只允许检查符合要求的进入:同时他也负责对出大楼的人进行检查,看他带出的东西是否符合要求. 同样的,Servlet中的过滤器既可以对客户端发来的请求,在Servlet接收之前进行过滤:也可以对Servlet发出的响应,在客户端接收之前进行过滤. 二.过滤器的实现: Servlet的过滤器是通过实现javax.servlet.Filter接口实现的.(也就是说Servlet过滤器其实就是一个实现了Filter的Serlvet

servlet 过滤器(Filter)(八)

1.servlet过滤器产生背景 项目中我们会遇到这样一类的需求,对访问服务器的用户ip实施过滤,只有在允许名单中的ip才能访问服务,为了实现需求,每当有客户端请求时,我们都会写校验ip的代码,客户端能够访问到的servlet我们都需要这样做,很明显这样做有一个缺点,就是代码冗余,维护不方便,如果验证规则改变,修改起来也特别麻烦. 为了解决以上问题,Filter 技术应运而生. 2.servlet过滤器是什么? servlet过滤器是在java servlet 2.3 中定义的.它能够对serv

Servlet过滤器Filter和监听器

一.Servlet过滤器的概念: *************************************************************************************** Servlet过滤器是在Java Servlet规范2.3中定义的,它能够对Servlet容器的请求和响应对象进行检查和修改. Servlet过滤器本身并不产生请求和响应对象,它只能提供过滤作用.Servlet过期能够在Servlet被调用之前检查Request对象,修改Request H

Servlet 过滤器Filter

特点 1)Filter是依赖于Servlet容器,属于Servlet规范的一部分,在Servlet API中定义了三个接口类:Filter, FilterChain, FilterConfig. 2)基本功能是对 调用 Servlet 的过程进行拦截,从而在 Servlet 进行响应处理的前后实现一些特殊的功能. 3)需要在 web.xml 文件中进行注册和设置它所能拦截的资源. 编码 public class UserNoFilter implements Filter { private F

Servlet 过滤器 Filter

过滤器是一个实现了 javax.servlet.Filter 接口的 Java 类.javax.servlet.Filter 接口定义了三个方法: 下面是对所有编码过滤器 package filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.S

servlet过滤器Filter使用之DelegatingFilterProxy类

正常情况下,我们需要添加一个过滤器,需要实现javax.servlet.Filter接口,再在web.xml中配置filter,如下: package cc.eabour.webapp.security.filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.s