java 过滤器详细知识
来源:互联网 发布:掌中宝app软件下载 编辑:程序博客网 时间:2024/05/03 21:00
过滤器工作原理
用户请求经过过滤器判断后 过滤器将用户请求发送至web资源 web资源将资源响应发送至过滤器 过滤器将web资源的响应发送给用户
过滤器的生命周期
实例化 web.xml配置 在web容器启动后实例化一次
初始化 init方法
过滤 doFilter
销毁 destroy()
过滤器可以改变用户请求的web资源,改变用户请求的路径
过滤器不可以直接返回用户数据
多个过滤器用户请求会先执行放行前的过滤器1的方法 在执行chin.doFilter方法到达 过滤器2 执行过滤器2 的放行前的方法 接着执行chain.doFilter到达
servlet service方法 然后返回过滤器2 执行过滤器2 放行后的方法 在执行过滤器1 放行后的方法 最后反馈给用户请求
下面为Filter链的实例
public class FirstFilter implements Filter{
public void destroy() {
// TODO Auto-generated method stub
System.out.println("firstfilter destroy");
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
System.out.println("firstfilter start");
chain.doFilter(request, response);
System.out.println("firstfilter end");
}
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
System.out.println("firstfilter init");
}
}
public class SecondFilter implements Filter{
public void destroy() {
// TODO Auto-generated method stub
System.out.println("second filter destroy");
}
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
// TODO Auto-generated method stub
System.out.println("sencond filter start");
arg2.doFilter(arg0, arg1);
System.out.println("second filter end");
}
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
System.out.println("second filter init");
}
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name></display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>first</filter-name>
<filter-class>com.gac.test.FirstFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>first</filter-name>
<url-pattern>/index.jsp</url-pattern>
</filter-mapping>
<filter>
<filter-name>second</filter-name>
<filter-class>com.gac.test.SecondFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>second</filter-name>
<url-pattern>/index.jsp</url-pattern>
</filter-mapping>
</web-app>
打印结果为
second filter init
firstfilter init
2015-7-30 14:41:41 org.apache.coyote.http11.Http11Protocol start
信息: Starting Coyote HTTP/1.1 on http-8080
2015-7-30 14:41:41 org.apache.jk.common.ChannelSocket init
信息: JK: ajp13 listening on /0.0.0.0:8009
2015-7-30 14:41:41 org.apache.jk.server.JkMain start
信息: Jk running ID=0 time=1/10 config=null
2015-7-30 14:41:41 org.apache.catalina.startup.Catalina start
信息: Server startup in 361 ms
firstfilter start
sencond filter start
//这里处理jsp页面
second filter end
firstfilter end
servlet2.5过滤器分为
REQUEST 用户直接访问页面时,web容器将会调用过滤器
FORWARD 目标用户通过RequestDispatcher的forward访问时该过滤器被调用 在jsp页面中引入<jsp:forward page="main.jsp"></jsp:forward>标签 就会调用过滤器forward配置的过滤器
INCLUDE 目标资源通过RequestDispatcher的include方法调用时,该过滤器被调用 在jsp页面中引入<jsp:include page=""></jsp:include>
ERROR 目标资源通过声明式异常处理机制调用时,过滤器将被调用。
Servelt3.0 ASYNC 支持异步处理 @WebFilter 用于将一个类声明为过滤器,该注解将会在部署时被容器处理,容器根据具体的属性配置将相应
的类部署为过滤器。 @WebFilter常用属性:??
- java 过滤器详细知识
- 边学边笔记-Java中的过滤器详细笔记之创建过滤器
- 很详细的Java多线程知识
- 过滤器知识总结
- 过滤器相关知识汇总
- 详细说下过滤器:
- 全自动过滤器:自动叠片式过滤器详细介绍
- 过滤器:活性碳过滤器的技术参数详细解读
- 过滤器:自清洗过滤器适用范围详细说明
- Java 8教程(知识内容详细,快速学习Java 8)
- java过滤器
- java 过滤器
- java 过滤器
- java 过滤器
- Java过滤器
- java 过滤器
- java过滤器
- JAVA过滤器
- block中用到self要特别注意内存泄露问题
- http协议详解(转自乔晓松的博客)
- 百度地图提供服务——本地搜索,范围搜索
- 编译android源码apk是否生成odex方法
- java操作redis
- java 过滤器详细知识
- 百度地图提供服务——本地搜索,范围搜索
- 用两个栈实现队列
- cocos2dx创建精灵的五种方法(包括使用图片名获取图片)
- 百度地图提供服务——本地搜索,范围搜索
- 用了2年的EOS的感受
- 查看链表是否有环(数据结构C++表示)
- [C++][常识]
- Docker