【问题标题】:Change default homepage in root path to servlet with doGet使用 doGet 将根路径中的默认主页更改为 servlet
【发布时间】:2025-12-04 22:20:08
【问题描述】:

我有一个小型 maven(间接通过 Netbeans 8.1 和 tomcat 设置)

每当我运行项目时,它都会在根目录上打开带有 HelloWord 的浏览器:

http://localhost:8084/上的页面是:

<html>
    <head>
        <title>Start Page</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    </head>
    <body>
        <h1>Hello World!</h1>
    </body>
</html>

我尝试创建一个 servlet 来替换它:

@WebServlet(name = "HomeServlet", urlPatterns = {"/"}) 但是,它没有按预期工作。

即它仍然显示相同的 hello world:http://localhost:8084

但它确实弄乱了根目录上的所有文件,即 http://localhost:8084/foo.css 也被这个 servlet 处理并得到它的响应。

所以,我的问题是(实际上是两个):

如何将此页面的内容更改为其他内容?

或者,至少(如果前者是不可能的):我可以在根路径上使用永久重定向来避免用户看到这个页面吗?

(即http代码301)将用户移动到http://localhost:8084/home

【问题讨论】:

    标签: servlets homescreen


    【解决方案1】:

    我怎样才能把这个页面的内容改成别的?

    在文本编辑器中打开底层的 JSP/HTML/XHTML 文件。此页面由web.xml 中的&lt;welcome-file&gt; 条目标识。如果是例如&lt;welcome-file&gt;index.jsp&lt;/welcome-file&gt;,那么您需要在 IDE 内置文本编辑器中打开项目网页内容中的 /index.jsp 文件。


    或者,至少(如果前者不可能的话):我可以在根路径上使用永久重定向来避免用户看到这个页面吗?

    这个问题经过深思熟虑。您不想一直来回重定向访问者。您想将您的 servlet 映射到 webapp 根目录。为了在根路径上映射 servlet,请使用空字符串 URL 模式 "" 而不是您尝试的默认 servlet URL 模式 "/"

    @WebServlet("")
    

    或者,如果您还没有使用 Servlet 3.0,这里是老式的 web.xml 方式。

    <servlet-mapping>
        <servlet-name>yourHomeServlet</servlet-name>
        <url-pattern></url-pattern> <!-- Yes, empty string! -->
    </servlet-mapping>
    

    如果你仍然使用"/"的默认servlet URL模式,那么你必须接管容器内置默认servlet的所有职责,例如提供静态资源如CSS文件、添加浏览器缓存头、支持文件下载简历等。详情另见下方第一个相关链接。

    至少没有必要为此滥用&lt;welcome-file&gt;。这并不代表许多初学者似乎期望的“主页文件”。这表示“请求任何子文件夹时要提供的文件夹的默认文件”。因此不仅在/ 上,而且在/foo//bar/ 等上。

    另见:

    【讨论】:

      【解决方案2】:

      每当您在 web.xml 中定义一个 &lt;welcome-file&gt;index.jsp&lt;/welcome-file&gt; 时,登录页面,当您启动应用程序时将是 index.jsp 页面,即默认情况下,servlet 路径将是“/index.jsp”(http://localhost:8084/index.jsp)。但是在浏览器中不会显示。在您的 servlet 类中,您可以匹配此模式并在需要时重定向到其他页面。

      【讨论】: