Это не проблема.Это ожидаемое поведение.Вы просто не понимаете, как работает базовый Servlet API.Вы настроили стандарт JSF FacesServlet
для прослушивания URL-адресов, соответствующих /faces/*
, и настроили специфичные для Apache MyFaces MyFacesServlet
для прослушивания URls, соответствующих *.jsf
и *.faces
.
Для получения JSFчтобы запустить, вы должны открыть страницу в браузере по URL, который соответствует отображению FacesServlet
.Учитывая тот факт, что у вас есть файл index.jsp
и ваш контекстный путь Graph
, и что вы настроили два сервлета JSF для трех разных шаблонов URL, вы можете открыть JSP по следующим URL:
Сказал, что ваша конфигурация излишне усложнена.Избавьтесь от записи MyFacesServlet
и всех связанных с ней отображений URL (с именем сервлета faces
).Просто придерживайтесь стандартного FacesServlet
и вместо этого используйте его отображение или измените его.Я лично рекомендую использовать *.jsf
.
<servlet>
<servlet-name>facesServlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>facesServlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
Тогда вы можете просто открыть страницу с помощью http://localhost:8080/Graph/index.jsf.
Вне зависимости от конкретной проблемы, ваш welcome-file
не будетработать таким образом.Tomcat выдаст ошибку HTTP 404 (страница / ресурс не найден).Вам нужно указать index.jsf
как welcome-file
и указать конкретный, но пустой index.jsf
файл в той же папке, что и ваш index.jsp
.Таким образом, Tomcat будет обманут, что файл существует и покажет страницу, просто позвонив по номеру http://localhost:8080/Graph.
Если вы обеспокоены тем, что возможно открыть JSF-страницы с расширением *.jsp
, что приведет кв RuntimeException: FacesContext not found
и у вас фактически нет ни одного файла JSP, который должен обслуживаться как обычный файл, вы можете ограничить прямой доступ к файлам JSP с помощью следующего ограничения безопасности в web.xml
:
<security-constraint>
<display-name>Restrict direct access to JSP files</display-name>
<web-resource-collection>
<web-resource-name>JSP files</web-resource-name>
<url-pattern>*.jsp</url-pattern>
</web-resource-collection>
<auth-constraint />
</security-constraint>
(в JSF 2.0 это, кстати, больше не нужно, с технологией просмотра по умолчанию Facelets можно сопоставить FacesServlet
только с *.xhtml
, что совпадает с расширением файлов Facelets по умолчанию)