项目整体结构:
将项目添加到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。