2010-08-02 5 views
1

나는 자바 웹 프로젝트에 문제가있다. 내가하고있는 프로젝트는 표준 jsp와 jsf 페이지가 섞여서 만들어졌다. main.jsp라고하는 응용 프로그램의 기본 페이지는 사용자의 인증을 확인하는 데 사용되는 서블릿 필터 내에서 세션 범위가 작성된 관리 Bean에 액세스해야하는 표준 JSP 페이지입니다. 은 내 web.xml 파일에서 나는 엔진이 http//myserver/myapp/faces/main.jsp 모든 것이 잘 작동으로 내 응용 프로그램을 열면 및/얼굴/* 요청하기jsf context creation

<filter-mapping> 
    <filter-name>extensionsFilter</filter-name> 
    <url-pattern>*.jsf</url-pattern> 
    </filter-mapping> 
    <filter-mapping> 
    <filter-name>extensionsFilter</filter-name> 
    <url-pattern>/faces/*</url-pattern> 
    </filter-mapping> 

을 .jsf에 응답해야합니다 향 설정했습니다. http://myserver/myapp/main.jsp으로 애플리케이션을 여는 경우 faces 컨텍스트가 아직 작성되지 않았기 때문에 오류가 발생합니다. 환영 페이지를 설정하거나 아파치 리디렉션을 설정하지 않음 사용자가 브라우저에 h ** p : // myserver/myapp를 입력하기 만하면 애플리케이션이 올바른 페이지 (faces 컨텍스트 내의 main.jsp)를 열게 할 수 있습니다. 그 이유는 페이지 /faces/main.jsp가 phisically 존재하지 않기 때문입니다.

2 해결 방법이있을 수 있습니다 :/faces/* 패턴 밖에서도 얼굴 컨텍스트를 시작할 수 있도록하거나, 페이지가 열리지 않더라도/faces/main.jsp로 리다이렉트 할 수있는 방법을 찾으십시오. 존재하지만 ... 나는 모든 것을 실패했다.

답변

1

그냥 http://myserver/myapp/main.jsp하여 응용 프로그램을 열고, 오히려하여 http://myserver/myapp/faces/main.jsp 또는 (이상 권장) http://myserver/myapp/main.jsf하지 않습니다.

전체 우려가 endusers가 FacesServleturl-pattern 외부의 JSP 페이지에 액세스 할 수 없습니다해야한다는 것입니다 경우 (많은 이해가되지 것입니다 다른 사람이 질문;)), 다음 *.jsf 패턴 가서 추가 security-constraint*.jsp 인 경우 web.xml에 패턴이 비어 있습니다. 이것은 최종 사용자가 *.jsp URL을 직접 요청할 수 없도록주의해야합니다. 당신이 /faces/* 매핑을 사용할 때

<security-constraint> 
    <display-name>Restrict direct access to JSP files</display-name> 
    <web-resource-collection> 
     <web-resource-name>JSP files</web-resource-name> 
     <url-pattern>*.jsp</url-pattern> 
    </web-resource-collection> 
    <auth-constraint /> 
</security-constraint> 

이 직접 수 없습니다. 나는 web.xml에서 그것을 없애 버릴 것이다.

는 또한, http://myserver/myapp를 입력하는 endusers을 충당하기 위해, 그럼 그냥 web.xmlwelcome-file으로 main.jsf을 정의하고 다른 definied 환영 파일 제거. Tomcat (그리고 아마도 다른 servletcontainers)에서는 파일이 디스크에 있음을 속일 수있는 이름을 가진 빈 파일을 생성해야합니다.

+0

힌트를 따르려고하지만 뭔가 잘못 생각합니다. main.jsp의 이름을 main.jsf로 바꾸면 작동하지 않습니다. tomcat은 main.jsf 컨텐트로 일반 텍스트로 응답하여 페이지 코드를 보냅니다. 페이지를 만들기 위해해야 ​​할 일은 /faces/main.jsp를 호출 할 때와 동일한 방식으로 작동합니다. – themarcuz

+0

실제 파일이 아닌 URL에서만 이름을 바꿔야합니다. 실제 파일 확장자는'.jsp'이어야합니다. 'FacesServlet'은 자동으로 올바른 JSP 파일을 찾습니다. JSP 파일을 구문 분석하기 위해 servletcontainer의 내장 JspServlet을 트리거 할 것이므로 확장을 유지해야합니다. – BalusC

+0

나는 그것을 얻을 수 없다 :(만약 당신이 말한 것을 이해한다면, http : //myserver/myapp/main.jsf를 호출하는 것을 수정하지 않고 애플리케이션은 faces 컨텍스트를 생성하고 main.jsp sandard jsp로 응답해야한다. 페이지가 ... 작동하지 않으므로 – themarcuz