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

时间:2015-10-20 23:23:19

标签: servlets homescreen

我有一个小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

2 个答案:

答案 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类中,您可以匹配此模式,并在需要时重定向到其他页面。