java - Servlet @WebServlet urlPatterns

标签 java servlets url-pattern

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

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 成为我的默认设置。为什么它不起作用?

最佳答案

  1. 如您在 Q 中所述,如果您需要以下内容:

    host/
    host/BaseServlet
    

    使用

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

    host
    

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

    <welcome-file-list>
        <welcome-file>/BaseServlet</welcome-file>
    </welcome-file-list>
    
  3. The servlet spec says "A string containing only the '/' character indicates the "default" servlet of the application."

    但是后面直接说了

    In this case the servlet path is the request URI minus the context path and the path info is null.

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

    host
    

    那么servlet路径就是

    "" (empty string)
    

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

关于java - Servlet @WebServlet urlPatterns,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16578694/

相关文章:

java - 添加计时器并显示标签文本

java - 从 apache tomcat 发送邮件

java - GWT RemoteServiceServlet 请求滞后;没有反应

javascript - 如何查看服务器发出的用户请求?

python - 具有无限数量参数的 Django urlpattern

java - 如何从 MapReduce 中引用本地 HDFS 文件?

Java USB 事件监听器,用于在 USB 插入时收到通知

java - 在整个 JTable 组件上右键单击 MouseListener

java -/faces/index.xhtml 在 ExternalContext 中找不到 Glassfish 中的资源

django - 使用带命名空间的参数反转 'password_reset_done'