关于java中的过滤器
来源:互联网 发布:蜻蜓fm电脑软件 编辑:程序博客网 时间:2024/05/16 05:18
今天接触了一下,过滤器,虽然说以前学习Jsp的时候也稍微看了一下,但是受当时的眼界局限所致,看的昏头昏脑,一知半解。今天重新了解了一下。
过滤器是一个类,实现javax.servlet.Filter这个类(接口),作用如下:
1.在http请求到达指定资源(servlet或者url)之前,拦截到request,并更新request,再提交到指定资源。
2.在web服务器处理请求之后,发送响应到客户端之前,拦截到response,更新response,再提交到web客户端(浏览器)。
Filter接口有三个抽象方法需要实现:
package Filter;
import java.io.IOException;
import java.util.Date;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class MyFilter implements Filter{
private String mTitle;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
String testParamString=filterConfig.getInitParameter("Test");
System.out.println("测试参数:"+testParamString);
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
System.out.println("Filter1");
chain.doFilter(request, response);
System.out.println("Filter1");
}
@Override
public void destroy() {
// TODO Auto-generated method stub
}
}
Filter的生命周期:
Filter实例被创建时候,调用init()方法。
Filter的过滤实际操作在doFilter()方法中定义。
Filter实例被销毁的时候,调用destory()方法。
doFilter方法中,chain.doFilter(request,response)方法调用下一个过滤器,若下一个过滤器不存在,则到达指定资源。在chain.doFilter(request,response)方法前面所写代码用于处理拦截到的request,这段代码在到达指定资源前执行;在chain.doFilter(request,response)方法后面所写代码用于处理拦截到的response,这段代码在web服务器响应请求之后,响应(response)到达浏览器之前执行。
这其中最重要的事doFilter方法的定义。
过滤器要想起作用,除了编写上面那么一个过滤器类之外,还需要在web.xml部署文件中声明过滤器:
<filter>
<filter-name>MyFilter</filter-name>
<filter-class>Filter.MyFilter</filter-class>
<init-param>
<param-name>Test</param-name>
<param-value>哈哈哈哈1</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>MyFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
解释一下上面的参数:
<init-param>中定义的事过滤器的初始化参数,在类中可以通过FilterConfig.getinitParamter("");得到这个参数值。
<url-pattern>中定义的是,所需要拦截的具体路径(可以使任何一个servlet或者url,在或者/*)。
现在知道,过滤器的定义方法和实现servlet有些类似吧。
最后,在实际的项目中,过滤器的使用很普遍,所以过滤器不会只用一个,可能对于一个路径或者一个servlet有多个过滤器起作用,那么这就组成了一条过滤器链,之前在doFilter()中的chain.doFilter(request,response)方法就是用于一个个过滤器之间的跳转衔接,过滤器链中的过滤器执行顺序和web.xml中过滤器部署先后有关系。
有时候,如需终止过滤器链,只需要不执行chain.doFilter(request,response)即可,而是重定向到另外的指定页面。
0 0
- 关于java中的过滤器
- Java Web 中的过滤器
- Java中的过滤器
- Java中的过滤器
- Java Web中的过滤器
- Java中的Filter过滤器
- Java中的Filter过滤器
- Java中的Filter过滤器
- JAVA中的过滤器Filter
- Java中的Filter过滤器
- java中的过滤器
- java中的Filter过滤器
- Java中的Filter过滤器
- Java中的Filter过滤器
- java中的过滤器
- Java中的Filter过滤器
- Java中的Filter 过滤器
- java中的过滤器
- Extjs 控件属性大全
- iOS 无线滚动相册之scrollView
- 学Android---Manifest.xml
- Java线程:概念与原理
- android中RecyclerView
- 关于java中的过滤器
- android4.0 USB Camera实例(六)ffmpeg mpeg编码
- 栈应用1:算术表达式求值
- session-timer
- 如何在Android手机上退出Google帐号
- ReactiveCocoa - iOS开发的新框架
- CentOS 6.3 下安装配置GO 1.2.1
- Unity3D之在Scene窗口显示Waypoint路径
- 软件工程