[LG U+ 유레카 3기] JSP Forward/Redirect MVC 흐름

2025. 10. 30. 10:28Java/JSP

 


❶ MVC 구조 속 JSP의 역할

이번 실습은 MVC 패턴에서 Controller → View 전달 과정을 이해하고, JSP 문법과 함께 forward / redirect 개념을 실습한 코드이다.
Controller(서블릿)는 Model을 request 객체에 담아 JSP로 전달하고, JSP(View)는 그 데이터를 화면에 출력한다.

---

❷ MVCServlet (Controller) 코드 분석


@WebServlet("/mvc")
public class MVCServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        String job = request.getParameter("job");
        switch (job) {
        case "list":
            List<String> strList = List.of("Java", "Servlet", "JSP");
            request.setAttribute("strList", strList);
            request.getRequestDispatcher("/mvc.jsp").forward(request, response);
            break;
        case "info":
            response.sendRedirect("/WebBasic/info.html");
            break;
        }
    }
}

forward는 서버 내부에서 JSP로 이동하여 request 객체를 공유하고,
redirect는 클라이언트에게 새로운 요청을 보내 URL이 변경된다.

---

❸ JSP (View) 코드 분석


<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.List"%>

<%
    // Controller가 전달한 모델을 request에서 꺼냄
    List<String> strList = (List<String>) request.getAttribute("strList");
%>

<html>
<body>
<h1>String List</h1>
<%
    for(String str : strList) {
%>
    <h4><%= str %></h4>
<%
    }
%>
</body>
</html>

이 JSP는 request에 담긴 List<String> 데이터를 꺼내어 화면에 반복 출력한다.
forward된 상태이므로 request.getAttribute("strList")로 접근이 가능하다.

---

❹ JSP 기본 문법 (Expression / Scriptlet / Declaration)

문법 형태 설명 예시
Expression <%= %> 자바 변수를 출력할 때 사용 <%= str %>
Scriptlet <% %> 자바 코드를 작성하는 공간 (변수 선언, 제어문 등) <% for(String s : list) { %>
Declaration <%! %> 메서드나 전역변수 선언 시 사용 <%! int count = 0; %>

---

❺ forward / redirect 비교

구분 forward redirect
이동 주체 서버 내부 이동 클라이언트 재요청
요청 횟수 1회 2회
URL 변경 변경 없음 URL 변경됨
데이터 유지 request 객체 유지 request 새로 생성됨
사용 예시 JSP로 데이터 전달 (MVC View) 로그인 후 메인 이동, 등록 후 목록 리다이렉트

---

❼ 실행 흐름 시각화

브라우저 → MVCServlet(job=list)
        ↓
request.setAttribute("strList", list)
request.getRequestDispatcher("/mvc.jsp").forward()
        ↓
JSP에서 request.getAttribute("strList") 사용

브라우저 → MVCServlet(job=info)
        ↓
response.sendRedirect("/WebBasic/info.html")
        ↓
브라우저가 새 요청으로 이동

---

❽ 핵심 요약

  • forward는 서버 내부에서 JSP로 요청을 넘길 때 사용한다.
  • redirect는 클라이언트에게 다시 요청을 시켜 URL이 바뀐다.
  • JSP는 <% %>, <%= %> 문법을 통해 자바 코드를 포함할 수 있으며, Model 데이터를 표현하는 View 역할을 담당한다.

---