톰캣 7에는 Servlet 3.0 Spec를 지원하게 됩니다. 관련해서 맛보기 시리즈를 추가할까 합니다.

(Serlvet 3.0 Spec에 참여하는 분들이 톰캣 7 Committer 이기 때문에 빨리 맛보게 되는 장점이 있는 것 같습니다.

사실 정확히 말하면, GlassFish 3가 제일 먼저 적용되었습니다. Sun(이젠 Oracle) 개발자들이 톰캣 7 Commit로 활용합니다. ^^)

 

문서는 아래를 참조하시면 됩니다.

The Servlet 3.0 API

http://jcp.org/aboutJava/communityprocess/final/jsr315/index.html

 

Servlet 3.0 Final realease8 Annotations and pluggability 8.1 annotations에 자세한 Annotation 을 쓰는 부분이 나옵니다.

 

Meta data를 제공 함으로서, web.xml에 정보를 저장하지 않아도 쓸 수 있도록 지원합니다.

 

1.     서블릿 정의 (@WebServlet)

1)     그냥 정의

@WebServlet(/foo)

public class CalculatorServlet extends HttpServlet{

//...

}

 

2)     Attribute 이용 정의

@WebServlet(name=MyServlet, urlPatterns={"/foo", "/bar"})

public class SampleUsingAnnotationAttributes extends HttpServlet{

public void doGet(HttpServletRequest req, HttpServletResponseres) {

}

}

 

3)     urlPatterns, initParams, WebInitParam를 사용하여 세밀한 설정이 가능

@WebServlet(name="mytest",
        urlPatterns={"/myurl"},
        initParams={ @WebInitParam(name="n1", value="v1"), @WebInitParam(name="n2", value="v2") })

    public class TestServlet extends javax.servlet.http.HttpServlet {
        ....
    }

ð  web.xml에서 <web-app> 태그 안에서 servlet를 정의한 효과와 동일합니다. 설정이 Annotation으로 적용됩니다.

<servlet>

<servlet-name>mytest</servlet-name>

<servlet-class>TestServlet</servlet-class>

 <init-param>
        <param-name>n1</param-name>
        <param-value>v1</param-value>
   </init-param>
   <init-param>
        <param-name>n2</param-name>
        <param-value>v2</param-value>
    </init-param>

</servlet>

 

<servlet-mapping>

<servlet-name>mytest</servlet-name>

    <url-pattern>/myurl</url-pattern>

</servlet-mapping>

 

2.     WebListener 정의

@WebListener

public class MyListener implements ServletContextListener{

public void contextInitialized(ServletContextEvent sce) {

ServletContext sc = sce.getServletContext();

sc.addServlet("myServlet", "Sample servlet", "foo.bar.MyServlet", null, -1);

sc.addServletMapping("myServlet", new String[] { "/urlpattern/*" });

}

}

 

3.     WebFilter 정의

@WebFilter(/foo)

public class MyFilter implements Filter {

public void doFilter(HttpServletRequest req, HttpServletResponse res) {

...

}

}

 

4.     MultipartConfig 정의
mime/multipart
지원하여 파일 업로드를 쉽게 할 수 있도록 지원. ( Utility가 없어서 따로 만들었었습니다.)

@MultipartConfig(location="/data")

public class MyServlet extends HttpServlet {

  public void service(HttpServletRequest req, HttpServletResponse resp)

    throws ServletException, IOException {

    //target directory and location are the same. The file is moved(not copied)

    req.getPart("content").write("/data/file.dat");

  }

}

 

5.     기타 annotation
Spec 15.5
에 정의 됨

 

참고

1.     Serlvet 3.0 Specifiation Final Release

2.     http://blogs.sun.com/swchan/entry/servlet_3_0_annotations (최근에 바뀐 Spec내용을 반영되지 않았음. 내용만 이해하면 될 듯)

3.     http://blog.caucho.com/?p=237

 

 

 

최근 트렌드인 Struts Spring, tapestry처럼 Annotation 기반으로 쓸 수 있도록 배려하는 것이 보입니다.

(지극히 개인적인 생각입니다만… 개발입장에서는 Annoation 기반 정의가 편합니다. 나눠서 개발할 때도 conflict가 나지 않으니 좋을 듯 합니다..

반면, 유지보수 입장에서는 문제 해결이나 흐름을 보는데 시간이 조금 더 소요되는 단점이 있습니다.

'general java' 카테고리의 다른 글

[Spring] ref local과 ref bean의 차이점  (0) 2010.05.13
Ant의 불편함을 최소화- Ant Contrib  (0) 2010.05.13
Tomcat7 - Serlvet 3.0 맛보기 (Annotation) #1  (1) 2010.04.20
java application 서버 사용 통계  (0) 2010.03.30
lucene  (0) 2010.03.08
JMX 모니터링중 에러  (0) 2009.12.30
Posted by 김용환 '김용환'

댓글을 달아 주세요

  1. 팬더곰 2011.09.07 11:29  댓글주소  수정/삭제  댓글쓰기

    Tomcat7을 설치하여 사용하는 도중에 궁금한 점이 있어 이렇게 댓글을 남김니다.
    annotation을 사용할 시 web.xml수정없이 사용가능하다 하셨는데, name,urlpatterns 지정까지 다 해봐도 계속 404에러가 뜹니다. 혹시 다른 설정을 바꿔 주어야하는게 있나요?
    web.xml의 metadata-complete 속성도 true를 false로 해보았는데도 계속 에러가 뜨더군요