Filter过滤器

Filter过滤器可以动态地拦截请求和响应,以变换或使用包含在请求或响应中的信息。
它主要用于对用户请求进行预处理,也可以对HttpServletResponse进行后处理。
使用Filter的完整流程:Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理。
在这里插入图片描述
过滤器在 Web 部署描述符(web.xml)中的 XML 标签声明,一般把 Filter 配置在所有的 Servlet 之前。
Filter的生命周期和编写的Servlet类似。

public void init(FilterConfig filterConfig) throws ServletException;//初始化

通过init方法的参数,可获得代表当前filter配置信息的FilterConfig对象。

public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain) throws IOException,ServletException;//拦截请求

这个方法完成实际的过滤操作。当客户请求访问与过滤器关联的URL的时候,Servlet过滤器将先执行doFilter方法。FilterChain参数用于访问后续过滤器。

public void destroy();//销毁

Servlet容器在销毁过滤器实例前调用该方法,在该方法中释放Servlet过滤器占用的资源。

FilterConfig 使用
Filter 的 init 方法中提供了一个 FilterConfig 对象。
如 web.xml 文件配置如下:

<filter>
	<filter-name>FilterEconding</filter-name>
	<filter-class>com.my.filter.FilterEconding</filter-class>
    <init-param>
      <param-name>name</param-name>
      <param-value>filter</param-value>
    </init-param>
</filter>
<filter-mapping>
	<filter-name>FilterEconding</filter-name>
	<url-pattern>/servlet/*</url-pattern>
</filter-mapping>

在 init 方法使用 FilterConfig 对象获取参数:

public void  init(FilterConfig config) throws ServletException {
	    // 获取初始化参数
	    String name = config.getInitParameter("name"); 
	    // 输出初始化参数
	    System.out.println("过滤器: " + name); 
	}

Filter过滤器实例:

public void doFilter(ServletRequest serRequest, ServletResponse servletResponse,
			FilterChain chain) throws IOException, ServletException {
  		serRequest.setCharacterEncoding("utf-8");
  	    String name = serRequest.getParameter("name");
  	  //http://localhost:8080/20190511/servlet/UserServlet?name=123 访问地址
  	  if("123".equals(name)){
  		  System.out.println("filter执行成功!");
          // 把请求传回过滤链
          chain.doFilter(serRequest, servletResponse);
      }else{
    	  serRequest.setCharacterEncoding("utf-8");
          //在页面输出响应信息
          PrintWriter out = servletResponse.getWriter();
          out.write("name不正确,请求被拦截,不能访问web资源");
          System.out.println("name不正确,请求被拦截,不能访问web资源");
      }
	}

如果我访问地址的name值为123就把请求传回,如果不是123就提示name不正确,拦截请求。
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值