使用 doGet 将根路径中的默认主页更改为 servlet
Change default homepage in root path to servlet with doGet
我有一个小型 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
How can I change the contents of this page to something else ?
在文本编辑器中打开基础 JSP/HTML/XHTML 文件。此页面由 web.xml
中的 <welcome-file>
条目标识。如果是例如<welcome-file>index.jsp</welcome-file>
,然后您需要在 IDE 内置文本编辑器中打开项目 Web 内容中的 /index.jsp
文件。
Or, at the very least (if the former is impossible): Can I use a permanent redirect on root path to avoid the user from seeing this page?
这个问题想的很烂。您不想一直来回重定向访问者。您希望将您的 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 的所有职责,例如提供 [=52] 等静态资源=] 文件,添加 browser-caching headers,支持文件下载恢复等。另请参阅下面第一个相关的 link 了解详细信息。
至少没必要为此滥用<welcome-file>
。这并不代表许多初学者似乎期望的“主页文件”。这表示“在请求 any 子文件夹时提供的文件夹默认文件”。因此,不仅在 /
上,而且在 /foo/
、/bar/
等
上
另请参阅:
每当您在 web.xml 登录页面中定义 <welcome-file>index.jsp</welcome-file>
时,启动应用程序时将是 index.jsp 页面,即默认情况下,servlet 路径将为“/index.jsp”(http://localhost:8084/index.jsp)。但是在浏览器中不会显示。在您的 servlet class 中,您可以匹配此模式并在需要时重定向到其他页面。
我有一个小型 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
How can I change the contents of this page to something else ?
在文本编辑器中打开基础 JSP/HTML/XHTML 文件。此页面由 web.xml
中的 <welcome-file>
条目标识。如果是例如<welcome-file>index.jsp</welcome-file>
,然后您需要在 IDE 内置文本编辑器中打开项目 Web 内容中的 /index.jsp
文件。
Or, at the very least (if the former is impossible): Can I use a permanent redirect on root path to avoid the user from seeing this page?
这个问题想的很烂。您不想一直来回重定向访问者。您希望将您的 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 的所有职责,例如提供 [=52] 等静态资源=] 文件,添加 browser-caching headers,支持文件下载恢复等。另请参阅下面第一个相关的 link 了解详细信息。
至少没必要为此滥用<welcome-file>
。这并不代表许多初学者似乎期望的“主页文件”。这表示“在请求 any 子文件夹时提供的文件夹默认文件”。因此,不仅在 /
上,而且在 /foo/
、/bar/
等
另请参阅:
每当您在 web.xml 登录页面中定义 <welcome-file>index.jsp</welcome-file>
时,启动应用程序时将是 index.jsp 页面,即默认情况下,servlet 路径将为“/index.jsp”(http://localhost:8084/index.jsp)。但是在浏览器中不会显示。在您的 servlet class 中,您可以匹配此模式并在需要时重定向到其他页面。