#java #jsf #servlets
#java #jsf #сервлеты
Вопрос:
Я пытаюсь создать сервлет внутри проекта JSF. Это первый сервлет, который я создал и использую http://www.servletworld.com/servlet-tutorials/simple-servlet-example.html в качестве примера, который поможет мне начать.
Единственное, что моя структура папок немного отличается из-за существующего jsf.
Я могу получить form.html страница для отображения, но когда я ввожу свое имя и нажимаю отправить, я получаю 404.
Моя структура папок следующая (показаны только соответствующие файлы)
catalog (my project in eclipse)
- src
- a
- b
- c
- catalog
- backing
- WelcomeServlet.java
- WebContent
- catalog
- form.html
- WEB-INF
- web.xml
- classes
- a
- b
- c
- catalog
- backing
- WelcomeServlet.class
Вот сопоставления сервлетов в web.xml
<servlet>
<servlet-name>WelcomeServlet</servlet-name>
<servlet-class>a.b.c.catalog.backing.WelcomeServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>WelcomeServlet</servlet-name>
<url-pattern>/WelcomeServlet</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>/form.html </welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>/index.jsp</welcome-file>
<welcome-file>/index.html</welcome-file>
</welcome-file-list>
Этот URL выводит form.html страница в порядке http://localhost:8080/catalog/catalog/form.html
Когда вы нажимаете кнопку отправки, появляется URL http://localhost:8080/catalog/catalog/WelcomeServlet и это выдает ошибку 404. Я думаю, что в моем web.xml файл, но я не уверен, и я не могу в этом разобраться.
Спасибо
Комментарии:
1. Есть ли у вас какие-либо другие сопоставления сервлетов, объявленные в web.xml ?
2. ДА. Я отредактировал вопрос с остальными сопоставлениями сервлетов для части jsf.
Ответ №1:
Попробуйте добавить это после первого сопоставления сервлета:
<servlet-mapping>
<servlet-name>WelcomeServlet</servlet-name>
<url-pattern>/catalog/WelcomeServlet</url-pattern>
</servlet-mapping>
Комментарии:
1. Это работает, но я бы счел это обходным путем. Я не могу представить, что URL catalog / каталог / WelcomeServlet был бы намерением разработчика.
2. Необходимо прояснить некоторые вопросы о пути: корень контекста, вероятно, мог бы быть более чистым, но я ожидаю, что конкретный артефакт основан на том, как страница JSP генерирует ссылки. Если JSP не выполняет удвоение в корневом каталоге контекста, то дополнительный каталог не обязательно должен быть там.
Ответ №2:
Из того, что я вижу, ваш сервлет сопоставлен с contextroot / WelcomeServlet, и вы переходите к contextroot / catalog / WelcomeServlet. Это не одно и то же.
Я предполагаю, что вы забыли косую черту в своем html.
Комментарии:
1. Извините, но я не понимаю, что нужно сделать. Не могли бы вы, пожалуйста, пояснить?