본문 바로가기
Software Tech/Spring (feat.JAVA)

Servlet & JSP에 대하여

by SuperDev 2024. 12. 26.

1. JSP와 Servlet의 역할과 차이

JSP (Java Server Pages)

  • 역할: 웹 애플리케이션에서 화면 처리(View)를 담당.
  • 특징:
    • HTML과 자바 코드를 혼합하여 작성.
    • WAS(Web Application Server)가 JSP를 서블릿으로 변환하여 실행.
    • 비즈니스 로직을 최소화하고 화면 구성에 집중.
    • 동적으로 데이터를 HTML에 렌더링.

Servlet

  • 역할: 비즈니스 로직(Model)을 처리하고 클라이언트 요청(Request)을 응답(Response)으로 변환.
  • 특징:
    • 순수 자바 코드로 작성되어 HTTP 요청/응답 처리.
    • HTML 태그를 자바 코드로 작성해야 하므로 복잡.
    • JSP보다 코드 작성이 어렵지만, 정확한 흐름 제어 가능.
    • 대체로 JSP와 함께 사용하며 데이터를 전달.

2. 라이프사이클과 객체 관리

Servlet 라이프사이클

  1. init(): 서블릿 초기화. 애플리케이션이 처음 로드될 때 1회 실행.
  2. service(): 클라이언트 요청 처리. doGet(), doPost()와 같은 메서드 호출.
  3. destroy(): 서블릿 종료 시 호출. 자원 해제.

JSP 라이프사이클

  1. 변환: JSP 파일 → 서블릿(_jsp.java)으로 변환.
  2. 컴파일: 서블릿으로 변환된 파일이 컴파일되어 .class 파일 생성.
  3. 실행: 서블릿 형태로 요청 처리.

3. 요청/응답 처리

HTTP 메서드

  • GET: 서버에서 데이터를 조회. URL에 파라미터 포함.
  • POST: 서버에 데이터를 생성. 보안과 데이터 크기 면에서 GET보다 유리.
  • PUT: 데이터를 업데이트.
  • DELETE: 데이터를 삭제.

Servlet 메서드

  • doGet(HttpServletRequest req, HttpServletResponse res): GET 요청 처리.
  • doPost(HttpServletRequest req, HttpServletResponse res): POST 요청 처리.

요청/응답 객체

  • HttpServletRequest:
    • 클라이언트 요청 데이터 처리.
    • 파라미터 가져오기: req.getParameter("name").
  • HttpServletResponse:
    • 클라이언트 응답 처리.
    • HTML 출력: res.getWriter().println("<h1>Hello</h1>").

4. JSP와 데이터 전달

JSP에서 데이터 처리 방식

  1. 스크립틀릿 사용: <% ... %>
    • JSP 안에서 자바 코드를 작성.
    • 유지보수성과 가독성이 떨어지므로 사용 지양.
  2. 표현식 사용: <%= ... %>
    • 데이터를 출력할 때 사용.
      <%= user.getName() %>
  3. JSTL (Java Standard Tag Library)
    • 자바 코드를 태그로 대체.
    • 반복 처리: <c:forEach>
    • 조건 분기: <c:if>
      <c:forEach var="item" items="${items}">
          <p>${item.name}</p>
      </c:forEach>

Servlet과 JSP 간 데이터 전달

  • setAttributegetAttribute:
    • 데이터를 JSP에 전달하기 위해 사용.
    • 예:
      req.setAttribute("user", user);
      RequestDispatcher dispatcher = req.getRequestDispatcher("user.jsp");
      dispatcher.forward(req, res);

5. Scope의 이해

Scope 종류와 용도

  • Page: JSP 페이지 내에서만 데이터 유지.
  • Request: 요청이 유지되는 동안 데이터 유지. 같은 요청에 포함된 JSP/Servlet에서 공유.
  • Session: 사용자 세션이 유지되는 동안 데이터 유지.
  • Application: 애플리케이션 전역에서 데이터 유지. 서버가 종료될 때까지 지속.

6. URL 매핑

  • URL 패턴과 서블릿 매핑
    • web.xml 또는 어노테이션(@WebServlet)으로 설정.
    • 예:
      @WebServlet("/user")
      public class UserServlet extends HttpServlet { }

7. 에러 처리

HTTP 에러 코드

  • 404: 요청한 리소스(URL)를 찾을 수 없음.
  • 405: 지원하지 않는 HTTP 메서드.
  • 500: 서버 내부 에러.

에러 페이지 설정

  • web.xml:
    <error-page>
        <error-code>404</error-code>
        <location>/error404.jsp</location>
    </error-page>

8. Spring과의 연계

Spring MVC 아키텍처

  • Model: 데이터 처리.
  • View: 화면 처리(JSP, Thymeleaf).
  • Controller: 요청/응답 처리 및 Model-View 연결.

Spring Boot의 역할

  • 객체의 생명주기 관리.
  • 의존성 주입(Dependency Injection).
  • 인증, 로깅, 예외 처리 등 공통 작업 통합.

9. 개발자가 알아야 할 추가 개념

WAS(Web Application Server)

  • JSP와 서블릿 실행 환경.
  • WAS 역할:
    • 요청 처리, 데이터 전송.
    • 라이프사이클 관리(init, destroy).
    • 예: Tomcat, Jetty, WildFly.

배포 구조

  • WAR (Web Application Archive):
    • JSP/Servlet 파일, 설정 파일(web.xml), 정적 리소스를 포함.
    • 배포 시 WAR 파일을 WAS에 업로드.

모범 사례

  1. JSP에 자바 코드를 최소화.
  2. 비즈니스 로직은 서블릿 또는 서비스 클래스에서 처리.
  3. 데이터를 JSP에 전달할 때는 setAttribute 사용.
  4. 유지보수성을 위해 JSTL 및 커스텀 태그 사용.
728x90