Java2EE Framework/Struts1.3

index 페이지 요청시 스트럿츠 적용 방법

본클라쓰 2010. 9. 10. 10:47

 

스트럿츠는 요청  URL을 분석하여 사용자의 요청을 수행할 컨트롤러인 Action 클래스를 호출한다. 이 때 요청 URL 값을 분석하여 해당 요청에 해당하는 Action 클래스를 호출하는데 이 모든 과정은 설정파일을 통해 이루어진다. 우선, 웹 컨테이너에 스트럿츠를 사용하기 위해 web.xml 에 스트럿츠를 등록한다.

 

web.xml 설정 파일

<!-- “*.do”로 끝나는 모든 URL 패턴은 ActionServlet을 거쳐서 수행되어야 한다. -->
<servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>

</servlet-mapping>

 

스트럿츠 등록은 서블릿 태그에 작성하며 된다. 위 설정에는 *.do 형태로 요청되는 URL에 대해 스트럿츠가 수행하게 지정되었다. 스트럿츠 지정방법은 위 방법만 있는 것이 아니라 '/do/*' 형태로 지정할 수도 있고, 패턴은 개발자가 원하는 패턴으로 지정할 수 있다.

 

하지만 보통 웹 사이트 메인 주소는 http://hostname.com/ 처럼 되어 있다. 이와 같은 주소는 웹 서버의 디폴트 페이지를 호출하게 한다. 디폴트 페이지란 index.html, index.htm, index.php, index.jsp 등 인덱스 페이지를 말하며 웹 서버에 특정 페이지를 지정할 수 있다.

 

따라서 인덱스 페이지에서 스트럿츠 컨트롤러를 사용하도록 페이지 제어권을 넘겨주어야 한다. 보통 meta 태그를 사용하거나 자바 스크립트, 프레임 태그를 사용하여 스트럿츠 컨트롤러를 사용한 인덱스 페이지로 리로딩한다.

 

 

 

1. meta 태그를 사용한 페이지 리로딩

 

 시작 페이지에 다음의 meta 태그를 포함시킴

<meta http-equiv="refresh" content="0;url=/index.do">

 

struts-config.xml 파일에 index.jsp 등록

<struts-config>
    <action-mappings>
        <action path="/index" forward="/index.jsp"/>
    </action-mappings>
</struts-config>

 

위와 같이 index.html 페이지를 출력함과 동시에 index.do로 스트럿츠 컨트롤러를 사용하는 페이지로 전환시킨다. 따라서 인덱스 페이지는 단순히 index.do 요청을 호출하는 것 뿐입니다. 단지, index.jsp 페이지로 가가 위해 새로고침을 하여 접근 시작 값을 바꾼 것에 불과하다.

  

 

2. 프레임 태그를 사용하여 페이지 로딩 

 

이 방법 말고도 다른 방법이 하나 있는데 iframe 태그를 사용하여 index.do 페이지를 삽입하는 방법이다.

 

<frameset rows="*,0" border=0>
    <frame name="main" scrolling="auto" marginwidth="5" marginheight="0"   src="/index.do" target=_self>
</frameset>

  

위와 같은 방법을 통해 스트럿츠를 사용하면 맘 속 강하게 페이지 로딩 없이 "/" 경로를 기본으로 스트럿츠 컨트롤러를 사용하고 싶은 욕망이 생긴다. 그렇다고 스트럿츠의 패턴 URL 값을 "/" 지정하면 안된다. 이유는 톰캣의 서블릿 Default URL 값이 "/"이기 때문이다. 서블릿이 처리해야 할 부분과 스트럿츠가 처리해야 할 부분을 따로 정하지 않는다면 오류가 발생한다.

 

또한, 간단하게 문서 안에 포함되는 스타일 시트의 경로나 이미지 경로도 "/"로 시작하는 경우가 많기 때문에 스트럿츠의 패턴 URL 값을 "/"로 지정하면 모든 URL에 대해 스트럿츠가 처리하게 되며 스타일시트나 자바 스크립트, 이미지등의 경로는 스트럿츠 Action 에 등록되어 있지 않기 때문에 오류를 발생하며 해당 자원을 사용할 수 없게 된다. 기본 경로는 서블릿이 처리하게 하는 것이 맞으며 스트럿츠는 특정 패턴 URL에 대해서만 처리하게 해야 한다.