무교주님 블로그에서 본 톰캣7에서의 변경점과 스트럿츠 설정법.


아후 드뎌 나도 블로그란것을 적어야 할 시기가 왔나보다

 

아직 전세계적으로 익숙치 않은 JAVA EE6은 우리에게 서블릿 3.0 이란 엄청난 기술들로 나타났다

 

아직까지는 무료 솔루션에서는 GLASSFISH 에서만 퍼블리셔 되던 것이 베타버전이긴 하지만

 

우리에게 익숙한 톰캣이 7 버전이 나오면서 완벽하게(?) 서블릿3.0으로 무장시켰다

 

인터넷에서 처음 서블릿3.0 기술에 대한 글들을 보면서 깜짝 놀라고

 

이클립스에서 더 깜짝 놀란 기술이 이제는 WEB.XML 이 없어졌다 헐(?)

 

처음에 이클립스도 헬리오스 버전으로 새로 나오고 톰캣도 7버전으로 새로나오고

 

자바도 6.0.20으로 몇개월 되었지만 최신버전으로 업글 되었다

 

장단 잘맛게 이번에 내 PC도 고사양으로 엄청난 출혈을 감당하며 업글을 했다

 

모든것이 다 갖추어진 상황에서 새로운 도전이다

 

이클립스 설치후 서버설정으로 톰캣7을 잡아주고

 

다이나믹 웹프로젝트를 생성하고나서 벙쪘다 진짜 WEB.XML이 없다

 

처음엔 이클립스가 실수를 한줄 알았다 그러고 나서 찾아보니 서블릿3.0 기술엔 WEB.XML이 없단다

 

황당 무지개였다 그런데도 프로젝트에 우클릭후 서블릿 메뉴는 그대로 있다

 

새로이 클릭을 하여 서블릿을 만들어 보았다

 

이럴수가 클래스명 위에 어노테이션이 붙어서 web.xml을 대처한단다

 

@WebServlet("/ServletTest")
public class ServletTest extends HttpServlet {

 

이렇게 생성 되어버린 서블릿 파일 밑에 내용의 기술들은 기본적으로 기존방식과 동일한데

 

더 추가되는 기술들이 어노테이션을 가지고 작성되는 듯하다

 

음... web.xml의 기술없이 서블릿이 가능하다는 말은 곧 서블릿 생성후에도 서버 리스타트가 필요가

 

없게 된다는 말인데

 

J2EE 프레임웍 중에 중추역할을 해온 프레임웍들 스트럿츠, 스프링 등 을보면 대부분 서블릿의 변형태다

 

복잡하고 불편한 web.xml 의 기술을 자체적으로 간단하게 변형 시켜놓고 web.xml을 건들지 않도록

 

유도하고 있다 이는 곳 서블릿 3.0은 여러 대표 프레임웍들의 기술을 녹여내고 있다는 말이되고

 

반대로 web.xml을 통하지 않고 서블릿이 작동(수정,삭제,추가) 한다는 것은 곧 모든 소스를 컨테이너가

 

관리하겠다는 말이된다 이는 컨테이너가 무거워 질수도 있는 나의 착각인가(?)

 

요점은 그게 아니라 제목 의 요지를 다시 정리 해야겠다

 

web.xml이 없으니 필터디스패쳐는 스트럿츠에서 어떻게 작동 시키느냐가 문제가 된다

 

기존의 web.xml에 기술되어있는 스트럿츠2를 올려주는 태그를 유심히 본결과

    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

 

결국 저 빨간색으로 쳐놓은 클래스를 필터로 등록하고

Url-pattern 을 /* 로 등록하면 되는것이다

 

오랜 고심 끝에 클래스를 하나 다음과 같이 생성해주면 된다

 

package webapp.common;

import javax.servlet.Filter;
import javax.servlet.annotation.WebFilter;
import org.apache.struts2.dispatcher.FilterDispatcher;

 

@WebFilter(displayName="Struts2", urlPatterns="/*" , filterName="StrutsFilter")
public class StrutsFilter extends FilterDispatcher implements Filter{
 private static final long serialVersionUID = 1L;

}

 

딱 본순간 아 하실게지만

 

그래도 봐도 모르는 분들이 계실까봐 설명을 드리자면

 

어노테이션을 @WebFilter로 생성해서 그곳에다 UrlPatterns를 /* 로 등록하면 된다

기존에 web.xml에 기술하던것을

 

클래스에 직접 어노테이션을 가지고 기술하는 것이다

 

그런데 저 FilterDispatcher는 jar파일 내부에 .class로 존재해서 내가 저걸 붙일수가 없다

 

결국은 저 FilterDispatcher를 extends 하면 내가 만든 클래스가 저놈이랑 똑같아 지므로

 

src폴더에 있는 struts.xml 파일을 읽어서 .action 하면 스트럿츠가 작동하는 것이다

 

음.. 왠지 서블릿 3.0에 부합하는 프레임웍들이 몇개월 후면 부랴부랴 뛰쳐 나올듯하다

 

왜이리 공부해야 하는게 끝이 없는걸까 ㅠ ㅜ

Posted by Taoist
,