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

原文地址:https://www.cnblogs.com/sunjf/p/servlet_dispatcher.html