使用 doGet 将根路径中的默认主页更改为 servlet

问题描述 投票:0回答:2

我有一个小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
2个回答
25
投票

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

在文本编辑器中打开底层 JSP/HTML/XHTML 文件。此页面由

<welcome-file>
中的
web.xml
条目标识。如果是例如
<welcome-file>index.jsp</welcome-file>
,那么您需要在 IDE 内置文本编辑器中打开项目 Web 内容中的
/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文件等静态资源、添加浏览器缓存标头、支持文件下载恢复等。有关详细信息,另请参阅下面的第一个相关链接。

至少没必要为此滥用

<welcome-file>
。这并不代表许多初学者所期望的“主页文件”。这表示“当请求any子文件夹时要提供的文件夹的默认文件”。因此,不仅在
/
上,而且在
/foo/
/bar/

另请参阅:


0
投票

每当您在 web.xml 中定义

<welcome-file>index.jsp</welcome-file>
登陆页面时,当您启动应用程序时,该应用程序将是 index.jsp 页面,即默认情况下 servlet 路径将为“/index.jsp”(http://localhost:8084 /index.jsp)。但是在浏览器中不会显示。在您的 servlet 类中,您可以匹配此模式并根据需要重定向到其他页面。

© www.soinside.com 2019 - 2024. All rights reserved.