将默认主页更改为使用doGet方法的servlet

14

我有一个小的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仍然显示相同的“Hello World”。

但它确实干扰了根目录上的所有文件,即http://localhost:8084/foo.css也被此servlet处理并获得其响应。

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

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

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

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

2个回答

25
我该如何将此页面的内容更改为其他内容?
在文本编辑器中打开基础的JSP/HTML/XHTML文件。此页面由web.xml中的<welcome-file>条目识别。如果它是例如<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>来实现此目的。这并不代表许多初学者所期望的“主页文件”,而是表示“当请求任何子文件夹时服务的文件夹默认文件”。因此不仅在/上,在/foo//bar/等文件夹上也是如此。

另请参阅:


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接