Я пытаюсь научиться развертывать только скомпилированный файл JSF без файлов .jsp на Tomcat6, но ударил ресурс HTTP Status 404 not found. Ниже приведены шаги, которые я сделал в своем тесте (извините, немного долго):
Название веб-приложения: 'precompile' .
Исходный WAR , содержащий 2 файлов JSF (.jsp) перед развертыванием и проверкой прекомпиляции, с использованием этого URL:
http://localhost:8080/precompile/faces/
Переход с index.jsp на вторую страницу также в порядке.
Прекомпилируйте развернутое веб-приложение, используя скрипт ant, описанный в Документация по Tomcat 6 Jasper 2 , командная строка:
ant -Dtomcat.home="%CATALINA_HOME%" -Dwebapp.path="%CATALINA_HOME%\webapps\precompile"
Сборка прошла успешно. А сгенерированный_web.xml автоматически объединяется с web.xml
путем добавления задачи addWebXmlMappings="true"
в jasper. Файл web.xml находится в нижней части этого поста.
Когда все файлы .jsp все еще находятся в веб-приложении, повторите проверку в веб-браузере - ОК.
Стоп кот. Удалите 2 файла .jsp из веб-приложения. Начать кот. Протестируйте в веб-браузере, добравшись до index.jsp, все в порядке, но при переходе на вторую страницу попадет запрашиваемый ресурс HTTP Status 404: ошибка недоступна:
HTTP Status 404 - /modules/m1/pages/page1.jsp not found
В консоли tomcat не отображается ошибка.
web.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<filter>
<filter-name>RichFacesFilter</filter-name>
<filter-class>org.ajax4jsf.Filter</filter-class>
</filter>
<filter-mapping>
<filter-name>RichFacesFilter</filter-name>
<servlet-name>Faces Servlet</servlet-name>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
</filter-mapping>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- JSPC servlet mappings start -->
<servlet>
<servlet-name>org.apache.jsp.index_jsp</servlet-name>
<servlet-class>org.apache.jsp.index_jsp</servlet-class>
</servlet>
<servlet>
<servlet-name>org.apache.jsp.modules.m1.pages.page1_jsp</servlet-name>
<servlet-class>org.apache.jsp.modules.m1.pages.page1_jsp</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>org.apache.jsp.index_jsp</servlet-name>
<url-pattern>/index.jsp</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>org.apache.jsp.modules.m1.pages.page1_jsp</servlet-name>
<url-pattern>/modules/m1/pages/page1.jsp</url-pattern>
</servlet-mapping>
<!-- JSPC servlet mappings end -->
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<display-name>precompile</display-name>
<listener>
<listener-class>com.sun.faces.config.ConfigureListener</listener-class>
</listener>
<context-param>
<param-name>javax.faces.CONFIG_FILES</param-name>
<param-value>/WEB-INF/faces-config.xml</param-value>
</context-param>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<login-config>
<auth-method>BASIC</auth-method>
</login-config>
</web-app>
Если необходимо обратиться к faces-config.xml
:
<?xml version="1.0"?>
<faces-config version="1.2" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee /web-facesconfig_1_2.xsd">
<managed-bean>
<managed-bean-name>indexBean</managed-bean-name>
<managed-bean-class>com.mypack.IndexBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>page1Bean</managed-bean-name>
<managed-bean-class>com.mypack.Page1Bean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<navigation-rule>
<navigation-case>
<from-outcome>page1</from-outcome>
<to-view-id>/modules/m1/pages/page1.jsp</to-view-id>
</navigation-case>
</navigation-rule>
</faces-config>
Я подозреваю, что это может быть связано с ошибкой в отображении сервлета, но я не уверен.
Что я сделал не так? Чего не хватает?
Спасибо за чтение этого длинного вопроса.
Обновление от 21 июня 2011 года:
Дополнительная информация
Если я захожу на страницу 1 со следующим URL:
http://localhost:8080/precompile/faces/modules/m1/pages/page1.jsp
Я получу Cannot find FacesContext
ошибку:
SEVERE: Servlet.service() for servlet org.apache.jsp.modules.m1.pages.page1_jsp threw exception
java.lang.RuntimeException: Cannot find FacesContext
at javax.faces.webapp.UIComponentClassicTagBase.getFacesContext(UIComponentClassicTagBase.java:1855)
at javax.faces.webapp.UIComponentClassicTagBase.setJspId(UIComponentClassicTagBase.java:1672)
at org.apache.jsp.modules.m1.pages.page1_jsp._jspx_meth_f_005fview_005f0(page1_jsp.java:94)
at org.apache.jsp.modules.m1.pages.page1_jsp._jspService(page1_jsp.java:70)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.ajp.AjpAprProcessor.process(AjpAprProcessor.java:427)
at org.apache.coyote.ajp.AjpAprProtocol$AjpConnectionHandler.process(AjpAprProtocol.java:384)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1555)
at java.lang.Thread.run(Thread.java:619)
Похоже, проблема в скомпилированном файле page1_jsp
.
В чем может быть причина? Кто-нибудь делал успешное развертывание предварительно скомпилированного JSF без .jsp? Хочешь поделиться, как это делается?
Спасибо.