2012-08-25 9 views
10

私はJSF 2 Webアプリケーションを開発しています。威信に恵まれた人々のために、すべてのURLは.jsfという拡張子で終わるようにしたいと思います。今度は.xhtmlで終わります。 Webブラウザのアドレスバーの.jsfに直接変更すると、HTTP 500エラーが表示されます。URLで.jsf拡張子を使用するには?

どうすれば.jsfに設定できますか?

+0

今日では、それは '.do'でそれを終了するの威信目的です。 –

+2

@RomanC 2001年に人気がなかったのは? (Struts 1)最近では拡張機能を使用していないのはもっと涼しいかもしれません;)JSFではOmniFacesやPrettyFacesを使用できます。 –

+0

それは彼らが各ISBNに追加するのと同じくらい人気があります。例えば、http://shop.oreilly.com/product/9780596005726.do –

答えて

2
<context-param> 
    <param-name>javax.faces.DEFAULT_SUFFIX</param-name> 
    <param-value>.xhtml</param-value> 
</context-param> 

<servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>*.jsf</url-pattern> 
</servlet-mapping> 
<servlet-mapping> 
+0

私はそれが正しいとは思わない。これはディスク上の実際のファイルの拡張子です。 OPはURLサフィックスを必要とします。これはweb.xmlのサーブレットマッピングのurl-patternを使って変更します(JSF 2.1では* .jsfがデフォルトであるためweb.xmlを省略します)。 –

+0

前のコメントは忘れてしまいましたが、コメントはdefault_suffixだけを変更するという別の回答でした。この場合、サーブレットマッピングで十分です。default_suffixを変更する必要はありません。 –

+0

あなたはあなたの答えをあなたに教えてください。おそらく他の情報源に関しては正しいでしょう。遅れて申し訳ありません - 私はバケーションにいました。もう1つの助けを求めることができますか?私がそれを使用し、page.jsfにアクセスすると(page.xhtmlはサーバ側に存在します)、ヌルポインタの例外がスローされます。どこに問題がありますか? web.xml:http://pastebin.com/3NqyYXSLがあり、スタックプリントがあります。http://pastebin.com/g76TgabF – Tomas

17

JSFページのURLパターンはweb.xmlFacesServlet<servlet-mapping>によって指定されます。あなたが希望する仮想URLの拡張子を取得するために適宜<url-pattern>を変更する必要が

<servlet> 
    <servlet-name>Faces Servlet</servlet-name> 
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>*.xhtml</url-pattern>  
</servlet-mapping> 

:あなたは.xhtmlが正常に動作することを述べたように、次のように、あなたは明らかにそれを構成しています。

<servlet> 
    <servlet-name>Faces Servlet</servlet-name> 
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>*.jsf</url-pattern>  
</servlet-mapping> 

具体的な機能要件を達成するためには、すべてを変更する必要があります。

ですが、これによりセキュリティ上の問題が発生します。エンドユーザは、URL内の拡張子を.jsfから.xhtmlに変更するときに、生のFaceletsファイルのソースコードを表示できるようになりました。あなたはweb.xmlに次のセキュリティ制約を追加することでこれを防ぐことができます。

<security-constraint> 
    <display-name>Restrict access to Facelets source code.</display-name> 
    <web-resource-collection> 
     <web-resource-name>Facelets</web-resource-name> 
     <url-pattern>*.xhtml</url-pattern> 
    </web-resource-collection> 
    <auth-constraint/> 
</security-constraint> 
+0

WEF-INFに.xhtmlファイルをコピーすることで、このセキュリティ上の問題を緩和できますか? – abbas

+2

@abbas: '/ WEB-INF'内のファイルには公開されていません。 JSFマッピングを '* .xhtml'に設定するだけです。仮想URLを扱う必要はありません。 – BalusC

-1
you can add this code in your web.xml, and you can run your pages ends with xhtml, jsf or faces 
<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> 
    <servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>*.faces</url-pattern> 
    </servlet-mapping> 
    <servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>*.xhtml</url-pattern> 
    </servlet-mapping> 
+0

なぜあなたはすでに与えられた答えを繰り返すのですか? – BalusC

関連する問題