Back-End

[JSP/Servlet] 웹개발 기초

Minch13r 2025. 2. 20. 14:43

2025.02.20 JSP/Servlet study


JSP란?

JSP는 Java Server Pages의 줄임말로, HTML 코드 안에 자바 코드를 넣어서 동적인 웹 페이지를 만들 수 있게 해주는 기술술이다. 마치 레고 블록처럼 HTML과 자바를 조립해서 웹 페이지를 만드는 것이라고 생각하시면 된다.

 

JSP의 주요 특징

  1. 쉬운 개발
    • HTML 코드 안에 자바 코드를 넣을 수 있어서 웹 페이지 개발이 편리합니다.
    • 기존 HTML을 그대로 사용할 수 있어 디자이너와의 협업이 용이합니다.
  2. 강력한 기능
    • 자바의 모든 기능을 사용할 수 있습니다.
    • 데이터베이스 연동이 쉽습니다.
    • 다양한 라이브러리를 활용할 수 있습니다.

 

JSP의 기본 문법

 

스크립트릿(Scriptlet) <% %>

  • 자바 코드를 직접 실행할 수 있는 영역이다.
<% 
String name = "민영";
int age = 20;
%>

 

표현식(Expression) <%= %>

  • 변수나 메서드의 결과값을 출력할 때 사용한다.
안녕하세요, <%= name %>님!

 

선언부(Declaration) <%! %>

  • 변수나 메서드를 선언할 때 사용한다.
<%! 
public String greeting() {
    return "환영합니다!";
}
%>

 

지시자(Directive) <%@ %>

  • JSP 페이지의 전체적인 속성을 지정할 때 사용한다.
<%@ page language="java" contentType="text/html; charset=UTF-8" %>

JSP의 내장 객체

JSP에서는 따로 선언하지 않아도 바로 사용할 수 있는 객체들이 있다.

  1. request: 클라이언트의 요청 정보를 담고 있다.
  2. response: 응답 정보를 담고 있다.
  3. session: 세션 정보를 담고 있다.
  4. application: 애플리케이션 전역에서 사용되는 정보를 담고 있다.
  5. out: 출력 스트림이다.

JSP의 동작 과정

  1. 클라이언트가 JSP 페이지를 요청한다.
  2. JSP 엔진이 JSP 파일을 자바 파일(서블릿)로 변환한다.
  3. 자바 파일이 컴파일되어 클래스 파일이 된다.
  4. 클래스 파일이 실행되어 HTML 형태로 변환된다.
  5. 클라이언트에게 결과가 전송된다.

Servlet이란?

서블릿은 자바를 사용하여 웹 페이지를 동적으로 생성하는 서버 측 프로그램이다. 마치 웹 서버의 요리사처럼, 클라이언트의 요청을 받아서 처리하고 응답을 만들어주는 역할을 한다.

 

서블릿의 특징

  1. 순수 자바 코드
    • HTML이 아닌 자바 코드로 작성된다.
    • 자바의 모든 기능을 활용할 수 있다.
  2. 높은 성능
    • 한 번 메모리에 로드되면 계속 재사용된다.
    • 멀티스레드로 동작하여 효율적이다.
  3. 플랫폼 독립적
    • 자바의 특성을 그대로 물려받아 어떤 운영체제에서도 동작한다.

Servlet의 생명주기

초기화 단계 (init)

public void init(ServletConfig config) throws ServletException {
    // 서블릿이 처음 메모리에 로드될 때 실행되는 코드
    // 데이터베이스 연결 등 초기화 작업 수행
}

 

서비스 단계 (service)

public void service(ServletRequest request, ServletResponse response) {
    // 클라이언트의 요청을 처리하는 코드
    // doGet, doPost 등의 메서드 호출
}

 

소멸 단계(destroy)

public void destroy() {
    // 서블릿이 메모리에서 제거될 때 실행되는 코드
    // 자원 해제 등의 작업 수행
}

