这是一个快速的问题,但我找不到快速的答案。
现在我有一个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成为我的默认设置。为什么不起作用?

最佳答案

  • 如果您要在Q中声明,则需要执行以下操作:
    host/
    host/BaseServlet
    


    @WebServlet({"/BaseServlet", ""})
    
  • 如果您需要以下内容:
    host
    

    将此添加到您的欢迎文件中(您不能使用批注指定欢迎文件)
    <welcome-file-list>
        <welcome-file>/BaseServlet</welcome-file>
    </welcome-file-list>
    


  • 但事后直接说



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

    那么servlet路径将是
    "" (empty string)
    

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

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

  • 10-11 21:41