브라우저는 URL을 이용해 웹 프로젝트를 서버에게 요청한다. 이때 URL은 다음과 같은 구성으로 이루어져있다
http:// IP주소:포트번호 / 프로젝트이름 / < 패키지이름 >.< 클래스이름 >
문제점❗
그런데 클래스 이름이 길어지면 입력하기도 불편하고, 클래스 이름이 노출되며 어떤 기능을 하는지 쉽게 파악할 수 있기 때문에 보안에도 취약하다. 그래서 이러한 문제점을 방지하기 위해 실제 서블릿 클래스 파일 이름을 대체할 수 있는 별명을 붙여주는 것이다.
http:// IP주소:포트번호 / 프로젝트이름 / 매핑한 이름 (별명)
서블릿 매핑하는 방법은 2개로 나뉜다
1. web.xml에 직접 작성하기
2. 서블릿 어노테이션 이용하기
실행할 프로젝트 -> WebContent -> WEB-INF -> web.xml 파일의 wep-app 태그 안에 다음과 같이 작성하면 된다
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<servlet>
<!-- servlet-name은 중복 불가능 -->
<servlet-name>aaa</servlet-name> <!-- servlet과 servlet-mapping이 짝을 이어주도록 같은 이름을 붙여준다 -->
<servlet-class>ex.ex1</servlet-class> <!-- mapping할 class를 "패키지이름.클래스이름" 형식으로 작성 -->
</servlet>
<servlet-mapping>
<servlet-name>aaa</servlet-name>
<url-pattern>/first</url-pattern> <!-- 클래스이름 대신에 웹 브라우저에서 요청하는 이름 -->
</servlet-mapping>
</web-app>
이 방법의 장점은 web.xml에 여러 서블릿 매핑 설정 시 복잡해지는 것을 방지할 수 있다.
서블릿 클래스 위에 다음을 적으면 된다
@WebServlet("/서블릿매핑이름");
public class myServlet extends HttpServlet{ <!-- 애너테이션을 이용해 만드는 서블릿 클래스는 반드시 HttpServlet 상속받아야함 -->
...
}
이 과정을 처음 servlet을 생성할 때부터 설정할 수 있는 방법이 있다.
1. class를 생성할 패키지에 우클릭 -> New -> Servlet
2. 생성할 class name 적고 Next 클릭
3. 매핑할 class를 선택하고 Edit 클릭
4. mapping할 이름 적고 OK
5. 애너테이션 생성된 모습!