Измените домашнюю страницу по умолчанию в корневом пути на сервлет с помощью 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

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

Итак, мой вопрос (на самом деле два):

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

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

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

2 ответа

Решение

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

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


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

Этот вопрос плохо продуман. Вы не хотите перенаправлять посетителя вперед и назад все время. Вы хотите отобразить свой сервлет в корне веб-приложения. Чтобы сопоставить сервлет с корневым путем, используйте шаблон 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/, так далее.

Смотрите также:

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

Другие вопросы по тегам