톰캣 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 realease의 8장 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를 사용하여 세밀한 설정이 가능
|
ð web.xml에서 <web-app> 태그 안에서 servlet를 정의한 효과와 동일합니다. 설정이 Annotation으로 적용됩니다.
<servlet> <servlet-name>mytest</servlet-name> <servlet-class>TestServlet</servlet-class> <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 |
java application 서버 사용 통계 (0) | 2010.03.30 |
lucene (0) | 2010.03.08 |
JMX 모니터링중 에러 (0) | 2009.12.30 |