zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    poj 1579(动态规划初探之记忆化搜索)
    hdu 1133(卡特兰数变形)
    CodeForces 625A Guest From the Past
    CodeForces 625D Finals in arithmetic
    CDOJ 1268 Open the lightings
    HDU 4008 Parent and son
    HDU 4044 GeoDefense
    HDU 4169 UVALive 5741 Wealthy Family
    HDU 3452 Bonsai
    HDU 3586 Information Disturbing
  • 原文地址:https://www.cnblogs.com/sunjf/p/servlet_dispatcher.html
Copyright © 2011-2022 走看看