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。

相关文章
|
5月前
|
安全 Java 数据库连接
|
8月前
|
Java Spring 容器
面试题:在spring框架下面,Bean的属性lazy-init有什么作用,默认值是多少
面试题:在spring框架下面,Bean的属性lazy-init有什么作用,默认值是多少
81 0
|
8月前
props和state相同点和不同点?render方法在哪些情况下会执行?
props和state相同点和不同点?render方法在哪些情况下会执行?
55 0
Filter过滤器概念及生命周期
Filter过滤器概念及生命周期
168 0
|
Java Spring 容器
@Inject 标记在构造方法上的作用
@Inject 标记在构造方法上的作用
|
Web App开发 Java
自定义JSP标签->概念->生命周期
自定义JSP标签->概念->生命周期
自定义JSP标签->概念->生命周期
|
Java Spring 容器
Spring框架:第三章:对象的生命周期及单例bean生命周期的11个步骤
Spring框架:第三章:对象的生命周期及单例bean生命周期的11个步骤
127 0
|
消息中间件 XML 运维
Spring源码分析(九)lazy-init 在Spring中是怎么控制加载的
ApplicationContext实现的默认行为就是在启动时将所有singleton bean提前进行实例化(也就是依赖注入)。提前实例化意味着作为初始化过程的一部分,ApplicationContext实例会创建并配置所有的singleton bean。通常情况下这是件好事,因为这样在配置中的任何错误就会即刻被发现(否则的话可能要花几个小时甚至几天)。
【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 使用 @Category 注解进行方法注入 | 分类注入方法查找优先级 )
【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 使用 @Category 注解进行方法注入 | 分类注入方法查找优先级 )
172 0
【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 使用 @Category 注解进行方法注入 | 分类注入方法查找优先级 )
【Groovy】MOP 元对象协议与元编程 ( 使用 Groovy 元编程进行函数拦截 | 动态拦截函数 | 动态获取 MetaClass 中的方法 | evaluate 方法执行Groovy脚本 )
【Groovy】MOP 元对象协议与元编程 ( 使用 Groovy 元编程进行函数拦截 | 动态拦截函数 | 动态获取 MetaClass 中的方法 | evaluate 方法执行Groovy脚本 )
204 0
【Groovy】MOP 元对象协议与元编程 ( 使用 Groovy 元编程进行函数拦截 | 动态拦截函数 | 动态获取 MetaClass 中的方法 | evaluate 方法执行Groovy脚本 )

热门文章

最新文章