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

  • 相关阅读:
    关于表单提交的数据记录
    Hrbust 2363 Symmys (Manacher + DP)
    Codeforces 911F Tree Destruction(贪心 && 树的直径)
    Codeforces 903F Clear The Matrix(状态压缩DP)
    HDU 6229 Wandering Robots(2017 沈阳区域赛 M题,结论)
    Codeforces 912D Fishes (概率&期望,优先队列的应用)
    Codeforces 912E Prime Gift(预处理 + 双指针 + 二分答案)
    HDU 6251 Inkopolis(2017 CCPC-Final,I题,环套树 + 结论)
    HDU 6249 Alice’s Stamps(2017 CCPC-Final G题,DP)
    2017 ACM-ICPC EC-Final 记录
  • 原文地址:https://www.cnblogs.com/sunjf/p/servlet_dispatcher.html
Copyright © 2011-2022 走看看