我有一个小型 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 文件。此页面标识为 <welcome-file>
条目 web.xml
。如果是例如<welcome-file>index.jsp</welcome-file>
,那么你需要打开/index.jsp
在 IDE 内置文本编辑器中将文件添加到项目的 Web 内容中。
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 的所有职责,例如提供 CSS 文件等静态资源、添加浏览器缓存 header 、支持文件下载恢复等。有关详细信息,另请参阅下面的第一个相关链接。
至少不用滥用<welcome-file>
为了这。这并不代表许多初学者所期望的“主页文件”。这表示“请求任何子文件夹时提供的文件夹默认文件”。因此不仅在 /
,还可以在 /foo/
上, /bar/
等
另请参阅:
关于servlets - 使用 doGet 将根路径中的默认主页更改为 servlet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33248473/