Servlet Mapping
Servlet Mapping
이란 특정 Servlet을 요청할 때 전체 경로의 URL을 요청하면 복잡하고 보안에도 취약하기 때문에 간단하게 경로를 표현해주는 것이다.
Servlet 매핑 방법은 두 가지가 있는데 두 가지 모두 소개해 보겠다.
web.xml
이용annotation
이용
Case: web.xml
Servlet 생성
servlet을 하나 생성한다.
- annotation을 사용하지 않기 위해 생성시
Create Java EE 6 annotated class
의 체크박스는 해제한다. - 이유은 모르겠지만. 패키지로 구분하지 않으면
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 해보도록 하겠다.
<servlet-name>
은 이 servlet의 별칭이기 때문에 임의로 바꿔주어도 된다.<servlet-class>
는 이 servlet의 저장위치이다.
servlet mapping을 해주려면, <servlet></servlet>
아래에 <servlet-mapping></servlet-mapping>
을 추가해준다.
<servlet-mapping>
의<servlet-name>
은 위의<servlet></servlet>
의<servlet-name>
과 같은 값이 들어가야한다.<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>
와 일치함.
- name:
실행
동일하게 실행되는 것을 확인할 수 있다.