【问题标题】:Servlet @WebServlet urlPatternsServlet @WebServlet urlPatterns
【发布时间】:2013-05-10 19:55:47
【问题描述】:

这是一个快速的问题,但我找不到快速的答案。 现在我有一个 servlet BaseServlet, 当用户请求以下任何网址时:

host
host/
host/BaseServlet

它应该始终引用同一个 servlet 并重定向到主页。

当我设置时

@WebServlet({"/BaseServlet", ""})

只有

host/
host/BaseServlet

作品

如果我设置

@WebServlet({"/BaseServlet", "", "/"})

BaseServlet 将在循环中不断被请求...

为什么?

编辑: BaseServlet 对隐藏在 WEB-INF 文件夹中的 index.html 进行转发,仅此而已。

getServletContext().getRequestDispatcher("/WEB-INF/index.html").forward(request,response);

servlet 规范说“仅包含 / 字符的字符串表示应用程序的“默认”servlet。”所以我希望 BaseServlet 成为我的默认设置。为什么它不起作用?

【问题讨论】:

  • 你如何处理响应?
  • 做一些预处理,然后用网页响应。
  • 该网页可能使 servlet 在您所说的循环中重新执行。向我们展示。
  • @SotiriosDelimanolis 我已经更新了帖子。谢谢!

标签: java servlets url-pattern


【解决方案1】:
  1. 正如您在 Q 中所说,如果您想要以下内容:

    host/
    host/BaseServlet
    

    使用

    @WebServlet({"/BaseServlet", ""})
    
  2. 如果您想要以下内容:

    host
    

    将此添加到您的欢迎文件中(您不能使用注释指定欢迎文件)

    <welcome-file-list>
        <welcome-file>/BaseServlet</welcome-file>
    </welcome-file-list>
    
  3. servlet 规范说 “仅包含 '/' 字符的字符串表示应用程序的“默认”servlet。”

    但事后直接说

    在这种情况下,servlet 路径是请求 URI 减去上下文路径 并且路径信息为空。

    换句话说,如果您的网址是

    host
    

    那么 servlet 路径将是

    "" (empty string)
    

    因此您将需要一个欢迎文件列表(但 webapp 目录中的 index.htm[l] 和 index.jsp,而不是 WEB-INF,被隐式包含为起始欢迎文件列表)

【讨论】:

    【解决方案2】:

    编辑:

    如果您想进行预处理,则可以使用带有 url-pattern "/*" 的过滤器并将调度程序设置为 REQUEST,这样它将忽略转发。

    最后一个值“/”表示所有请求。

    结帐讨论:http://www.coderanch.com/t/366340/Servlets/java/servlet-mapping-url-pattern

    在 Servlet 内部生成另一个对 index.html 的转发请求,该请求也被 servlet 拦截。

    如果您尝试 @WebServlet({"/BaseServlet", "/"}) 与 @WebServlet({"/BaseServlet", "", "/"}) 相同,则会导致相同的错误。

    您可以通过在 servlet 中输入以下输出语句来检查这一点:

    System.out.println(req.getRequestURL());
    

    【讨论】:

    • 谢谢。对不起,我没有及时回复,但我真的不明白你在说什么。 servlet 规范说“仅包含 / 字符的字符串表示应用程序的“默认”servlet。”所以我希望 BaseServlet 成为我的默认设置。为什么它不起作用?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-05
    • 2013-01-13
    • 1970-01-01
    • 2021-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多