您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
01-Filter-概述&快速入门&执行流程
发布时间:2024-12-08 21:22:40编辑:雪饮阅读()
-
Filter表示过滤器,是javaWeb三大组件(Servlet,Filter,Listener)之一
过滤器可以把对资源的请求拦截下来,从而实现一些特殊的功能。
这里新建立一个webapp项目,项目名叫FilterProject,module名叫FilterProjectModule
暂时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>FilterProjectModule</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
</plugin>
</plugins>
</build>
</project>
尤其是这个依赖
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
这个Filter是需要依赖这个的。
那么Filter也是像servlet一样,同样也能使用注解url,只不过这里注解url使用的是WebFilter,那么我们知道webapp模板默认情况下访问其首页就是index.jsp.
那么如果我们注解url为*则会连该index.jsp都拦截,拦截若不放行则页面就是空白的。
那么Filter是一个接口我们必须要实现的方法是init、doFilter、destroy其实这里目前对我们最游泳的就是doFilter,则一个示例的Filter就如:
package com.Filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
//拦截所有访问路径
@WebFilter("*")
public class Filter1 implements Filter {
public void init(FilterConfig filterConfig) throws ServletException {
}
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("hello word Filter 1");
}
public void destroy() {
}
}
那么该示例中虽然访问web页面中是空白,但是控制台中还是能正常输出信息。要想放行,则在该doFilter方法中执行FilterChain的doFilter方法。
一般来说FilterChain的doFilter方法之后才算是Response才会有数据,因为FilterChain的doFilter会去将jsp的解析响应结果拿到后才返回来。
那么你的doFilter的实现可以如:
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("hello World Filter 1");
filterChain.doFilter(servletRequest,servletResponse);
System.out.println("hello World Filter 3");
}
然后你默认的index.jsp修改如:
<html>
<body>
<%
System.out.println("Hello World Filter 2");
%>
<h2><%= "Hello World Filter 2" %></h2>
</body>
</html>
此时你访问如localhost:8080/FilterProjectModule/后则在控制台输出如:
hello World Filter 1
Hello World Filter 2
hello World Filter 3
就足以证明这一点。
关键字词:Filter
相关文章
- OpenCart 如何配置商品筛选功能 (filter)?
- 14_Filter_案例2_过滤敏感词汇_实现(动态代理设计模式
- 10_Filter_案例1_登录验证_代码实现(过滤器中过滤请求
- 8_Filter_细节_过滤器链(多个过滤器)(相同拦截规则时候
- 7_Filter_细节_过滤器拦截方式配置(区分拦截浏览器直接
- 6_Filter_细节_过滤器拦截路径配置(servlet拦截与目录
- 5_Filter_细节_执行流程&生命周期(filter创建模板与生
- 4_Filter_细节_web.xml配置方式
- 3_Filter_快速入门(类似php中常用的中间件)
- phpunit如何生成代码覆盖率?“No filter is configured