0

ブラウザのアドレスバーに /index.xhtml と入力して "index.xhtml" ページに移動しようとしましたが、index.jsp が見つからないという 404 エラーが発生しました。jsp が呼び出される理由がわかりません。

私の見解:

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:c="http://java.sun.com/jsp/jstl/core">
       <h:head>
           <title>This is a Test</title>    
       </h:head> 
       <h:body>
           <div>
               <H2>
                   <h:outputText value="test"/>
               </H2>
           </div>
       </h:body>
</html>

私のweb.xml:

<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>*.xhtml</url-pattern>
</servlet-mapping>
4

1 に答える 1

1

これは、実際には JSF 2.x ではなく JSF 1.x を使用していることを示唆しています。JSF 1.x では、FacesServletデフォルトで.jspサフィックスを使用して、リクエスト URL に基づいてビュー ファイルを検索します。そのため、index.xhtmlが要求されると、物理ファイルが検索されますindex.jsp。JSF 2.x では、デフォルトの接尾辞が に変更されました。これは、が要求されたときに物理ファイルを探すこと.xhtmlを意味します。index.xhtmlindex.xhtml

*.xhtmlは、が着信 HTTP 要求をリッスンする必要が<url-pattern>ある URL パターンにすぎません。FacesServlet

JSF 2.x を適切に使用するには、ランタイム クラスパス内のすべての JSF 1.x ライブラリを削除する必要があります。これはとりわけ/WEB-INF/libフォルダをカバーします。JAR のファイル名に記載されていないためにバージョンが不明な場合は、ZIP ツールを使用して解凍し、/META-INF/MANIFEST.MF. または、それらをすべて削除して、 http://javaserverfaces.java.netから正しいものを再ダウンロードしてください。

以下も参照してください。

于 2013-07-26T14:14:53.400 に答える