JSP / Servlet을 활용해 상품 페이지 만들기
2개의 Java 파일, 1개의 JSP로 구성하여 서버 전송 및 응답과정을 확인 , 원하는 결과값을 도출해 내는 과정을 거치고자 함
코드는 작성된 예제를 기반으로 일부 수정 및 그대로 인용하였음
📁 소스 구조
project-root/
├─ src/main/java/
│ ├─ Product.java
│ └─ ProductServlet.java
├─ src/main/webapp/
│ └─ product-list.jsp
└─ pom.xml
💻 Product.java
public class Product {
private String name;
private int price;
private int quantity;
public Product(String name, int price, int quantity) {
this.name = name; this.price = price; this.quantity = quantity;
}
public String getName() { return name; }
public int getPrice() { return price; }
public int getQuantity() { return quantity; }
}
- 입력 받아야 하는 각 변수들의 값을 받고, 저장하는 과정이 나타나있는 java 파일
- Product 라는 객체를 생성할 경우 반드시 이름, 가격, 수량을 받아 초기화 하는 것
- GET을 통해 값을 읽어오도록 요청
💻 ProductServlet.java
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;
import java.util.List;
@WebServlet("/products")
public class ProductServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String userName = "하마";
List<Product> products = List.of(
new Product("삼겹살", 28000, 3),
new Product("콜드브루 원액 500ml", 12000, 5),
new Product("텀블러 1L", 18000, 4),
new Product("머그컵", 9500, 6)
);
req.setAttribute("userName", userName);
req.setAttribute("products", products);
RequestDispatcher rd = req.getRequestDispatcher("product-list.jsp");
rd.forward(req, resp);
}
}
- @WebServlet("/products")로 인하여 브라우저에서 /products 요청이 들어왔을 경우 서블릿이 실행되도록 함
- Product에 여러 객체들을 리스트로 담아냄 (목록 데이터 준비)
- req.setAttribute 로 JSP에 데이터를 전달하기 위해 request 영역에 저장
- RequestDispatcher 선언으로 jsp 파일로 제어를 넘기는 과정
- JSP가 실행되면서 앞서 담았던 내용들을 사용할 수 있게 해줌
🖥️ product-list.jsp
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!doctype html>
<html lang="ko">
<head><meta charset="utf-8"><title>상품 목록</title></head>
<body>
<h2><c:out value="${userName}"/>님, 반갑습니다!</h2>
<h3>상품 목록</h3>
<ul>
<c:forEach var="p" items="${products}">
<li>
상품명: <c:out value="${p.name}"/> /
가격: <c:out value="${p.price}"/>원 /
수량: <c:out value="${p.quantity}"/>개
</li>
</c:forEach>
</ul>
</body>
</html>
- 서블릿에서 전달한 값들을 화면에 리스트 형태로 보여주는 역할을 하고 있고,
<c:forEach>는 Products 의 리스트를 순회하면서 각각의 Product 객체를 화면에 뿌려주는 부분
❗️의존성 추가
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
🌠 실행 결과

📋 정리
- 웹의 동작원리를 이해할 수 있었음
- 요청 → 처리 → 응답 과정에 대한 전반적인 흐름 이해
- 사이드 렌더링 : 데이터를 서버에서 가공하여 HTML로 완성해 클라이언트에게 내보내려는 전통적인 웹 방식의 이해
'JAVA > Java 실습' 카테고리의 다른 글
| [JAVA] 계산기 과제 개념 추가 정리 (0) | 2025.09.16 |
|---|---|
| 점메추 SPA 에디션 (0) | 2025.09.10 |
| MVC 기반 점심 메뉴 추천기 (0) | 2025.09.10 |
| JSP 자기소개 버전 만들기 (0) | 2025.09.09 |
| 나를 소개합니다 (0) | 2025.09.08 |