2015-12-14 1 views
1

это мой путьОшибка с Annotation в сервлет 3.x

<welcome-file>home</welcome-file> 

и мой сервлет, я объявляю URLPATTERN сильфонных

@WebServlet(urlPatterns="/home") 

вперед и подать homeview.jsp

 RequestDispatcher dispatcher = this.getServletContext().getRequestDispatcher("/SimpleWebApp/WebContent/WEB-INF/views/homeview.jsp"); 
dispatcher.forward(request, response); 

, но когда я запустил свое веб-приложение, это ошибка с htttp status 404 anyboby, помогите мне исправить? Спасибо alot

+1

В чем ошибка 404? – Perdomoff

+0

Запрошенный ресурс недоступен. –

+0

Вы смогли решить проблему? – Perdomoff

ответ

2

Ваш код работает корректно. Но,

Как и в структуре проекта, вы можете получить к нему доступ таким образом.

HomeController (YourServlet)

request.getRequestDispatcher("/WEB-INF/views/homeview.jsp").forward(request, response); 

Структура

WebContent 
     | 
     |__static 
     | 
     |__WEB-INF 
       |__lib 
       |__views/homeview.jsp 
       |__web.xml 
+0

Ты абсолютно прав. Я стараюсь, и он работает на Jetty. Я говорю немного по-английски. Писание хуже :) Извините. Я не пишу, чтобы попробовать это сам. –

+0

Спасибо, но я не использую Jetty, я просто изучаю servler и jsp около нескольких дней, и я не знаю, как использовать jetty.and я хочу использовать anotation –

+0

спасибо за критику. @BalusC –

0

Приветственный файл может быть только статический файл, так что, например, JSP или HTML-файла, он не может указать сервлет.

Если вы хотите, чтобы сервлет выступал в качестве приветственной страницы, вы должны установить его отображение в/*, что делает его сервлетом по умолчанию. Таким образом, в аннотации:

@WebServlet (urlPatterns = «/ *»)

Таким образом, сервлет будет вызываться всякий раз, когда поступает запрос, который не отображает какие-либо другие ресурсы.

Также вам необходимо исправить ваш прямой запрос, чтобы указать URL-адрес относительно корня содержимого приложения, как показано в другом ответе.

Для справки это то, как работает отображение в соответствии со спецификацией (этот текст взят из раздела 12.1 спецификации Servlet 3.0):

  1. Контейнер пытается найти точное совпадение пути запрос на путь сервлета. Успешное совпадение выбирает сервлет.

  2. Контейнер рекурсивно попытается сопоставить самый длинный префикс пути. Это делается путем постепенного изменения дерева путей по каталогу за раз, используя символ «/» в качестве разделителя путей. Наибольшее совпадение определяет выбранный сервлет.

  3. Если последний сегмент в URL-адресе содержит расширение (например, .jsp), контейнер сервлетов попытается сопоставить сервлет, обрабатывающий запросы для расширения. Расширение определяется как часть последнего сегмента после последнего символа «.».

Если ни одно из предыдущих трех правил не приводит к совпадению сервлета, контейнер будет пытаться обслуживать контент, соответствующий запрашиваемому ресурсу. Если для приложения определен «сервлет по умолчанию», он будет использоваться. Многие контейнеры предоставляют неявный сервлет по умолчанию для обслуживания контента.

+0

Im исправлено done.error не в коде и структуре project.I проверил мой homview.jsp и нашел здесь ошибку здесь (я включаю _fooder и _header для homeview, но это ошибка). Спасибо всем! –

 Смежные вопросы

  • Нет связанных вопросов^_^