back-end/JSP&Servlet

(Servlet)WebServlet어노테이션

doheun 2023. 3. 24. 17:26
반응형

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사용이유

  1. 서블릿 구성 간소화: @WebServlet 주석을 사용하면 web.xml 파일에서 서블릿 매핑을 정의할 필요가 없으므로 웹 애플리케이션에서 서블릿 구성이 간소화, 이 주석을 사용하여 Servlet 클래스에서 직접 매핑을 정의
  2. 향상된 가독성: @WebServlet 주석은 Servlet 클래스와 URL 패턴의 매핑을 명시적으로 선언하여 개발자가 Servlet의 목적을 더 쉽게 이해할 수 있도록 하여 코드 가독성을 향상
  3. 유연성: @WebServlet 주석을 사용하면 배포 설명자(web.xml) 파일을 변경하지 않고도 서블릿의 URL 패턴을 변경할 수 있는 유연성을 제공, 이는 애플리케이션에 많은 서블릿이 있고 해당 URL 매핑을 변경하려는 경우에 특히 유용
  4. 손쉬운 유지 관리: @WebServlet 주석을 사용하면 코드에서 직접 Servlet 매핑을 유지 관리할 수 있으므로 코드베이스를 쉽게 관리하고 구성 오류 가능성을 줄임
반응형

'back-end > JSP&Servlet' 카테고리의 다른 글

(Servlet)MVC1패턴  (0) 2023.03.21