Filter:过滤器的入门

什么是过滤器?

与servlet,Listener,为javaweb三大组件.

它会在一组资源(jsp,servlet,css,HTML等等)的前面执行;

它可以让请求得到目标资源,也可以不让请求达到,

  • 过滤器有拦截请求的能力!

登录成功:

---允许它访问Aservlet,Bservlet,Cservlet

过滤器如何编写:

1.写一个类实现Filter接口

2.在web.xml中进行配置1

filter接口:

package com.tinstu.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 Afilter implements Filter {
	// 销毁之前执行,用来做对非内存资源进行释放
	public void destroy() {
	}
	//每次过滤时都会执行
	public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
			throws IOException, ServletException {
	}
    //创建之后马上执行,用来做初始化
	public void init(FilterConfig arg0) throws ServletException {
	}
}

filter是单例的!跟servlet一样

web.xml配置

 <filter>
   <filter-name>Afilter</filter-name>
   <filter-class>com.tinstu.filter.Afilter</filter-class>
  </filter>
  <filter-mapping>
   <filter-name>Afilter</filter-name>
   <url-pattern>/Aservlet</url-pattern>
  </filter-mapping>

 方法

FilterConfig-->与ServletConfig相似

  • 获取初始化参数:getInitParameter ( )
  • 获取过滤器名称:getFilterName ( )
  • 获取application:getServletContext ( )

FilterChain

  • doFilter(ServletRequest,ServletResponse);  放行

放行,就相当于

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>Filter2</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>
  
  <servlet>
    <servlet-name>Aservlet</servlet-name>
    <servlet-class>com.tinstu.servlet.Aservlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Aservlet</servlet-name>
    <url-pattern>/Aservlet</url-pattern>
  </servlet-mapping>
  
 <filter>
   <filter-name>Afilter</filter-name>
   <filter-class>com.tinstu.filter.Afilter</filter-class>
  </filter>
  <filter-mapping>
   <filter-name>Afilter</filter-name>
   <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>

Aservlet.java

package com.tinstu.servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class Aservlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		System.out.println("Aservlet.............");
	}


}

Afilter.java

package com.tinstu.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 Afilter implements Filter {
	// 销毁之前执行,用来做对非内存资源进行释放
	public void destroy() {
		System.out.println("filter挂");
	}
	//每次过滤时都会执行
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		System.out.println("拦截!!");
		chain.doFilter(request,response);   //放行
		System.out.println("你又回来了哈哈");
	}
    //创建之后马上执行,用来做初始化
	public void init(FilterConfig arg0) throws ServletException {
		System.out.println("filter出生");
	}
}

 

 

 

阅读剩余
THE END