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。

相关文章
Filter过滤器概念及生命周期
Filter过滤器概念及生命周期
181 0
|
6月前
|
安全 Java 数据库连接
|
XML Java 应用服务中间件
Filter 过滤器--基本原理--Filter 过滤器生命周期--过滤器链--注意事项和细节--全部应用实例--综合代码示例
Filter 过滤器--基本原理--Filter 过滤器生命周期--过滤器链--注意事项和细节--全部应用实例--综合代码示例
223 0
【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 使用 @Category 注解进行方法注入 | 分类注入方法查找优先级 )
【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 使用 @Category 注解进行方法注入 | 分类注入方法查找优先级 )
176 0
【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 使用 @Category 注解进行方法注入 | 分类注入方法查找优先级 )
|
5月前
|
设计模式 人工智能 安全
【Tomcat源码分析】生命周期机制 Lifecycle
Tomcat内部通过各种组件协同工作,构建了一个复杂的Web服务器架构。其中,`Lifecycle`机制作为核心,管理组件从创建到销毁的整个生命周期。本文详细解析了Lifecycle的工作原理及其方法,如初始化、启动、停止和销毁等关键步骤,并展示了LifecycleBase类如何通过状态机和模板模式实现这一过程。通过深入理解Lifecycle,我们可以更好地掌握组件生命周期管理,提升系统设计能力。欢迎关注【码上遇见你】获取更多信息,或搜索【AI贝塔】体验免费的Chat GPT。希望本章内容对你有所帮助。
|
JavaScript 前端开发
📕 重学JavaScript:如何实现一个`call`/`apply`?
这次要说的 call/apply 方法其实和 bind 极其类似。
92 0
|
前端开发 JavaScript
一个简单的例子让你轻松地明白JavaScript中apply、call、bind三者的用法及区别
这篇文章也算是讲解了前端面试 常考的知识点 ,即关于JavaScript中apply、call、bind三者的用法及区别。 如果有些小伙伴已经对该知识有一定的了解了,可以直接跳到最后看 总结
138 0
|
JavaScript 前端开发 Unix
webpack原理篇(五十九):loader 的链式调用与执行顺序
webpack原理篇(五十九):loader 的链式调用与执行顺序
306 0
webpack原理篇(五十九):loader 的链式调用与执行顺序

热门文章

最新文章