Filter学习笔记(二) Filter的细节
程序员文章站
2024-03-24 13:33:40
...
注解的原理
我们进去注解的类中看看
-
@Target({ElementType.TYPE})
表明该注解只能作用到类上 -
@Retention(RetentionPolicy.RUNTIME)
表明该注解生效时间段是RUNTIME -
@Documented
表明该注解会生成文档
这两个方法表明该注解跟Servlet的注解使用方法一样
web.xml的配置
我们在web目录下新建WEB-INF文件夹,并且在该文件夹下新建web.xml
同时把FilterDemo01的注解给注释掉,开始编写web.xml
web.xml:
<?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_3_1.xsd"
version="3.1">
<filter>
<filter-name>FilterDemo01</filter-name>
<filter-class>com.zzq.filter.FilterDemo01</filter-class>
</filter>
<filter-mapping>
<filter-name>FilterDemo01</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
Filter代码模板
- 修改模板
- 一键生成
- 效果
过滤器执行流程
FilterDemo02.java:
index.jsp:
执行效果:
因此,我们通常会这样使用Filter,如下图:
执行流程:
1.执行过滤器
2.执行放行后的资源
3.回来执行过滤器放行代码下边的代码
过滤器生命周期方法
@WebFilter("/*")
public class FilterDemo03 implements Filter {
/**
* 在服务器关闭后,Filter对象被销毁。如果服务器是正常关闭,则会执行destory方法,只执行一次。用于释放资源
*/
@Override
public void destroy() {
System.out.println("destroy......");
}
/**
* 每一次请求被拦截资源时会执行doFilter方法,会执行多次
*
* @param req
* @param resp
* @param chain
* @throws ServletException
* @throws IOException
*/
@Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
System.out.println("doFilter......");
chain.doFilter(req, resp);
}
/**
* 在服务器启动后,会创建Filter对象,然后调用init方法,只执行一次。用于加载资源
*
* @param config
* @throws ServletException
*/
@Override
public void init(FilterConfig config) throws ServletException {
System.out.println("init......");
}
}
过滤器配置详情
-
拦截路径配置:
1.具体资源路径:/index.jsp
只有访问index.jsp资源时,过滤器才会被执行
2.拦截目录:/user/*
访问/user下的所有资源时,过滤器都会被执行
比如:
配置一个拦截路径为**/user/servlet01**的Filter
同时配置两个Servlet
注解分别为:@WebServlet("/user/Servlet01")
和@WebServlet("/user/Servlet02")
只有当访问了Servlet01时才会执行过滤器
3.后缀名拦截:*.jsp
访问所有后缀名为jsp资源时,过滤器都会被执行
4.拦截所有资源:/*
访问所有资源时,过滤器都会被执行 -
拦截方式配置:资源被访问的方式
使用注解配置:设置dispatcherTypes属性
1.REQUEST:默认值。浏览器直接请求资源
2.FORWARD:转发访问资源
3.INCLUDE:包含访问资源
4.ERROR:错误跳转资源
5.ASYNC:异步访问资源
当只配置一个值时,注解可以省略value,但是要配置多个值就不能省,如下:
//浏览器直接请求资源时,该过滤器会被执行
@WebFilter(value = "/*", dispatcherTypes = {DispatcherType.REQUEST, DispatcherType.FORWARD})
使用web.xml配置:设置**标签**即可
过滤器链(配置多个过滤器)
-
执行顺序:如果有两个过滤器:过滤器1和过滤器2
1.过滤器1
2.过滤器2
3.资源执行
4.过滤器2
5.过滤器1 -
过滤器先后顺序问题:
1.注解配置:按照类名的字符串比较规则比较,值小的先执行
如:AFilter 和 BFilter,AFilter就先执行了。
2.web.xml配置: 谁定义在上边,谁先执行
上一篇: yum详解 博客分类: linux
下一篇: Zepto.js之一步步看源码(一)
推荐阅读
-
Filter学习笔记(二) Filter的细节
-
我的derby学习笔记之二:嵌入式derby的JDBC驱动 博客分类: 我的学习 嵌入式DerbyJDBCJavaJDK
-
acegi-security-sample-contacts-filter例子学习(二) 博客分类: java
-
深度学习花书 笔记3 - 矩阵对角化、奇异值分解(SVD)、极大似然估计、误差的高斯分布与最小二乘估计的等价性、PCA原理与推导
-
Spring Security学习笔记-Filter
-
C语言学习笔记:C语言代码优化的一些技巧(二)
-
Pytorch深度学习框架YOLOv3目标检测学习笔记(二)——创建网络框架的层
-
JAVA基础学习笔记(二)用来记录这几天的学习历程
-
srt学习笔记二:支持srt的ffmpeg 博客分类: ffmpeg ffmpeg
-
srt学习笔记二:支持srt的ffmpeg 博客分类: ffmpeg ffmpeg