서블릿의 주요 기능

  1. 요청 처리
    • GET, POST 등 HTTP 메서드 처리
    • 파라미터 받기
    • 헤더 정보 확인
  2. 응답 생성
    • HTML 생성
    • JSON 응답
    • 파일 다운로드
  3. 세션 관리
    • 로그인 상태 유지
    • 사용자별 데이터 관리

실습

<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
</head>
<body>
<%
    int res = 0;
    String fruit = "";
    int quantity = 0;
    if (request.getMethod().equals("POST")) {
        int price = 0;
        fruit = request.getParameter("fruit");
        if (fruit.equals("사과")) {
            price = 1000;
        } else if (fruit.equals("바나나")) {
            price = 2000;
        } else if (fruit.equals("키위")) {
            price = 500;
        }

        quantity = Integer.parseInt(request.getParameter("quantity"));
        res = price * quantity;
    }
%>
<form action="" method="post">
    <p>1,2,3 번 중에 선택해주세요.</p>
    <select name="fruit">
        <option value="사과">1. 사과 1000원</option>
        <option value="바나나">2. 바나나 2000원</option>
        <option value="키위">3. 키위 500원</option>
    </select>

    <p>몇개 구매할건지 입력해주세요.</p>
    <input type="number" name="quantity" min="1">
    <input type="submit" value="계산">
</form>

<hr>

계산결과 : <%= fruit %> <%= quantity %>개 <%= res %>원

</body>
</html>

결과 예시 1
결과 예시 2

 


Bean으로 분리하기

index.jsp

<%@ page import="calc.CalcBean3" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8" %>
<jsp:useBean class="calc.CalcBean3" id="calc"/>
<jsp:setProperty name="calc" property="*"></jsp:setProperty>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
</head>
<body>
<%
    if (request.getMethod().equals("POST")) {
        calc.calcculate();
    }
%>
<form action="" method="post">
    <p>1,2,3 번 중에 선택해주세요.</p>
    <select name="fruit">
        <option value="사과">1. 사과 1000원</option>
        <option value="바나나">2. 바나나 2000원</option>
        <option value="키위">3. 키위 500원</option>
    </select>

    <p>몇개 구매할건지 입력해주세요.</p>
    <input type="number" name="quantity" min="1">
    <input type="submit" value="계산">
</form>

<hr>

<jsp:getProperty property="totalprice" name="calc"></jsp:getProperty>

</body>
</html>

 

CalcBean3

package calc;

public class CalcBean3 {
    private int res;
    private String fruit;
    private int quantity;
    private int price;
    private int totalprice;

    public CalcBean3(){

    }

    public void calcculate() {
        if(this.fruit == null) {
            return;
        }
        else if(this.fruit.equals("사과")) {
            this.price = 1000;
        }
        else if(this.fruit.equals("바나나")) {
            this.price = 2000;
        }
        else if(this.fruit.equals("키위")){
            this.price = 500;
        }
        this.totalprice = this.price * this.quantity;
    }

    public int getQuantity() {
        return quantity;
    }
    public void setQuantity(int quantity) {
        this.quantity = quantity;
    }

    public String getFruit() {
        return fruit;
    }
    public void setFruit(String fruit) {
        this.fruit = fruit;
    }

    public int getRes() {
        return res;
    }
    public void setRes(int res) {
        this.res = res;
    }

    public int getPrice() {
        return price;
    }
    public void setPrice(int price) {
        this.price = price;
    }

    public int getTotalprice() {
        return totalprice;
    }
    public void setTotalprice(int totalprice) {
        this.totalprice = totalprice;
    }

}

결과 내기 전
결과

'Back-End' 카테고리의 다른 글

[Kuberbetes] 쿠버네티스의 개념  (0) 2025.03.10
[JSP/Servlet] 웹개발 기초 1  (0) 2025.02.26
[JAVA] SQL과 JAVA를 합친 JDBC  (1) 2025.02.18
[JAVA] 오답노트 및 발표 피드백  (1) 2025.02.17
[JAVA] Toy-Project  (1) 2025.02.07