반응형
Servlet
실행환경
컨텍스트 : Context root(프로젝트명)
웹프로그래밍을 위한 물리적인 디렉토리로 실행단위, 배포단위
- 경로 설정 or WebServlet어노테이션 사용시 반드시 Web Project Settings확인
경로
request.getXXX를 통해 관련 정보를 구체적으로 얻을 수 있음
예시
http://localhost:8090/headers/requestinfo.jsp?id=cust001&name=jack

코드
경로 1
HkController.java 파일에 @WebServlet("/HkController.do")를 사용했을 때 아래와 같이 해석할 수 있다
- Servlet에서 @WebServlet("/HkController.do") 주석은 Servlet 클래스를 "/HkController.do"인 URL 패턴에 매핑하는 데 사용
- HkController라는 서블릿 클래스가 있고 @WebServlet("/HkController.do")로 주석을 추가하면 URL 패턴 /HkController.do와 일치하는 요청을 처리
- 사용자가 http://example.com/HkController.do%EC%99%80 같은 URL로 요청을 보내면 요청을 처리하기 위해 HkController 클래스가 호출됩니다.
- 이 주석은 web.xml 파일에서 서블릿 매핑을 정의할 필요가 없기 때문에 웹 애플리케이션에서 서블릿 구성을 단순화하는 데 사용되는 대신 이 주석을 사용하여 Servlet 클래스에서 직접 매핑을 정의가능
동작 원리
index.jsp에서 아래와 같이 command키값을 전달하여 루트 경로다음 HkController.do라는 경로를 가진 HkController클래스 호출
<a href="HkController.do?command=boardlist">글목록 조회</a>
이때 전달한 키를 파라미터로 받아 분기형태로
String command=request.getParameter("command");
if(command.equals("boardlist")){//글목록 요청 처리
List<HkDto>lists=dao.getAllList();
request.setAttribute("lists", lists);
request.getRequestDispatcher("boardlist.jsp").forward(request, response);
경로 2
HkController.java 파일에 @WebServlet("*.board") 를 사용했을 때 아래와 같이 해석할 수 있다
- Servlet에서 @WebServlet("*.board") 주석은 Servlet 클래스를 .board로 끝나는 URL 패턴에 매핑하는 데 사용
- HkController이라는 서블릿 클래스가 있고 @WebServlet("*.board")로 주석을 추가하면 패턴 *.board와 일치하는 요청을 처리
- 사용자가 http://example.com/boardlist.board%EC%99%80 같은 URL로 요청을 보내면 요청을 처리하기 위해 HkController 클래스가 호출
동작 원리
index.jsp
<a href="boardlist.board">글목록 조회</a>
.board를 매핑하는 HkController.java를 호출
String requestURI=request.getRequestURI();
String contextPath=request.getContextPath();
String pathInfo=request.getPathInfo();
StringBuffer requestURL=request.getRequestURL();
System.out.println(requestURI+",\n"
+contextPath+",\n"
+pathInfo+",\n"
+requestURL.toString()+'\n'
);
출력
/5_hkboard_MVC2/boardlist.board,
/5_hkboard_MVC2,
null,
http://localhost:8090/5_hkboard_MVC2/boardlist.board
이 때 분기를 정하는 command를 설정
String command=requestURI.substring(contextPath.length());
출력
/boardlist.board
출력되는 결과를 가지고 분기처리
if(command.equals("/boardlist.board"))
@WebServlet사용이유
- 서블릿 구성 간소화: @WebServlet 주석을 사용하면 web.xml 파일에서 서블릿 매핑을 정의할 필요가 없으므로 웹 애플리케이션에서 서블릿 구성이 간소화, 이 주석을 사용하여 Servlet 클래스에서 직접 매핑을 정의
- 향상된 가독성: @WebServlet 주석은 Servlet 클래스와 URL 패턴의 매핑을 명시적으로 선언하여 개발자가 Servlet의 목적을 더 쉽게 이해할 수 있도록 하여 코드 가독성을 향상
- 유연성: @WebServlet 주석을 사용하면 배포 설명자(web.xml) 파일을 변경하지 않고도 서블릿의 URL 패턴을 변경할 수 있는 유연성을 제공, 이는 애플리케이션에 많은 서블릿이 있고 해당 URL 매핑을 변경하려는 경우에 특히 유용
- 손쉬운 유지 관리: @WebServlet 주석을 사용하면 코드에서 직접 Servlet 매핑을 유지 관리할 수 있으므로 코드베이스를 쉽게 관리하고 구성 오류 가능성을 줄임
반응형
'back-end > JSP&Servlet' 카테고리의 다른 글
(Servlet)MVC1패턴 (0) | 2023.03.21 |
---|