我有一个小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 = {"/"})
然而,它没有按预期工作。
即。它仍然显示了同样的问候世界:http://localhost:8084
但它确实搞乱了根上的所有文件,即http://localhost:8084/foo.css
正在由此servlet处理并获得其响应。
所以,我的问题是(实际上是两个):
如何将此页面的内容更改为其他内容?
或者,至少(如果前者不可能):我可以在根路径上使用永久重定向来避免用户看到此页面吗?
(即http码301)将用户移至http://localhost:8084/home
答案 0 :(得分:18)
如何将此页面的内容更改为其他内容?
在文本编辑器中打开基础JSP / HTML / XHTML文件。此页面由<welcome-file>
中的web.xml
条目标识。如果它是例如<welcome-file>index.jsp</welcome-file>
,然后您需要在IDE内置文本编辑器中打开项目Web内容中的/index.jsp
文件。
或者,至少(如果前者不可能):我可以在根路径上使用永久重定向来避免用户看到此页面吗?
这个问题经过深思熟虑。您不希望一直向前和向后重定向访问者。您希望在webapp根目录上映射您的servlet。要在根路径上映射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>
。这并不代表许多初学者似乎期待的“主页文件”。这表示“请求任何子文件夹时要提供的文件夹的默认文件”。因此,不仅在/
,而且在/foo/
,/bar/
等。
答案 1 :(得分:0)
每当你在web.xml中定义<welcome-file>index.jsp</welcome-file>
着陆页时,启动应用程序时都会是index.jsp页面,即默认情况下servlet路径为“/index.jsp”({{3} })。但是在浏览器中不会显示。在您的servlet类中,您可以匹配此模式,并在需要时重定向到其他页面。