2014-06-08 2 views
3

webapp에 struts2 프레임 워크를 사용하고 있습니다. 맞춤 404 오류 페이지를 만들려고 시도하면서 Struts2가 의도 한대로 더 많은 작업을 수행하고 있음을 발견했습니다.Struts2 사용자 정의 404 오류 페이지가 표시되지 않습니다.

저는 struts.xml과 web.xml 파일 만 사용합니다. web-xml 파일에 다음 코드를 추가했습니다.

이제 웹 응용 프로그램을 시작할 때 평상시처럼 홈페이지로 이동합니다.

http://localhost:8080/MyWebApp/fhgfhfhfhgfhgfhfhfh 
http://localhost:8080/MyWebApp/fhgfhfhfhgfhgfhfhfh.action 

스트럿츠는 요청을 처리하는 인터셉터를 실행하고 자동으로 기본 페이지로 리디렉션됩니다

:이 유형의 URL을 (존재하지 않는 모든 URL)를하려고하면. 이 페이지에 404 오류 페이지가 표시 될 것으로 예상됩니다. Struts.xml에서이 줄을 제거하기는했지만 여전히 경로를 변경합니다!

<default-action-ref name="index" /> 

나는 다음과 같은 URL을 사용하는 경우 :

http://localhost:8080/MyWebApp/fhgfhfhfhgfhgfhfhfh.jsp 

스트럿츠 그냥 빈 화면을 보여줍니다 더 요청이 procesed되고 있지 (아무 인터셉터, 아니 리디렉션을 ...). 나는이 요청에 대해 무효 한 것을 보지 못하기 때문에이 이상한 것을 발견한다. (존재하지 않는 .jsp 파일을 제외하고)

그래서 나는 struts.xml을 수정해야 기본값을 재정의 할 수있다. 리디렉션 동작 (404 오류가 홈페이지로 이동하는 것을 원하지 않음) 및 내 web.xml 또한 애매한 요청을 처리합니다 (따라서 사용자가 입력 한 모든 URL은 실제로

추신 : 내가 자바 예외/오류에 대해서 말하고있는 것이 아니라 http 오류에 대해서만 이야기합니다 .Harva 예외는 적절하게 처리되어 원하는대로 처리됩니다. 행동하십시오.

답변

4

이유가없는 이유를 발견했습니다.

빈 화면의 문제점은 다음과 같습니다. 404 페이지의 경로가 올바르지 않습니다. webContent 폴더에서 시작하여 슬래시 "/"로 시작하는 경로 여야합니다.

기본 동작의 문제는 서버 재부팅 또는 캐시 문제 일 가능성이 큽니다. 브라우저와 IDE를 닫고 모든 것을 다시 시작합니다. 그렇다면 default-action-ref는 정말로 사라졌습니다.

나는 또 다른 흥미있는 특질을 발견 : struts2 예를 들어, 단지 액션 매핑을 처리합니다

http://www.mywebsite.com/webapp/whatever 
http://www.mywebsite.com/webapp/whatever.action 

있지만

http://www.mywebsite.com/webapp/whatever.zip 
http://www.mywebsite.com/webapp/whatever.jsp 
http://www.mywebsite.com/webapp/whatever.html 

당신을 (파일 확장자 통지)과 같이 서버 자원을 처리하지 않습니다 web.xml 파일에 추가 필터 매핑을 추가하여이를 해결할 수 있습니다.

<filter-mapping> 
    <filter-name>struts2</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

<filter-mapping> 
    <filter-name>struts2</filter-name> 
    <url-pattern>/error/*</url-pattern> 
    <dispatcher>ERROR</dispatcher> 
</filter-mapping> 
+0

오류에 대한 필터 매핑을 추가하는이 흥미로운 특징을 알아 채고 문서화합니다. –

1

Struts 2는 알 수없는 작업이나 결과를 처리하도록 구성 할 수도 있습니다. default-action-ref 태그가 없어도 이러한 요청을 처리하는 구성을 제공합니다.

일반적으로 unknown-handler-stack 태그는 struts2ml 구성 및 참조 핸들러에서 사용할 수 있습니다. com.opensymphony.xwork2.UnknownHandler이 제공되는지 확인해야합니다. 이 대답은 How to define unknown handler bean입니다.

컨벤션 플러그인을 사용하는 경우 기본적으로 액션 또는 결과를 처리 할 수있는 알려지지 않은 핸들러 인 convention을 제공합니다.

+0

매우 유감입니다 seful 그리고 나는 이것을 위해서만 구현했다. 불행히도 서버의 리소스 (예 : "myWebApp/afile.zip")에서는 작동하지 않습니다. 해당 URL로 이동하면 브라우저의 404 페이지가 표시됩니다. – user1884155

+0

이 자원이 존재합니까? –

3

이 문제를 해결하려면 기본 네임 스페이스를 추가하고 *로 참조 된 동작을 만들면됩니다. 액션이 일치하지 않으면 기본적으로 실행됩니다. 아래 코드를 struts.xml에 추가하십시오. 그것은 잘 작동합니다.

<package name="serveAll" namespace="" extends="struts-default"> 
     <action name="*"> 
      <result>/error.jsp</result> 
     </action> 
</package> 
+0

다른 트렌드에서 잘 활용할 수있는 멋진 트릭입니다. 불행히도 서버의 리소스 (예 : "myWebApp/afile.zip")에서는 작동하지 않습니다. 해당 URL로 이동하면 브라우저의 404 페이지가 표시됩니다. – user1884155

+0

또한 .zip과 함께 사용해야합니다. 나는 시험했다. .zip뿐 아니라 .asdasd를 입력하더라도 오류 페이지로 응답합니다. 정보는 http://tech.learnerandtutor.com/struts2-tutorial-part-5-namespaces/를 참조하십시오. – Rajesh

관련 문제