본문 바로가기
카테고리 없음

[Java] Servlet :: 서블릿 매핑(mapping) @WebServlet("/")과 web.xml

by 관이119 2022. 7. 24.

출처 - https://blog.naver.com/PostView.nhn?blogId=smilennv&logNo=220454626217

 

프로젝트를 실행하게 되면 위 상단 URL 표시에

localhost:8080/프로젝트명/파일명 이렇게 나오는 것을 

간단하게 localhost:8080/파일명 으로 나오게 할 수 있다..

 

방법은 한줄만 작성하면 되는 어노테이션(annotation)으로 달거나

아니면 web.xml 에 직접 작성 해주거나 두가지가 있다.

 

 

 

 

 

매핑(mapping)을 하는 이유는 보안에 노출되어 있어서 그렇다.

 

기존 경로가 http://localhost:8080/프로젝트명/servlet/패키지명.클래스명 이라고 자세히 나와있는 부분을

URL 매핑을 통해 http://localhost:8080/프로젝트명/URL명 으로 간단하게 변경 하는 것이다.

 

그리고 또 하나 알게 된 점은 (본인이 직접 테스트해본 이유)

.jsp는 localhost:8080/프로젝트명/파일명.jsp 치면 나오지만

.java 파일은 그렇지 않다. 

(매핑 없이 실행해보면 그 경로의 파일을 찾지 못한다고 오류가 난다. )

그래서 실행할 수 있도록 매핑을 하는 것이고,

그 매핑을 함으로써 .jsp에서 매핑된 이름으로 .java 파일에 요청을 보낼 수 있다.

 

 

 

 

먼저 어노테이션된 것을 보자.

아마 서블릿을 만들면 Tomcat이 버전 7부터 지원했기에 자동으로 작성되어있는 것을 볼 수 있다.

새 서블릿을 만들고 바로 Finish 하지말고 Next로 넘겨보자. 

다음과 같이 나올 거다. 여기서 이름을 수정할 수도 삭제할 수도 있다.

 

 

 

 


맨 상단 클래스명 바로 위에 

@WebServlet("/매핑명") 이 작성 되어있는 것을 볼 수 있다.

 

 

 
 
이번에는 web.xml 로 매핑해보자.
web.xml은 WebContent 폴더 안에 WEB-INF 안에 들어 있다.
이것 또한 프로젝트 만들때 Next를 하여 마지막에 web.xml 만들거니 ? 라는 체크란을 체크해야지만 자동으로 나와있다.
 
 
 
 
 

개인적으로 두가지 다 해본 결과

둘 중에 하나 선택하라고 한다면 유지보수면에서는 web.xml을 고르겠다. 그러나 그것은 정답은 아니다.

 

 

어쨌든 web.xml을 선택한 이유는 어노테이션으로만 한다면

서블릿의 url-pattern을 알려면 각각의 페이지마다 다 들어가야 한다는 점이다.

 

어노테이션으로 하지 않으면 web.xml에 전부 작성을 하면된다.

전부 있기 때문에 모든 서블릿의 경로를 알 수 있다는 것이다.

그리고 각각 페이지마다 주석을 달거나 파일명을 보면 무슨 역할을하는지 다 보일 것이다.

 

그래서 여기서 테스트를 또 해보았다.

그럼 어노테이션도하고, web.xml도 하면 어떠한가 ?

문제없이 어노테이션으로 달았던 url-pattern 경로나 web.xml에 넣었던 url-pattern 경로나 둘다 페이지 접속하는데는 문제 없다.

 

 

그래서 개인적으로는 2곳 다 작성하는 것이 어떠한가 생각이 든다.

근데 그것은 또 유지보수면에서 하나 수정하면 다른 하나도 수정해야한다는 점인데, 

둘중에 하나만 수정해도 동작은 가능하니 프로젝트 규칙에 넣어

모든 사람들이 볼 수 있게 한다면 큰 문제는 없으리라 본다. 

아니면 꼭 한군데여야 한다면 web.xml ~ 

 

댓글