【问题标题】:java: question on filter and servlet mappingjava: 关于过滤器和 servlet 映射的问题
【发布时间】:2011-06-29 08:41:30
【问题描述】:

我有一个具有以下结构的 Web 应用程序:

TOMCAT_HOME
  |
   webapps
     |_myapp
          |-html/
          |-various directories
          |-WEB-INF/
          |-index.html

该应用程序具有通过各种路径注册的各种 servlet。
应用程序本身可以通过http://IP:PORT/myapp/访问
这门课程导致获得index.html(在欢迎列表中)。
我的问题是,我将如何注册一个过滤器来专门访问根目录但 not 子目录,即 url 映射 not/* 如果我放置为 url-pattern / 似乎不起作用。
所以过滤器只会拦截这个请求http://IP:PORT/myapp/而不是http://IP:PORT/myapp/pathhttp://IP:PORT/myapp/servlet/path
此外,过滤器会拦截像 http://IP:PORT/myapp/index.html 这样的请求,这相当于我的目标。

谢谢

【问题讨论】:

    标签: java web-applications tomcat servlets servlet-filters


    【解决方案1】:

    那么为什么不将过滤器设置为/index.html呢?它不会导致您的子目录被过滤。

    【讨论】:

      【解决方案2】:

      您可以轻松测试/ 并执行您的操作,否则让它通过。使用/* URL 模式。

      @Override
      public void doFilter(ServletRequest req,ServletResponse res,FilterChain chain)
          throws IOException,ServletException{
      
          HttpServletRequest request=(HttpServletRequest)req;
          String path=request.getServletPath();
      
          if(path.equals("/") || path.equals("/index.html"){
              // do your thing
          }
      
          chain.doFilter(req,res);
      }
      

      【讨论】:

      • 我现在就是这样做的,但我不想硬编码代码中路径的字符串比较。如果可能的话,希望通过配置来完成
      • @user:在这种情况下,您应该在 web.xml 中配置一个 init 参数并从 ServletContext 中检索它,您可以从传递给 init() 方法的 FilterConfig 对象中获取它.
      • 对不起,我没有关注:要传递什么参数?路径?
      • 您希望从 web.xml 传递到应用程序的任何值都应该是一个 init 参数。
      猜你喜欢
      • 1970-01-01
      • 2023-03-08
      • 2015-04-27
      • 1970-01-01
      • 2012-04-24
      • 2011-04-10
      • 2023-03-17
      • 2013-10-05
      • 2011-09-01
      相关资源
      最近更新 更多