过滤器一:过滤器简介;创建第一个Filter;

本篇博客主要介绍过滤器的基本内容,同时编写一个过滤器小例子。

目录

一:过滤器简介

1.什么是过滤器?

2.过滤器执行过程:

3.过滤器开发的三要素:​

二:过滤器范例

1.创建过滤器

2.测试过滤器是否编写成功


一:过滤器简介

1.什么是过滤器?

空气净化器,净水器,车站安检系统:过滤某些东西;

而且这些过滤流程中往往有好多关,“过滤”好多次;比如飞机安检就有三个“过滤器”,会先检查行李,然后检查随身包裹,然后检查身体,任何一关不通过都无法登机。

如果在JavaWeb中:向一个web应用发去很多请求,有的请求符合要求,有的请求不符合要求,Java提供了过滤器对其进行处理。

比如有的请求不完善,需要过滤器拦截后处理一下再向后传递;;;而有的请求是不能放行的,对于这样的请求就不适用chain.doFilter()以达到中断拦截的作用;

任何一个Servlet都内置了过滤器:可以这样理解,编写好的过滤器可以直接应用到Servlet中,底层已经处理好了。。。。

2.过滤器执行过程:

3.过滤器开发的三要素:


二:过滤器范例

1.创建过滤器

第一步:创建一个web工程,并编写一个类实现Filter接口:即编写过滤器类

MyFirstFilter:一个类想要成为一个过滤器类,需要实现javafx.servlet.Filter接口;实现Filter接口的类必须实现init(),doFilter(),destroy()方法。重点关注doFilter()方法,这个方法需要我们去编写,这儿出于简单演示目的,我们只让doFilter()方法在控制台打印“过滤器已执行”。

package com.imooc.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class MyFristFilter implements Filter{

	@Override
	public void destroy() {
		// TODO Auto-generated method stub
		
	}

	/**
	 * doFilter方法三个参数:ServletRequest:请求对象;ServletResponse:响应对象;FilterChain:过滤链对象
	 */
	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		// TODO Auto-generated method stub
		System.out.println("过滤器已执行");
		chain.doFilter(request, response);  // 将请求与响应对象随着过滤链依次向后传递,如果不写这句话,请求是无法向后被正常地传递的;
		
	}

	@Override
	public void init(FilterConfig arg0) throws ServletException {
		// TODO Auto-generated method stub
		
	}

}

第二步:过滤器编写好之后,需要在web.xml进行配置:这儿处于简单演示目的,url-pattern设成了/*,即对所有url都进行拦截;

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>first-filter</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  
  <!-- filtler标签用于说明哪个类是过滤器,并在应用启动时自动加载,即自动实例化这个类的对象,并对其进行加载 -->
  <filter>
  	<filter-name>MyFrist</filter-name>
  	<filter-class>com.imooc.filter.MyFristFilter</filter-class>
  </filter>
  <!-- 
  	filter-mapping标签用于说明过滤器对URL应用的范围:
  		1.filter-name 过滤器别名,需要与上面<filter>标签中定义的地方保持一致;
  		2.url-pattern 说明过滤器作用范围,/*代表对所有URL进行过滤;(/*也听常用的)
   -->
  <filter-mapping>
  	<filter-name>MyFrist</filter-name>
  	<url-pattern>/*</url-pattern>  <!-- /*代表对所有的url请求都进行拦截 -->
  </filter-mapping>
</web-app>

至此,一个过滤器已经编写好了!

……………………………………………………

2.测试过滤器是否编写成功

为了测试过滤器,添加index.html和HelloServlet两个资源:(自然这访问这两个资源的url也不同,仅仅是为了对应下上面的/*而已)

运行程序:

访问index.html:

发现控制台

…………………………

访问HelloServlet:


注:(1)可以看到,将过滤器类编写完成并在web.xml中配置后,并没有在Servlet或html中设置过滤器,估计这个工作是Tomcat服务器完成了吧……这应该也印证了博客开头说的“任何一个Servlet都内置了过滤器:可以这样理解,编写好的过滤器可以直接应用到Servlet中,底层已经处理好了。。。。”这句话。

猜你喜欢

转载自blog.csdn.net/csucsgoat/article/details/114240538