Servlet 2.5 3.0 업그레이드 방법

1. pom.xml에서 JDK, Java 버전을 11, Servlet 버전을 3.1로 변경 후 저장한 다음 "프로젝트 우클릭 -> Maven -> Update Project"

<!-- Java --> <properties> <java-version>11</java-version> <org.springframework-version>3.1.1.RELEASE</org.springframework-version> <org.aspectj-version>1.6.10</org.aspectj-version> <org.slf4j-version>1.6.6</org.slf4j-version> </properties> <!-- JDK --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.5.1</version> <configuration> <source>11</source> <target>11</target> <compilerArgument>-Xlint:all</compilerArgument> <showWarnings>true</showWarnings> <showDeprecation>true</showDeprecation> </configuration> </plugin> <!-- Servlet --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency>

2. web.xml 에서 DTD를 3.1로 변경

<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.1" xmlns="//java.sun.com/xml/ns/javaee" xmlns:xsi="//www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="//java.sun.com/xml/ns/javaee //java.sun.com/xml/ns/javaee/web-app_3_1.xsd">

3. 프로젝트 우클릭 -> Project Facets -> Dynamic Web Module="3.1", Java Version="11"로 변경

4. 프로젝트 우클릭 -> Project Facets -> Java Compiler -> Compiler Compilance level="11"로 변경

5. 이클립스 restart!!

Servlet의 버전은 아래와 같다.

Servlet 컨테이너 잘 설정해도 문제가 없다보니 일하면서 기능이나 스펙문서를 살펴본 적이 없었다.

1. Servlet 2.5 new feature (링크)

  • J2SE 5.0(제네릭, 오토박싱, enum, static importing, varargs, annotation) 이상에서 사용가능
  • Annotation 지원
  • web.xml 편의기능

2. Servlet 3.0 new feature (링크)

  • Asynchronous 지원
  • web.xml 파일 없이 annotation으로 설정 가능
  • API 개선
    • ServletRequest를 반환하는 getServeltContext 메소드 추가
    • 클라이언트 스크립트에서 접근할 수 없는 HTTPOnly 쿠키를 지원하는 Cookie 클래스 추가

3. Servlet 3.1 new feature (링크)

  • non-blocking I/O (동기/비동기와 블록킹/논블록킹은 별도의 글에 정리해봐야겠다.)
  • HTTP 프로토콜 업그레이드
  • Security 보강

Servlet 컨테이너

SpringBoot는 3가지의 embedded 컨테이너를 지원한다.

1. Tomcat은 7.0부터 Servlet 3.0을, 8.0부터 3.1을 지원한다.

Undertow는 servlet 없이도 non-blocking을 구현할 수 있다고 하는데, undertow는 잘 몰라서 좀 더 알아보고 업데이트 해야겠다.

Spring framework와 Servlet

Sping은 3.1부터 Servlet 3.0을 사용할 수 있다.

//docs.spring.io/spring/docs/3.1.x/javadoc-api/org/springframework/web/WebApplicationInitializer.html

사용방법은 좋은 글이 있어서 링크를 기록한다.

//whiteship.me/?p=13397

위 글을 보다보니 SPI(Service Provider Interface)라는 단어가 나와서 찾아봤다.

//t.motd.kr/ko/archives/1618

버전 확인

서버정보:<%=application.getServerInfo() %>
서블릿정보:<%=application.getMajorVersion()%>.<%= application.getMinorVersion() %>
JSP정보:<%= JspFactory.getDefaultFactory().getEngineInfo().getSpecificationVersion() %>

톰캣 버전 JSP 스펙 웹소켓 스펙 최소 Java 버전 서블릿 API 버전 발표 중요한 변화
9 2.4(예정) 1.2(예정) 8 서블릿 4.0 개발 중 HTTP/2
8 2.3 1.1 7 서블릿 3.1 2013 5 비차단 방식의 I/O, HTTP 프로토콜 업그레이드 구조
7 2.2 1.1 6 서블릿 3.0 2009 1 JSR 315, Ajax 대응비동기지원, 어노테이션에의한개발편의성, web.xml 없는 개발배포
6 2.1 - 5 서블릿 2.5 2005 9 JSR 154, Requires J2SE 5.0, supports annotations
5.5 2 - 1.4 서블릿 2.4 2003 11 JSR 154, web.xml uses XML Schema
4.1 1.2 - 1.3 서블릿 2.3 2001 8 Addition of Filters
3.3 1.1 - 1.1 서블릿 2.2 1999 8 Becomes part of J2EE, introduced independent web applications in .war files
서블릿 2.1 1998 11 First official specification, added RequestDispatcher, ServletContext
서블릿 2.0 Part of Java Servlet Development Kit 2.0
서블릿 1.0 1997년 6월

서블릿 별 web.xml 선언 문은 아래와 같다.

------2.4----

<?xml version="1.0" encoding="UTF-8"?>

<web-app id="servlet-2_4" version="2.4" xmlns="//java.sun.com/xml/ns/j2ee"

xmlns:xsi="//www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="//java.sun.com/xml/ns/j2ee //java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

</web-app>

출처: //antop.tistory.com/145 [Brain → Blog]

------2.5----

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="//www.w3.org/2001/XMLSchema-instance"

xmlns="//java.sun.com/xml/ns/javaee" xmlns:web="//java.sun.com/xml/ns/javaee/web-app_2_5.xsd"

xsi:schemaLocation="//java.sun.com/xml/ns/javaee //java.sun.com/xml/ns/javaee/web-app_2_5.xsd"

id="servlet-2_5" version="2.5">

</web-app>

출처: //antop.tistory.com/145 [Brain → Blog]

------3.0--------

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns="//java.sun.com/xml/ns/javaee" xmlns:xsi="//www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="//java.sun.com/xml/ns/javaee //java.sun.com/xml/ns/javaee/web-app_3_0.xsd"

version="3.0">

</web-app>

출처: //antop.tistory.com/145 [Brain → Blog]

------3.1------

<web-app xmlns="//xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="//www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="//xmlns.jcp.org/xml/ns/javaee //xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"

version="3.1">

</web-app>

출처: //antop.tistory.com/145 [Brain → Blog]

해당 톰캣 버전에서 servlet.jar 가 있으면 굳이 어플리케이션 단에서 servlet 을 선언 안해도 되는것으로 확인 되었다.

maven을 사용하면 스프링에서 한번에 끌고 오기 때문에 exclusion 으로 빼고 scop을 provier로 선언 해야 될것이다.

maven 환경에선 정확하게 테스트를 안해봐서 구글링을 해봐야 할것 같다.

Toplist

최신 우편물

태그