πŸ“Œ JSP μ‹€μŠ΅: page μ§€μ‹œμ–΄ κ°œλ…κ³Ό DTO 연동, μ—λŸ¬ 처리 흐름 정리

My Pale Blue DotΒ·2025λ…„ 4μ›” 2일
0

JSP/SERVLET

λͺ©λ‘ 보기
3/25
post-thumbnail

πŸ“… λ‚ μ§œ

2025λ…„ 4μ›” 2일


πŸ“ ν•™μŠ΅ λ‚΄μš©

βœ… 1. page μ§€μ‹œμ–΄λž€?

<%@ page %>λŠ” JSP νŽ˜μ΄μ§€μ˜ μ‹€ν–‰ ν™˜κ²½κ³Ό 속성을 μ •μ˜ν•˜λŠ” μ§€μ‹œμ–΄(Directive)이닀.

νŽ˜μ΄μ§€ μƒλ‹¨μ—μ„œ μ‚¬μš©ν•˜λ©°, JSPκ°€ μ„œλΈ”λ¦ΏμœΌλ‘œ λ³€ν™˜λ  λ•Œ 이 섀정듀이 λ°˜μ˜λœλ‹€.

자주 μ‚¬μš©ν•˜λŠ” 속성듀:

속성λͺ…μ„€λͺ…
languageJSPμ—μ„œ μ‚¬μš©ν•  μ–Έμ–΄ (κΈ°λ³Έκ°’: java)
contentTypeλΈŒλΌμš°μ €μ— 보낼 μ½˜ν…μΈ  νƒ€μž…(MIME type)κ³Ό 문자 인코딩
pageEncodingJSP 파일 자체의 인코딩
importμ‚¬μš©ν•  μžλ°” 클래슀(νŒ¨ν‚€μ§€)λ₯Ό κ°€μ Έμ˜΄
errorPageμ˜ˆμ™Έ λ°œμƒ μ‹œ ν¬μ›Œλ”©ν•  JSP νŽ˜μ΄μ§€
isErrorPageμ—λŸ¬ 처리용 νŽ˜μ΄μ§€μΈμ§€ μ—¬λΆ€λ₯Ό μ§€μ • (true/false)

βœ… 2. page μ§€μ‹œμ–΄ 예제 흐름

πŸ“Œ μž…λ ₯ 처리 νŽ˜μ΄μ§€ (μ—λŸ¬ λ°œμƒ κ°€λŠ₯)

<%@ page errorPage="02Error.jsp" %>
<%
    if (request.getParameter("name").isEmpty()) {
        throw new Exception("이름을 μž…λ ₯ν•˜μ„Έμš”");
    }
%>

πŸ“Œ μ—λŸ¬ 처리 μ „μš© νŽ˜μ΄μ§€

<%@ page isErrorPage="true" %>
<%= exception.getMessage() %>

❗ errorPage와 isErrorPageλŠ” λ°˜λ“œμ‹œ 쌍으둜 μ‚¬μš©ν•΄μ•Ό 함

κ·Έλ ‡μ§€ μ•ŠμœΌλ©΄ exception λ‚΄μž₯ 객체λ₯Ό μ‚¬μš©ν•  수 μ—†μŒ


βœ… 3. DTOλž€?

DTO(Data Transfer Object)λŠ” 데이터λ₯Ό μ „λ‹¬ν•˜κ±°λ‚˜ 응닡할 λ•Œ μ‚¬μš©ν•˜λŠ” 순수 데이터 객체이닀.

λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 없이 ν•„λ“œ, μƒμ„±μž, getter/setter만 ν¬ν•¨λ˜λ©°,

MVC νŒ¨ν„΄μ—μ„œ View와 Controller κ°„ 데이터 전달에 맀우 자주 μ‚¬μš©λœλ‹€.


1️⃣ SimpleDTO.java - DTO 클래슀 μ •μ˜

package C03;

public class SimpleDTO {
    private String name;
    private Integer age;
    private String addr;

    // κΈ°λ³Έ μƒμ„±μž
    public SimpleDTO() {}

    // λͺ¨λ“  ν•„λ“œλ₯Ό μ΄ˆκΈ°ν™”ν•˜λŠ” μƒμ„±μž
    public SimpleDTO(String name, Integer age, String addr) {
        this.name = name;
        this.age = age;
        this.addr = addr;
    }

    // getter & setter
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    public String getAddr() {
        return addr;
    }
    public void setAddr(String addr) {
        this.addr = addr;
    }

    @Override
    public String toString() {
        return "SimpleDTO [name=" + name + ", age=" + age + ", addr=" + addr + "]";
    }
}

2️⃣ SimpleDTOTest.jsp - DTO 객체 생성 및 좜λ ₯

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ page import="C03.SimpleDTO" %>
<%
    // DTO 객체 생성
    SimpleDTO dto = new SimpleDTO("홍길동", 55, "λŒ€κ΅¬");
%>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>DTO 좜λ ₯</title>
</head>
<body>
    name : <%= dto.getName() %> <br/>
    age : <%= dto.getAge() %> <br/>
    addr : <%= dto.getAddr() %> <br/>
</body>
</html>

πŸ”Έ μ½˜μ†” μž…λ ₯용 ScannerλŠ” JSPμ—μ„œ μ‚¬μš© λΆˆκ°€μ΄λ―€λ‘œ 제거


3️⃣ 02Form.jsp - μ‚¬μš©μž μž…λ ₯ 폼

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" errorPage="02Error.jsp" %>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>μž…λ ₯폼</title>
</head>
<body>
    <form action="02Main.jsp">
        <input type="text" name="name" placeholder="이름"/><br/>
        <input type="text" name="age" placeholder="λ‚˜μ΄"/><br/>
        <input type="text" name="addr" placeholder="μ£Όμ†Œ"/><br/>
        <button>전솑</button>
    </form>
