2012-08-25 4 views
10

JSF 2 웹 애플리케이션을 개발 중입니다. 명예의 전당에 대해서는 모든 URL이 .jsf 확장자로 끝나기를 바랍니다. 이제 .xhtml으로 끝납니다. 웹 브라우저 주소 표시 줄의 주소를 직접 .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 접미사를 원할 것입니다. URL 접미사는 web.xml의 servlet-mapping에서 url-pattern을 통해 바꿀 수 있습니다 (JSF 2.1에서는 * .jsf가 기본값이므로 web.xml을 생략 함). –

+0

이전 메모를 잊어 버렸습니다. 덧글은 default_suffix 만 변경하는 다른 답변에 대한 것입니다. 이 경우 서블릿 매핑으로 충분하므로 default_suffix를 변경할 필요가 없습니다. –

+0

다른 근원에 관하여 아마 정확할 당신의 응답을위한 당신을 당신. 지연에 대한 미안 - 나는 휴가 중이 었어. 한 번 더 도움을 청할 수 있니? 내가 그것을 사용하고 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

.xhtml 파일을 WEF-INF로 복사하여이 보안 문제를 해결할 수 있습니까? – 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

관련 문제