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

标签 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 = {"/"}) 但是,它没有按预期工作。

即它仍然在以下位置显示相同的 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/

相关文章:

android - 如何以编程方式在android中启动特定主页

CSS 规则未正确/完整应用

ios - 更改主屏幕快速操作图标位置

java - App Engine Java Servlet 不连接到 Cloud SQL

java - 即使类和构造函数存在,也无法实例化类型

mysql - Java Servlet 处理 SQL 错误

Java servlet 访问配置文件

java - 将集合填充到 JSP 页面时出现 404 错误

主屏幕上的 iPhone 网络应用程序总是会重新加载在应用程序之间切换

iphone - 在主屏幕上添加的网站图标上显示标准角标(Badge)