servlet过滤器实现维护项目
最近公司需要系统维护,提出要建一个维护系统,要求:
1、访问公司域名跳到系统首页
2、点击首页的任意按钮给出维护提示信息
3、用户访问之前收藏的任意系统链接跳转到首页
下面介绍下用过滤器实现上述需求
1、实现过滤器并配置
TestFilter.java
package com.controller; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletResponse; public class TestFilter implements Filter { public void init(FilterConfig filterConfig) throws ServletException { } public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletResponse httpResponse = (HttpServletResponse) servletResponse; httpResponse.sendRedirect("/test"); filterChain.doFilter(servletRequest, servletResponse); } public void destroy() { } }
注:做的测试,上面代码中的test就代表要跳转的首页链接。
web.xml配置
<filter> <filter-name>TestFilter</filter-name> <filter-class>com.controller.TestFilter</filter-class> </filter> <filter-mapping> <filter-name>TestFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
上面的过滤器对所有链接进行过滤后重定向到test方法请求的页面,本以为此时万事大吉,启动项目运行后发现一下两个问题
1)对于正确的访问(如http://localhost:8080/test)过滤器会出现循环过滤,出现错误
2)如果访问是不存在的链接则会报404错误
2、解决出现问题
对于上面出现的问题1,首先想到的是如何让过滤器对test方法不做过滤,上网查找后未找到合适的解决方案(还是认为次方法可行,后期如找到解决方案回补充),于是查看了下<filter-mapping>的属性,发现有<dispatcher>属性一枚,经过了解试验发现这是个可行的方案,于是web.xml配置修改如下
<filter> <filter-name>TestFilter</filter-name> <filter-class>com.controller.TestFilter</filter-class> </filter> <filter-mapping> <filter-name>TestFilter</filter-name> <url-pattern>/*</url-pattern> <dispatcher>ERROR</dispatcher> </filter-mapping>
此时,问题1得到的顺利的解决,但输入不存在的访问链接仍会报404,于是想到了servlet的<error-page>,在web.xml中做如下配置
<error-page> <exception-type>java.lang.Throwable</exception-type> <location>/404.jsp</location> </error-page> <error-page> <error-code>404</error-code> <location>/404.jsp</location> </error-page>
此时测试发现问题2也得到顺利解决。
关于<dispatcher>可参考http://www.cnblogs.com/xrq730/p/4929029.html