본문으로 건너뛰기

Servlet Mapping


Servlet Mapping 이란 특정 Servlet을 요청할 때 전체 경로의 URL을 요청하면 복잡하고 보안에도 취약하기 때문에 간단하게 경로를 표현해주는 것이다.

Servlet 매핑 방법은 두 가지가 있는데 두 가지 모두 소개해 보겠다.

  1. web.xml 이용
  2. annotation 이용

Case: web.xml

Servlet 생성

servlet을 하나 생성한다.

  1. annotation을 사용하지 않기 위해 생성시 Create Java EE 6 annotated class 의 체크박스는 해제한다.
  2. 이유은 모르겠지만. 패키지로 구분하지 않으면 url-pattern 이 실패한다. 패키지를 지정하도록 하자.

그러면 자동으로 IntellJ에서 기초적인 servlet-mapping 스키마가 자동완성해 준다.

Servlet Test Code 작성

먼저, mapping 확인을 위해, PrintWriter를 추가하여 간단한 문장을 적어준다.

import java.io.PrintWriter;

PrintWriter out = response.getWriter();
out.println("<p>Servlet Test</p>");

Servlet Mapping

이제 web.xml에서 mapping 해보도록 하겠다.

  1. <servlet-name> 은 이 servlet의 별칭이기 때문에 임의로 바꿔주어도 된다.
  2. <servlet-class> 는 이 servlet의 저장위치이다.

servlet mapping을 해주려면, <servlet></servlet> 아래에 <servlet-mapping></servlet-mapping> 을 추가해준다.

  1. <servlet-mapping><servlet-name> 은 위의 <servlet></servlet><servlet-name> 과 같은 값이 들어가야한다.
  2. <url-pattern></url-pattern> 은 해당 servlet의 경로를 간단히 나타내주는 것이다. 이 값을 브라우저 url 뒤에 추가해주는 것이다.
note

위의 mapping 정보로는 /test를 입력하면 해당 서블릿이 실행되는것이다.

실행

정상적으로 실행되는 것을 확인할 수 있다.

Case: annotation 😍

web.xml 을 이용한 mapping은 Servlet이 많아질수록 코드량이 많아지고 가독성이 떨어지므로 비효율적이다.

이번은 Java EE의 annotation을 이용한 servlet mapping 해보겠다.

훨씬 간단하다. 아까 만들은 servlet위에 @WebServlet 을 추가하면된다.

mapping 정보 삭제

정확한 테스트를 위해 이전에 작성한 web.xml 의 mapping 정보와 Servlet은 삭제하도록 한다.

Servlet 생성

이번엔 annotation을 사용하므로 생성시 Create Java EE 6 annotated class 체크한다.

info

Create Java EE 6 annotated class 를 체크하지 않아도 기능은 동작하지만 체크하게되면 IDE에서 자동으로 필요한 속성을 불러오기 때문에 편리하다.

Servlet Test Code 작성

아까와 동일하게 작성한다.

Servlet Mapping

  • @WebServlet
    • name: web.xml<servlet-name> 와 일치함.
    • urlPatterns: web.xml <url-pattern> 와 일치함.

실행

동일하게 실행되는 것을 확인할 수 있다.


parkgang