2013-04-16 1 views
2

Tomcat 7.0.35에서 제공되는 JSF 응용 프로그램에서 작업합니다. 맞춤 오류 페이지를 만들고 싶으므로 web.xml 구성 파일에있는 <error-page> 태그로 재생했습니다.web.xml의 오류 페이지 구성은 404의 경우에 반환되는 HTTP 코드를 변환합니다.

<error-page> 
    <error-code>404</error-code> 
    <location>/error</location> 
</error-page> 

404의 경우 반환 된 페이지가 올바른 HTTP 본문을 갖습니다. 그러나 HTTP 반환 코드는 200입니다. <error-page> 구성되지 않은 경우 예상 된 404 제대로 받았습니다.

동일한 soft-404<error-code>이 지정되지 않은 경우 문제가 발생합니다.

<error-page> 
    <location>/error</location> 
</error-page> 

오류 코드를 잃지 않고이 오류 페이지를 구성 할 방법을 찾고 있습니다. 도움이 될 수있는 정보의

두 개 조각 :

  • 은 JSF 프로젝트 단계는 다음

    @Named(value = "error") 
    @RequestScoped 
    @URLMappings(mappings = { 
        @URLMapping(id = "error", pattern = "/error", viewId = "/faces/error.xhtml")}) 
    public class ErrorController implements Serializable { 
    
  • 와 얼굴
  • 예쁜 URL이 예쁜에 의해 처리되고 생산

  • 3.3.3입니다
+0

인터넷 브라우저에서'http : // localhost : 8080/YourProject/error'에 접근 할 수 있다면 확실합니까? –

+0

예. 오류 URL (PrettyFaces 포함)을 구성하는 코드를 추가했습니다. – clark

답변

2

서블릿 필터가 처리하는 오류 페이지가있을 때 컨테이너가 제대로 작동하지 않는 것처럼 보일 수도 있습니다. 이 경우 PrettyFaces에서 "/ error"를 매핑 한 것으로 보이고 내부적으로 다른 리소스로 전달합니다. (PrettyFaces는 서블릿 전달과 함께 작동합니다.)

컨테이너가 새로운 Forward를보고, 실제로 오류 페이지를 표시한다는 사실을 잊어 버리고 Forwarded 요청이 성공했기 때문에 200 상태를 보냅니다.

이 문제를 해결하기 위해 수행해야 할 작업은 오류 페이지 prettyfaces 매핑에 404 상태를 설정하는 <action>#{bean.send404}</action>을 추가하는 것입니다.

<url-mapping> 
    <pattern value="/error" /> 
    <view-id="/faces/error.xhtml" /> 
    <action>#{bean.send404}</action> 
</url-mapping> 

그런 다음 빈 방법은 일반적으로 FacesContext에서 얻을 수있는 OU HttpServletResponse를,의 보류를 얻을해야합니다 당신을 위해 트릭을 할해야

HttpServletResponse response = (HttpServletResponse)FacesContext.getCurrentInstance() 
     .getExternalContext().getResponse(); 
response.sendError(HttpServletResponse.SC_NOT_FOUND); 

합니다.

+0

예, error_code뿐만 아니라 메시지도 처리하기 때문에 최종 솔루션은 약간 복잡합니다. 그러나 대답은 내가 필요한 것입니다. 앞으로의 독자를 위해 https://tomcat.apache.org/tomcat-7.0-doc/servletapi/constant-values.html에서 오류 정보에 대한 요청 매개 변수를 얻을 수 있습니다. – clark

+0

좋습니다! 다행 당신은 그것을 작동 :) – Lincoln