2025. 10. 29. 15:54ㆍJava/JSP
❶ 서블릿(Servlet)과 JSP(Java Server Page) 개념
Servlet은 Java 기반 웹 애플리케이션의 핵심 구성 요소로, 클라이언트의 요청을 처리하고 응답을 생성하는 서버 측 프로그램입니다. 서블릿은 주로 서버에서 비즈니스 로직을 처리하며, HTTP 요청을 받고 응답을 생성하는 역할을 합니다.
JSP (Java Server Pages)는 HTML 코드 안에 Java 코드를 삽입하여 동적인 웹 페이지를 생성하는 기술입니다. JSP는 클라이언트에게 표시할 내용을 작성하는 데 주로 사용되며, 서블릿과의 차이점은 비즈니스 로직을 처리하지 않고 화면 출력만 담당한다는 것입니다. JSP는 서버 측에서 동적으로 생성된 HTML을 클라이언트에게 반환합니다.
Servlet과 JSP의 관계는 다음과 같습니다:
- Servlet: 클라이언트의 요청을 받아 비즈니스 로직을 처리하고, JSP로 결과를 전달
- JSP: 비즈니스 로직을 처리한 후 HTML 형태로 결과를 클라이언트에게 전달

❷ MVC 패턴 개념
MVC (Model-View-Controller)는 웹 애플리케이션에서 비즈니스 로직과 사용자 인터페이스를 분리하여, 유지보수성과 확장성을 높이기 위한 설계 패턴입니다. 이 패턴은 애플리케이션을 세 가지 주요 구성 요소로 나누어 처리합니다:
- Model: 데이터와 비즈니스 로직을 처리하는 역할을 하며, 데이터베이스와의 상호작용을 담당합니다. 예를 들어, 데이터를 저장하거나 조회하는 작업을 처리합니다.
- View: 사용자 인터페이스로, 클라이언트에게 보여지는 화면을 담당합니다. JSP는 View로서 화면을 출력합니다.
- Controller: 클라이언트의 요청을 받아 적절한 Model을 호출하고, 결과를 View로 전달하여 화면을 업데이트합니다. 서블릿은 Controller 역할을 합니다.
MVC 패턴을 통해 각 구성 요소가 서로 분리되어 있기 때문에 유지보수가 용이하고, 새로운 기능 추가가 쉬워집니다.

❸ ParamServlet 실습 (GET / POST 처리)
다음으로 ParamServlet.java를 이용한 GET과 POST 요청 처리 실습을 진행했습니다. 실습에서는 username, password 파라미터를 처리하여 GET 방식의 검색과 POST 방식의 로그인 기능을 구현했습니다.
@WebServlet("/param")
public class ParamServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String searchWord = req.getParameter("searchWord");
resp.getWriter().println("Search Word: " + searchWord);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String username = req.getParameter("username");
String password = req.getParameter("password");
resp.getWriter().println("Username: " + username);
resp.getWriter().println("Password: " + password);
}
}
핵심 포인트:
- request.getParameter() 사용: GET/POST 방식의 파라미터를 처리
- request.setCharacterEncoding("utf-8") → 한글 처리 필수
- GET과 POST 방식의 차이를 이해하고 각각의 파라미터를 어떻게 처리하는지 실습
❹ Postman으로 요청 확인
실습에서는 Postman을 이용해 GET/POST 요청을 보냈고, 콘솔에서 그 결과를 확인할 수 있었습니다.
Postman

콘솔 출력 결과:

Postman을 통해 요청을 보내고 request-응답 사이클을 학습하며, 서버와의 연동이 잘 이루어졌는지 확인했습니다.
❺ BookServlet.java (CRUD 분기 실습)
이번에는 하나의 Servlet에서 여러 CRUD 작업을 분기 처리하는 실습을 진행했습니다. switch 문을 사용하여 job 파라미터에 따라 각 CRUD 작업을 구분했습니다.
두가지 방법으로 실습 진행하였습니다.
package servlet;
import java.io.IOException;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
// 하나의 서블릿으로 book 의 crud 처리
// 방법 1. job 파라미터 추가
// REST 방식 X
//@WebServlet("/books") // 방법 1
@WebServlet("/books/*") //방법 2
public class BookServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
// @Override
// protected void doGet(HttpServletRequest request, HttpServletResponse response)
// throws ServletException, IOException {
// String job = request.getParameter("job");
// switch (job) {
// case "list":
// list();
// break; // get http://localhost:8080/WebBasic/books?job=list
// case "detail":
// detail();
// break; // get http://localhost:8080/WebBasic/books?job=detail&bookId=123
// case "insert":
// insert();
// break; // post http://localhost:8080/WebBasic/books?job=insert
// case "update":
// update();
// break; // post http://localhost:8080/WebBasic/books?job=update
// case "delete":
// delete();
// break; // get http://localhost:8080/WebBasic/books?job=delete&bookId=123
// }
// }
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println(request.getRequestURI());
System.out.println(request.getContextPath());
String job = request.getRequestURI().substring(request.getContextPath().length());
switch (job) {
case "/books/list":
list();
break; // get http://localhost:8080/WebBasic/books/list
case "/books/detail":
detail();
break; // get http://localhost:8080/WebBasic/books/detail?bookId=123
case "/books/insert":
insert();
break; // post http://localhost:8080/WebBasic/books/insert
case "/books/update":
update();
break; // post http://localhost:8080/WebBasic/books/update
case "/books/delete":
delete();
break; // get http://localhost:8080/WebBasic/books/delete?bookId=123
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
private void list() {
System.out.println("list");
}
private void detail() {
System.out.println("detail");
}
private void insert() {
System.out.println("insert");
}
private void update() {
System.out.println("update");
}
private void delete() {
System.out.println("delete");
}
}
콘솔 결과:

각각의 URL 예시:
- GET /books?job=list → 목록 보기
- GET /books?job=detail&bookId=3 → 상세 보기
- POST /books?job=insert → 추가
- POST /books?job=update → 수정
- GET /books?job=delete&bookId=3 → 삭제
❻ Postman을 이용한 CRUD 테스트
Postman을 사용하여 job 파라미터를 다르게 설정하여 각 CRUD 작업을 테스트해봤습니다.
각각의 GET/POST 요청을 통해 실시간으로 콘솔 결과를 확인하고, Servlet 기반의 컨트롤러 설계를 익힐 수 있었습니다.
'Java > JSP' 카테고리의 다른 글
| [LG U+ 유레카 3기] JPA 연관관계 & Fetch 전략 (0) | 2025.11.19 |
|---|---|
| [LG U+ 유레카 3기] JSP + Servlet + Ajax로 도서 관리 화면 만들기 (0) | 2025.10.31 |
| [LG U+ 유레카 3기] JSP + Servlet + DAO 기반 도서관리 CRUD 실습 (0) | 2025.10.30 |
| [LG U+ 유레카 3기] JSP Forward/Redirect MVC 흐름 (0) | 2025.10.30 |
| [LG U+ 유레카 3기]Web Server vs WAS 관련 정리 (0) | 2025.10.29 |