如何使用Filter(过滤器一)
目录
二、生命周期
二、使用步骤
一、什么是过滤器
Filter(过滤器):是JavaWeb三大组件之一,Servlet2.3规范中加入的接口。是面向切面编程思想的应用实现,用AOP的思想来统一处理一类事情。
什么是AOP(面向切面编程)-CSDN博客https://blog.csdn.net/u011529483/article/details/141865235?spm=1001.2014.3001.5501
Filter(过滤器)能做什么?访问权限控制、模块访问时段控制等。
二、生命周期
初始化:程序启动时进行实例初始化,初始化到内存中,单例存在直到销毁时灭亡。调用方法init()
功能处理:你需要实现的功能在这里进行逻辑处理。调用方法doFilter()
实例销毁:关闭容器(tomcat)时进行销毁。调用方法destroy()
二、使用步骤
1. 创建javaweb项目
创建一个可运行项目。
(我的示例项目记Spring HTTP Invoker远程调用的使用(一)基于Url映射方式,DispatcherServlet统一处理实现-CSDN博客https://blog.csdn.net/u011529483/article/details/141678510?spm=1001.2014.3001.5501沿用)文章中的项目。
2. 创建过滤器Filter
创建了名为AwFilter的过滤器,并实现Filter接口:
package com.wqbr.showebsite.wfilter;
import javax.servlet.*;
import java.io.IOException;
/**
* @author lv
* @date 2024年9月5日
*
*/
public class AwFilter implements Filter {
/**
* 初始化方法,初始化Filter实例,当 Web容器(tomcat)启动时调用
* @param config
* @throws ServletException
*/
@Override
public void init(FilterConfig config) throws ServletException {
System.out.println("AwFilter .... init初始化... ...");
}
/**
* 销毁实例,关闭容器停止服务时调用
*/
@Override
public void destroy() {
System.out.println("AwFilter .... destroy销毁。。。。。。");
}
/**
* 业务处理,拦截要执行的请求,对请求和响应进行逻辑处理
* @param request
* @param response
* @param chain
* @throws ServletException
* @throws IOException
*/
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
System.out.println("AwFilter .... doFilter业务逻辑处理* * * * * *");
chain.doFilter(request, response);
}
}
3. 配置Filter,项目启动才能运行Filter
<!--配置自定义过滤器--> <filter> <filter-name>AwFilter</filter-name> <filter-class>com.wqbr.showebsite.wfilter.AwFilter</filter-class> </filter> <filter-mapping> <filter-name>AwFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
web.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<!-- https://blog.csdn.net/qyb19970829/article/details/110100544 配置时注意关于spring容器加载顺序的问题,
applicationContext.xml,spring-security.xml,springmvc.xml 即这几个配置文件加载顺序
-->
<!--字符编码过滤器一定要放在前面,在web.xml中配置Spring提供的过滤器类-->
<filter>
<filter-name>encodingFilter</filter-name> <!--encodingFilter 这个命名不要修改-->
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<async-supported>true</async-supported>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--配置自定义过滤器-->
<filter>
<filter-name>AwFilter</filter-name>
<filter-class>com.wqbr.showebsite.wfilter.AwFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>AwFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--配置Spring的监听器,启动spring容器-->
<!--配置加载类路径的配置文件,注意加载顺序-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:spring/applicationContext.xml
classpath:spring/applicationContext-clients.xml
</param-value>
</context-param>
<display-name>Archetype Created Web Application</display-name>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--配置前端控制器,对浏览器发送的请求进行统一处理-->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--加载springmvc.xml配置文件的位置和名称,配置的是Spring配置-->
<init-param>
<!--contextConfigLocation:上下文配置路径,固定值-->
<param-name>contextConfigLocation</param-name>
<!--classpath:类路径,指的是Java和resources文件夹-->
<!--springmvc.xml:指的是配置文件的名称:需要配置springmvc.xml,在下面。
spring默认配置文件为applicationContext.xml。当中配置spring创建容器时要扫描的包 已经整合到springmvc.xml中-->
<param-value>
classpath:spring/springmvc.xml
</param-value>
</init-param>
<!--配置启动加载-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!--开启项目时打开的页面-->
<welcome-file-list>
<welcome-file>/login.jsp</welcome-file>
</welcome-file-list>
<!--设置session超时,单位分钟 默认30分钟-->
<!-- <session-config>-->
<!-- <session-timeout>2</session-timeout>-->
<!-- </session-config>-->
</web-app>
4. 启动项目
控制台显示如下,执行了init初始化方法,然后进入doFilter方法。说明Filter成功运行了,并体现了生命周期各方法的执行。
本文已说明了如何使用Filter。好了