16-filter过滤器
怎么都理解不了的东西,只不过是需要点拨而已,愿所有人都找到适合自己的方法
概述
本文主要讲解过滤器,过滤器其实是在servlet前面增加了一层,用来处理统一的请求或者响应的过滤处理
常见应用:
- web服务器有一些垃圾请求,后台不应该处理,或者应该报错
- 处理乱码问题
重点
写一个过滤器只要实现javax.servlet
包下的Filter接口,重写里面的init,destroy,doFilter几个接口即可
过滤器的初始化是在tomacat启动的时候完成的
销毁是在web服务器关闭的时候完成的
另外过滤器是可以传递的,从一个filter传到其他filter,也必须通过FilterChain
传递
实践
Servlet1.java
package com.kuang.servlet;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;/*** 功能描述** @since 2022-08-23*/
public class Servlet1 extends HttpServlet {private static final long serialVersionUID = 7727991466501115729L;@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.getWriter().write("你好世界");}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}
CharacterEncodingFilter.java
package com.kuang.filter;import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import java.io.IOException;/*** 功能描述** @since 2022-08-23*/
public class CharacterEncodingFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {System.out.println("过滤器初始化");}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)throws IOException, ServletException {servletRequest.setCharacterEncoding("utf-8");servletResponse.setCharacterEncoding("utf-8");servletResponse.setContentType("text/html;charset=utf-8");System.out.println("chain 传递前");filterChain.doFilter(servletRequest, servletResponse);System.out.println("chain 传递后");}@Overridepublic void destroy() {System.out.println("过滤器销毁");}
}
<?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>s1</servlet-name><servlet-class>com.kuang.servlet.Servlet1</servlet-class></servlet><servlet-mapping><servlet-name>s1</servlet-name><url-pattern>/s1</url-pattern></servlet-mapping><servlet-mapping><servlet-name>s1</servlet-name><url-pattern>/servlet/s1</url-pattern></servlet-mapping><filter><filter-name>f1</filter-name><filter-class>com.kuang.filter.CharacterEncodingFilter</filter-class></filter><filter-mapping><filter-name>f1</filter-name><url-pattern>/servlet/*</url-pattern></filter-mapping>
</web-app>
子pom
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>JavaWeb-Study</artifactId><groupId>org.example</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>08-Filter</artifactId><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties></project>
父pom
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>JavaWeb-Study</artifactId><packaging>pom</packaging><version>1.0-SNAPSHOT</version><modules><module>01-HelloServlet</module><module>02-ServletContext</module><module>03-Download</module><module>04-VerificationCode</module><module>05-Login</module><module>06-Cookie</module><module>07-Session</module><module>08-Filter</module></modules><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><dependencies><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version></dependency><!-- https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api --><dependency><groupId>javax.servlet.jsp</groupId><artifactId>javax.servlet.jsp-api</artifactId><version>2.3.3</version></dependency><dependency><groupId>javax.servlet.jsp</groupId><artifactId>jsp-api</artifactId><version>2.2</version></dependency><dependency><groupId>org.apache.tomcat</groupId><artifactId>jasper</artifactId><version>6.0.53</version></dependency></dependencies></project>