Filter
来源:互联网 发布:linux数据库迁移 编辑:程序博客网 时间:2024/05/16 07:59
Filter是sun继Servlet之后发布的技术,到现在为止,已经很成熟了。Filter在WEB应用中非常重要,因为Filter可以对HttpServletRequest和HttpServletResponse进行处理。下面来看看怎么定制自己的Filter。
接口Filter
所有的自定制的Filter都必须实现javax.servlet.Filter接口,该接口原型如下:
public interface Filter{ public void init(FilterConfig config); public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain); public void destroy();}其中init方法是用来在Filter被装载后初始化Filter所占有的资源的,而doFilter方法则是提供对request和response对象的处理,destroy方法是用来在Filter被卸载后释放Filter所占用的资源的。
Filter的生命周期
一个Filter在WEB程序开始的时候便会被装载进入到WEB容器,紧接着会被调用init方法来初始化资源。然后对特定的URL进行服务,也就是doFilter,这个方法会在服务期间被调用多次。最后在WEB程序被关闭时,在卸载Filter之前,调用destroy方法来释放占用的资源。
配置Filter
Filter的配置在WEB程序的部署文件中,即web.xml。
<filter> <filter-name>autherization</filter-name> <filter-class>com.daniel.model.filter.AutherizationFilter</filter-class> </filter> <filter-mapping> <filter-name>autherization</filter-name> <url-pattern>*.jsp</url-pattern> </filter-mapping>这样的配置想必也很简单易懂了,此外需要注意的是,一个Filter可以配置多个<url-pattern>。<filter-mapping>还可以配置<dispatcher>元素(配置一个或者多个),该元素的取值有以下的四种:
REQUEST、FORWARD、INCLUDE、ERROR。
REQUEST:是当请求为REQUEST时Filter起作用;
FORWARD:当服务器端重定向时Filter起作用;
INCLUDE:当请求的页面中有<jsp:include>时起作用;
ERROR:当请求的页面指定了错误页时起作用;
其中,默认值为REQUEST。
一个自定制Filter的例子
Filter在WEB中的用处非常大,这里展示的是一个对用户访问jsp页面时进行用户名验证的Filter。
public class AutherizationFilter implements Filter {/* (non-Javadoc) * @see javax.servlet.Filter#destroy() */public void destroy() {// TODO Auto-generated method stub}/* (non-Javadoc) * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain) */public void doFilter(ServletRequest arg0, ServletResponse arg1,FilterChain arg2) throws IOException, ServletException {// TODO Auto-generated method stubHttpServletRequest request = (HttpServletRequest )arg0;String uri = request.getRequestURI();String fileName = uri.substring(uri.lastIndexOf("/") + 1);int startIndex = fileName.lastIndexOf(".");String prefix = fileName.substring(0, startIndex);//对特定的index.jsp或者Login.jsp则不要求提供用户名验证if(prefix.equals("index") || prefix.equals("Login")){arg2.doFilter(arg0, arg1);}else{HttpSession session = request.getSession();BaseUser user = (BaseUser) session.getAttribute("user");if(user == null){HttpServletResponse response = (HttpServletResponse)arg1;response.sendRedirect("/struts-spring-hibernate/jsp/Login.jsp");}else{arg2.doFilter(arg0, arg1);}}}/* (non-Javadoc) * @see javax.servlet.Filter#init(javax.servlet.FilterConfig) */public void init(FilterConfig arg0) throws ServletException {// TODO Auto-generated method stub}}其中,当chain.doFilter被调用后,request对和response对象会被传递给后续的Filter进行处理。
Filter的配置:
<!-- Filter:对所有的jsp页面进行登录控制 --> <!-- begin --> <filter> <filter-name>autherization</filter-name> <filter-class>com.daniel.model.filter.AutherizationFilter</filter-class> </filter> <filter-mapping> <filter-name>autherization</filter-name> <url-pattern>*.jsp</url-pattern> </filter-mapping> <!-- end -->这样子,如果用户在没有登录就去访问jsp页面(除了index.jsp和Login.jsp之外),就会被客户端重定向到Login.jsp来请求用户登录。
0 0
- Filter
- Filter
- Filter
- filter
- filter
- Filter
- filter
- Filter
- filter
- filter
- Filter
- Filter
- Filter
- Filter
- filter
- Filter
- Filter
- filter
- NOJ [1374] Find The Law
- 浅入浅出JVM
- 浅谈realloc,malloc,calloc的区别
- mysql存储过程语法学习
- 电商实训三:网店经营
- Filter
- JSP中out.println()为啥不换行解释
- nand flash 裸板驱动及时序
- Delphi Leftstr,Rightstr函数应用
- 各种计算机语言
- Windows核心编程Dll注入之远程线程
- iptables 防火墙 ping
- Python入门教程
- 高中生围殴老师