Изменить домашнюю страницу по умолчанию в корневом пути к сервлету с помощью doGet

У меня есть небольшой 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>

Я попытался создать сервлет, чтобы заменить его, используя:

@WebServlet(name = "HomeServlet", urlPatterns = {"/"}) однако он не работал должным образом.

т.е. он по-прежнему показал тот же мир приветствия: http://localhost:8084

Но он действительно возился со всеми файлами в корне. i.e http://localhost:8084/foo.css обрабатывался этим сервлетом и получал его ответ.

Итак, мой вопрос (фактически два):

Как изменить содержимое этой страницы на другое?

Или, по крайней мере (если первое невозможно): Могу ли я использовать постоянную переадресацию на корневом пути, чтобы пользователь не мог видеть эту страницу?

(то есть http-код 301), чтобы переместить пользователя на http://localhost:8084/home

Ответ 1

Как я могу изменить содержимое этой страницы на что-то еще?

Откройте основной файл JSP/HTML/XHTML в текстовом редакторе. Эта страница идентифицируется <welcome-file> в web.xml. Если это, например, <welcome-file>index.jsp</welcome-file>, вам нужно открыть файл /index.jsp в веб-контенте проекта в встроенном текстовом редакторе IDE.


Или, по крайней мере (если первое невозможно): Могу ли я использовать постоянную переадресацию на корневом пути, чтобы пользователь не мог видеть эту страницу?

Этот вопрос плохо продумано. Вы не хотите перенаправлять посетителя вперед и назад все время. Вы хотите нанести свой сервлет на root webapp. Чтобы сопоставить сервлет в корневом пути, используйте шаблон пустой строки URL "" вместо шаблона URL сервлета по умолчанию "/", как в вашей попытке.

@WebServlet("")

Или, если вы еще не находитесь на Servlet 3.0, здесь старомодный способ web.xml.

<servlet-mapping>
    <servlet-name>yourHomeServlet</servlet-name>
    <url-pattern></url-pattern> <!-- Yes, empty string! -->
</servlet-mapping>

Если вы по-прежнему используете шаблон URL сервлета по умолчанию "/", тогда вам необходимо взять на себя все обязанности контейнера, встроенного в сервлет по умолчанию, например, обслуживать статические ресурсы, такие как файлы CSS, добавлять заголовки браузера-кеширования, поддерживать файл скачать резюме и т.д. См. также первую связанную ссылку ниже для подробностей.

По крайней мере, для этого не нужно злоупотреблять <welcome-file>. Это не представляет собой "файл главной страницы", как кажется многим ожидающим. Это представляет собой "файл по умолчанию для папки, который будет использоваться, когда запрашивается подпапка любая". Таким образом, не только на /, но и на /foo/, /bar/ и т.д.

См. также:

Ответ 2

Всякий раз, когда вы определяете <welcome-file>index.jsp</welcome-file> в web.xml целевую страницу, при запуске приложения будет страница index.jsp, то есть по умолчанию путь сервлета будет "/index.jsp" (http://localhost:8084/index.jsp). Однако в браузере, который не будет отображаться. В вашем классе сервлета вы можете сопоставить этот шаблон и перенаправить на какую-либо другую страницу, если это необходимо.