[JavaWeb] Servlet Filter
Posted yintianhao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[JavaWeb] Servlet Filter相关的知识,希望对你有一定的参考价值。
作用:
Servlet 过滤器可以动态地拦截请求和响应,以变换或使用包含在请求或响应中的信息。
可以将一个或多个 Servlet 过滤器附加到一个 Servlet 或一组 Servlet。Servlet 过滤器也可以附加到 JavaServer Pages (JSP) 文件和 html 页面。调用 Servlet 前调用所有附加的 Servlet 过滤器。
Servlet 过滤器是可用于 Servlet 编程的 Java 类,可以实现以下目的:
- 在客户端的请求访问后端资源之前,拦截这些请求。
- 在服务器的响应发送回客户端之前,处理这些响应
编写Filter实际上是实现Filter接口,在调用servlet之前会先经过过滤器
步骤:
新建一个Filter类,然后编写必要的initFilter和doFilter方法
package com.example.filter; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import java.io.IOException; @WebFilter(filterName = "FirstFilter") public class FirstFilter implements Filter { public void destroy() { } public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException { System.out.println("doFilter www.baidu.com"); chain.doFilter(req, resp); } public void init(FilterConfig config) throws ServletException { //获得初始化参数 String siteName = config.getInitParameter("Site"); System.out.println("initFilter "+siteName); } }
之后需要在web.xml里面进行注册,配置Filter的名字,所作用的servlet等
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <servlet> <servlet-name>FirstServlet</servlet-name> <servlet-class>com.example.servlet.FirstServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>FirstServlet</servlet-name> <url-pattern>/TomcatTest/FirstServlet</url-pattern> </servlet-mapping> <servlet> <servlet-name>DisplayServlet</servlet-name> <servlet-class>com.example.servlet.DisplayServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>DisplayServlet</servlet-name> <url-pattern>/TomcatTest/DisplayServlet</url-pattern> </servlet-mapping> <filter> <filter-name>FirstFilter</filter-name> <filter-class>com.example.filter.FirstFilter</filter-class> <init-param> <param-name>Site</param-name> <param-value>www.baidu.com</param-value> </init-param> </filter> <!--配置Filter作用的Servlet--> <filter-mapping> <filter-name>FirstFilter</filter-name> <url-pattern>/TomcatTest/DisplayServlet</url-pattern> </filter-mapping> </web-app>
<url-pattern>标签里填的是作用的servlet的名字,Filter会对这个servlet进行处理,如果这个Filter对所有的Servlet作用,则填入/*
一个Javaweb项目中可以有多个Filter,形成一个过滤器链,调用他们的顺序取决于他们在web.xml中的位置,在前则先调用,在后则后调用
Filter的生命周期:
public void init(FilterConfig config)
Filter对象的创建由Web服务器负责,在Web服务器启动的时候会创建一个Filter对象,并调用initFilter方法进行初始化,并且整个过程initFilter方法只执行一次,只创建一个Filter对象
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
每次filter进行拦截都会执行
public void destroy()
销毁对象时执行
持续更新!!
以上是关于[JavaWeb] Servlet Filter的主要内容,如果未能解决你的问题,请参考以下文章
JavaWeb详解(第三篇)之Servlet基础简介-过滤器Filter&Listener监听器