Filter生命周期的简单实例

简介: Filter生命周期的简单实例


项目整体结构:

 

将项目添加到Tomcat8服务器,点击运行。


Console(控制台)输入如下信息:


九月 10, 2016 9:25:12 下午 org.apache.catalina.core.AprLifecycleListener init

信息: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Java\jdk1.8.0_101\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:/Java/jdk1.8.0_101/bin/../jre/bin/server;C:/Java/jdk1.8.0_101/bin/../jre/bin;C:/Java/jdk1.8.0_101/bin/../jre/lib/amd64;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;E:\ANT194/bin;E:\Maven321/bin;E:\bin;C:\Program Files\MySQL\MySQL Server 5.6\bin;C:\Java\jdk1.8.0_101\bin;E:\eclipse;;.

九月 10, 2016 9:25:12 下午 org.apache.tomcat.util.digester.SetPropertiesRule begin

警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:Filter01' did not find a matching property.

九月 10, 2016 9:25:12 下午 org.apache.coyote.AbstractProtocol init

信息: Initializing ProtocolHandler ["http-nio-8888"]

九月 10, 2016 9:25:13 下午 org.apache.tomcat.util.net.NioSelectorPool getSharedSelector

信息: Using a shared selector for servlet write/read

九月 10, 2016 9:25:13 下午 org.apache.coyote.AbstractProtocol init

信息: Initializing ProtocolHandler ["ajp-nio-8009"]

九月 10, 2016 9:25:13 下午 org.apache.tomcat.util.net.NioSelectorPool getSharedSelector

信息: Using a shared selector for servlet write/read

九月 10, 2016 9:25:13 下午 org.apache.catalina.startup.Catalina load

信息: Initialization processed in 2419 ms

九月 10, 2016 9:25:13 下午 org.apache.catalina.core.StandardService startInternal

信息: Starting service Catalina

九月 10, 2016 9:25:13 下午 org.apache.catalina.core.StandardEngine startInternal

信息: Starting Servlet Engine: Apache Tomcat/8.0.9

filter init----

filter init----

九月 10, 2016 9:25:14 下午 org.apache.coyote.AbstractProtocol start

信息: Starting ProtocolHandler ["http-nio-8888"]

九月 10, 2016 9:25:14 下午 org.apache.coyote.AbstractProtocol start

信息: Starting ProtocolHandler ["ajp-nio-8009"]

九月 10, 2016 9:25:14 下午 org.apache.catalina.startup.Catalina start

信息: Server startup in 1058 ms


点击内置浏览器,输入http://localhost:8888/Filter01/index.jsp,控制台输入如下信息:


doFilter start...

index.jsp

doFilter stop...


可以看到过滤器开始执行doFilter方法,并执行chain.doFilter(request, response)方法,然后doFilter方法结束。


 

对chain.doFilter(request,response)的理解

 

chain.doFilter(request,response)的作用是将请求转发给过滤器链上的下一个对象。这里的“下”指的是下一个filter,如果没有filter那就是你请求的资源。


一般filter都是一个链,在web.xml里面配置几个就有几个。一个一个的连在一起

request ----》filter1-----》filter2------》filter3........------>request source

注意:filter在web.xml中 是有顺序的。

 

 

切换到Server栏,点击stop红色按钮,将停止web服务器,此时将执行destroy方法,控制台输出:


九月 10, 2016 9:30:08 下午 org.apache.catalina.core.StandardServer await

信息: A valid shutdown command was received via the shutdown port. Stopping the Server instance.

九月 10, 2016 9:30:08 下午 org.apache.coyote.AbstractProtocol pause

信息: Pausing ProtocolHandler ["http-nio-8888"]

九月 10, 2016 9:30:08 下午 org.apache.coyote.AbstractProtocol pause

信息: Pausing ProtocolHandler ["ajp-nio-8009"]

九月 10, 2016 9:30:09 下午 org.apache.catalina.core.StandardService stopInternal

信息: Stopping service Catalina

filter destroy---

filter destroy---

九月 10, 2016 9:30:09 下午 org.apache.coyote.AbstractProtocol stop

信息: Stopping ProtocolHandler ["http-nio-8888"]

九月 10, 2016 9:30:09 下午 org.apache.coyote.AbstractProtocol stop

信息: Stopping ProtocolHandler ["ajp-nio-8009"]

九月 10, 2016 9:30:09 下午 org.apache.coyote.AbstractProtocol destroy

信息: Destroying ProtocolHandler ["http-nio-8888"]

九月 10, 2016 9:30:09 下午 org.apache.coyote.AbstractProtocol destroy

信息: Destroying ProtocolHandler ["ajp-nio-8009"]


过滤器的执行过程可以用下图直观的显示:

 

过滤器的一些问题及答案。


1.第一个问题比如找不到资源,返回登录界面,就改变了用户请求。

2、filter不是标准的servlet。

相关文章
|
2月前
|
安全 Java 数据库连接
|
XML Java 应用服务中间件
Filter 过滤器--基本原理--Filter 过滤器生命周期--过滤器链--注意事项和细节--全部应用实例--综合代码示例
Filter 过滤器--基本原理--Filter 过滤器生命周期--过滤器链--注意事项和细节--全部应用实例--综合代码示例
139 0
|
5月前
|
中间件
Koa2 中的上下文(context)是什么?如何使用上下文对象?
Koa2 中的上下文(context)是什么?如何使用上下文对象?
47 0
Filter过滤器概念及生命周期
Filter过滤器概念及生命周期
133 0
|
Java 应用服务中间件 Spring
自定义Filter后,我的业务代码怎么被执行了多次?
若要求构建的过滤器针对全局路径有效,且无任何特殊需求(主要针对 Servlet 3.0 的一些异步特性),则完全可直接使用 Filter 接口(或继承 Spring 对 Filter 接口的包装类 OncePerRequestFilter),并使用**@Component** 将其包装为 Spring 中的普通 Bean,也可达到预期需求。
154 0
odoo context上下文用法总结
odoo context上下文用法总结
237 0
|
Web App开发 Java
自定义JSP标签->概念->生命周期
自定义JSP标签->概念->生命周期
自定义JSP标签->概念->生命周期
【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 使用 @Category 注解进行方法注入 | 分类注入方法查找优先级 )
【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 使用 @Category 注解进行方法注入 | 分类注入方法查找优先级 )
154 0
【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 使用 @Category 注解进行方法注入 | 分类注入方法查找优先级 )
|
存储 前端开发 rax
bthread源码剖析(五): bthread上下文的创建
在之前的文章有介绍过调用jump_stack()函数进行bthread上下文的切换(bthread栈的切换),其中涉及了汇编语言。本文来讲一讲与之对应的另外一个操作:调用get_stack()进行上下文的创建(bthread栈的创建),并且同样会涉及汇编语言。
249 0