2025.02.20 JSP/Servlet study
JSP란?
JSP는 Java Server Pages의 줄임말로, HTML 코드 안에 자바 코드를 넣어서 동적인 웹 페이지를 만들 수 있게 해주는 기술술이다. 마치 레고 블록처럼 HTML과 자바를 조립해서 웹 페이지를 만드는 것이라고 생각하시면 된다.
JSP의 주요 특징
- 쉬운 개발
- HTML 코드 안에 자바 코드를 넣을 수 있어서 웹 페이지 개발이 편리합니다.
- 기존 HTML을 그대로 사용할 수 있어 디자이너와의 협업이 용이합니다.
- 강력한 기능
- 자바의 모든 기능을 사용할 수 있습니다.
- 데이터베이스 연동이 쉽습니다.
- 다양한 라이브러리를 활용할 수 있습니다.
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에서는 따로 선언하지 않아도 바로 사용할 수 있는 객체들이 있다.
- request: 클라이언트의 요청 정보를 담고 있다.
- response: 응답 정보를 담고 있다.
- session: 세션 정보를 담고 있다.
- application: 애플리케이션 전역에서 사용되는 정보를 담고 있다.
- out: 출력 스트림이다.
JSP의 동작 과정
- 클라이언트가 JSP 페이지를 요청한다.
- JSP 엔진이 JSP 파일을 자바 파일(서블릿)로 변환한다.
- 자바 파일이 컴파일되어 클래스 파일이 된다.
- 클래스 파일이 실행되어 HTML 형태로 변환된다.
- 클라이언트에게 결과가 전송된다.
Servlet이란?
서블릿은 자바를 사용하여 웹 페이지를 동적으로 생성하는 서버 측 프로그램이다. 마치 웹 서버의 요리사처럼, 클라이언트의 요청을 받아서 처리하고 응답을 만들어주는 역할을 한다.
서블릿의 특징
- 순수 자바 코드
- HTML이 아닌 자바 코드로 작성된다.
- 자바의 모든 기능을 활용할 수 있다.
- 높은 성능
- 한 번 메모리에 로드되면 계속 재사용된다.
- 멀티스레드로 동작하여 효율적이다.
- 플랫폼 독립적
- 자바의 특성을 그대로 물려받아 어떤 운영체제에서도 동작한다.
Servlet의 생명주기
초기화 단계 (init)
public void init(ServletConfig config) throws ServletException {
// 서블릿이 처음 메모리에 로드될 때 실행되는 코드
// 데이터베이스 연결 등 초기화 작업 수행
}
서비스 단계 (service)
public void service(ServletRequest request, ServletResponse response) {
// 클라이언트의 요청을 처리하는 코드
// doGet, doPost 등의 메서드 호출
}
소멸 단계(destroy)
public void destroy() {
// 서블릿이 메모리에서 제거될 때 실행되는 코드
// 자원 해제 등의 작업 수행
}
서블릿의 주요 기능
- 요청 처리
- GET, POST 등 HTTP 메서드 처리
- 파라미터 받기
- 헤더 정보 확인
- 응답 생성
- HTML 생성
- JSON 응답
- 파일 다운로드
- 세션 관리
- 로그인 상태 유지
- 사용자별 데이터 관리
실습
<%@ 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>


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 |