</body>
</html>

4️⃣ 02Main.jsp - μž…λ ₯ 처리 및 DTO ν™œμš© 좜λ ₯

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="C03.SimpleDTO" %>
<%
    // μž…λ ₯κ°’ μˆ˜μ‹ 
    String name = request.getParameter("name");
    String age = request.getParameter("age");
    String addr = request.getParameter("addr");

    // μœ νš¨μ„± 검사
    if (name == null || name.isEmpty()) throw new Exception("이름을 μž…λ ₯ν•˜μ„Έμš”");
    if (age == null || age.isEmpty()) throw new Exception("λ‚˜μ΄λ₯Ό μž…λ ₯ν•˜μ„Έμš”");
    if (addr == null || addr.isEmpty()) throw new Exception("μ£Όμ†Œλ₯Ό μž…λ ₯ν•˜μ„Έμš”");

    // DTO 객체 생성
    SimpleDTO dto = new SimpleDTO(name, Integer.parseInt(age), addr);
%>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>μž…λ ₯κ²°κ³Ό</title>
</head>
<body>
    이름 : <%= dto.getName() %><br/>
    λ‚˜μ΄ : <%= dto.getAge() %><br/>
    μ£Όμ†Œ : <%= dto.getAddr() %><br/>
    DTO 전체 정보: <%= dto %>
</body>
</html>

5️⃣ 02Error.jsp - μ˜ˆμ™Έ 처리 νŽ˜μ΄μ§€

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isErrorPage="true" %>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>μ—λŸ¬ νŽ˜μ΄μ§€</title>
</head>
<body>
    <h1>ERROR PAGE...</h1>
    <hr/>
    <%= exception.getMessage() %>
</body>
</html>

πŸ”₯ 정리

  • page μ§€μ‹œμ–΄λŠ” JSP μ‹€ν–‰ 섀정을 λ‹΄λ‹Ήν•˜λ©°, 특히 errorPage, isErrorPageλŠ” μ˜ˆμ™Έ 처리 흐름 ꡬ성에 핡심적이닀.
  • DTO κ°μ²΄λŠ” JSPμ—μ„œλ„ μœ νš¨ν•˜κ²Œ μ‚¬μš©ν•  수 있으며, μ½”λ“œμ˜ 가독성과 데이터 μ „λ‹¬μ˜ λͺ…확성을 λ†’μ—¬μ€€λ‹€.
  • JSPμ—μ„œλŠ” μ½˜μ†” μž…λ ₯이 λΆˆκ°€ν•˜λ―€λ‘œ μ‚¬μš©μž μž…λ ₯은 request.getParameter()둜만 λ°›μ•„μ•Ό ν•œλ‹€.
  • μ—λŸ¬ λ°œμƒ μ‹œ μ‚¬μš©μžμ—κ²Œ μΉœμ ˆν•œ λ©”μ‹œμ§€λ₯Ό 보여쀄 수 μžˆλ„λ‘ μ „μš© μ—λŸ¬ νŽ˜μ΄μ§€λ₯Ό ꡬ성할 수 μžˆλ‹€.

πŸ”— μ°Έκ³  자료

  • JSP 곡식 λ¬Έμ„œ
  • JSP Servlet κΈ°λ³Έ κ°•μ˜
  • μ‹€μŠ΅ ν”„λ‘œμ νŠΈ 파일

πŸ’¬ λŠλ‚€ 점

이번 JSP μ‹€μŠ΅μ„ 톡해 page μ§€μ‹œμ–΄μ˜ 역할을 λͺ…ν™•ν•˜κ²Œ 이해할 수 μžˆμ—ˆκ³ ,

errorPage와 isErrorPage의 관계λ₯Ό μ‹€μŠ΅μ„ 톡해 직접 체득할 수 μžˆμ—ˆλ‹€.

λ˜ν•œ DTO 객체λ₯Ό 톡해 좜λ ₯ ꡬ쑰λ₯Ό κΉ”λ”ν•˜κ²Œ ꡬ성할 수 μžˆλ‹€λŠ” 것도 체감할 수 μžˆμ—ˆλ‹€.

이 ꡬ쑰λ₯Ό 기반으둜 λ‹€μŒ λ‹¨κ³„μ—μ„œλŠ” Servletκ³Ό JSPλ₯Ό λΆ„λ¦¬ν•œ MVC2 ꡬ쑰둜 ν™•μž₯ν•˜μ—¬ μ‹€μ œ μ›Ή ν”„λ‘œμ νŠΈμ— μ μš©ν•΄λ³΄κ³  μ‹Άλ‹€.


πŸ“Œ μš”μ•½

  • JSPλŠ” page μ§€μ‹œμ–΄λ₯Ό 톡해 μ‹€ν–‰ ν™˜κ²½μ„ ꡬ성
  • errorPage + isErrorPage μ‘°ν•©μœΌλ‘œ μ—λŸ¬ 흐름 μ œμ–΄ κ°€λŠ₯
  • DTO 객체λ₯Ό 톡해 데이터 전달을 λͺ…ν™•ν•˜κ³  ꡬ쑰적으둜 ν•  수 있음
  • JSP 내뢀에 μžλ°” λ‘œμ§μ„ μ΅œμ†Œν™”ν•˜κ³ , 가독성 μžˆλŠ” 섀계λ₯Ό 좔ꡬ해야 함

profile
Here, My Pale Blue.🌏

0개의 λŒ“κΈ€