2

.jsp ファイルなしでコンパイル済みの JSF のみを Tomcat6 にデプロイする方法を学習しようとしていますが、HTTP ステータス 404 リソースが見つからないというエラーが発生します。以下は、テストで行った手順です (申し訳ありませんが、少し長いです)。

Web アプリケーションの名前は'precompile'です。

  1. プリコンパイル前の 2 つのJSF (.jsp) ファイルを含む元のWARがデプロイされ、次の URL を使用して正常にテストされます。

    http://localhost:8080/precompile/faces/
    

    index.jsp から 2 ページ目に移動しても問題ありません。

  2. Tomcat 6 Jasper 2 Documentationで説明されている ant スクリプトを使用して、デプロイされた Web アプリケーションをプリコンパイルします。コマンド ラインは次のとおりです。

    ant -Dtomcat.home="%CATALINA_HOME%" -Dwebapp.path="%CATALINA_HOME%\webapps\precompile"
    

    ビルドは成功です。また、 in jasper タスクweb.xmlを追加することで、 generated_web.xml が自動的にマージされます。addWebXmlMappings="true"web.xml は、この投稿の下部に含まれています。

  3. すべての .jsp ファイルがまだ Web アプリケーションにある状態で、Web ブラウザーで再度テストします。

  4. トムキャットを停止します。Web アプリケーションから 2 つの .jsp ファイルを削除します。トムキャットを起動します。Web ブラウザーでテストします。index.jsp へのアクセスは問題ありませんが、2 番目のページに移動すると、HTTP ステータス 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>

サーブレットのマッピングミスが原因ではないかと思いますが、よくわかりません。

私は何を間違えましたか?何が欠けていますか?

この長い質問を読んでくれてありがとう。

2011 年 6 月 21 日更新:

追加情報

次の URL で page1 にアクセスすると:

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にも問題があるようです。

原因は何ですか?.jsp なしでコンパイル済みの JSF を正常にデプロイした人はいますか? それがどのように行われたかを共有してもよろしいですか?

ありがとうございました。

4

0 に答える 0