๐JSP(Jakarta Server Pages, ์ด์ ๋ช ์นญ: Java Server Pages)
JSP๋ HTML ๋ด์ Java ์ฝ๋๋ฅผ ์ฝ์
ํ์ฌ ์น ์๋ฒ์์ ๋์ ์ผ๋ก ์น ํ์ด์ง๋ฅผ ์์ฑํ์ฌ ์น ๋ธ๋ผ์ฐ์ ์ ๋๋ ค์ฃผ๋ ์๋ฒ ์ฌ์ด๋ ์คํฌ๋ฆฝํธ ์ธ์ด์ด๋ค. Java EE ์คํ ์ค ์ผ๋ถ๋ก WAS์์ ๋์ํ๋ค. JSP๋ ์คํ์์๋ Java Servlet์ผ๋ก ๋ณํ๋ ํ ์คํ๋๋ฏ๋ก ์๋ธ๋ฆฟ๊ณผ ๊ฑฐ์ ์ ์ฌํ๋ค๊ณ ๋ณผ ์ ์๋ค. ํ์ง๋ง, ์๋ธ๋ฆฟ๊ณผ๋ ๋ฌ๋ฆฌ HTML ํ์ค์ ๋ฐ๋ผ ์์ฑ๋๋ฏ๋ก ์น ๋์์ธํ๊ธฐ์ ํธ๋ฆฌํ๋ค.
JSP ์คํฌ๋ฆฝํ ์์
JSP๋ HTML ์ฝ๋ ๋ด์ Java ์ฝ๋๋ฅผ ์ฝ์ ํ๊ธฐ ์ํด ์ฌ๋ฌ ์คํฌ๋ฆฝํ ์์๋ฅผ ์ ๊ณตํฉ๋๋ค:
- ์ ์ธ๋ฌธ(Declaration): ๋ฉค๋ฒ ๋ณ์๋ ๋ฉ์๋๋ฅผ ์ ์ธํ ๋ ์ฌ์ฉํฉ๋๋ค.
jsp์ฝ๋ ๋ณต์ฌ<%! int counter = 0; %> <%! public int getCounter() { return counter; } %>
- ์คํฌ๋ฆฝํ๋ฆฟ(Scriptlet): ํด๋ผ์ด์ธํธ ์์ฒญ ์๋ง๋ค ํธ์ถ๋๋ฉฐ, ์๋ธ๋ฆฟ์ service() ๋ฉ์๋์ ํด๋นํ๋ ์์ญ์ผ๋ก, ์ฃผ๋ก ์์ฒญ๊ณผ ์๋ต์ ๊ด๋ จ๋ ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค.
jsp์ฝ๋ ๋ณต์ฌ<% counter++; %>
- ํํ์(Expression): ๋ฐ์ดํฐ๋ฅผ ๋ธ๋ผ์ฐ์ ์ ์ถ๋ ฅํ ๋ ์ฌ์ฉํฉ๋๋ค.
jsp์ฝ๋ ๋ณต์ฌ<%= counter %>
- ์ฃผ์(Comment): ์ฝ๋์ ๋ํ ์ค๋ช
์ ์์ฑํ ๋ ์ฌ์ฉํ๋ฉฐ, ํด๋ผ์ด์ธํธ์๊ฒ๋ ์ ๋ฌ๋์ง ์์ต๋๋ค.
jsp์ฝ๋ ๋ณต์ฌ<%-- This is a JSP comment --%>
JSP ์ง์์ด(Directive)
JSP ์ง์์ด๋ ํ์ด์ง์ ์ ์ญ์ ์ธ ์์ฑ์ ์ค์ ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค:
- <%@ page %>: JSP ํ์ด์ง์ ์์ฑ์ ์ง์ ํฉ๋๋ค.
- <%@ include %>: ๋ค๋ฅธ JSP ํ์ผ์ ์ ์ ์ผ๋ก ํฌํจํฉ๋๋ค.
- <%@ taglib %>: ์ปค์คํ ํ๊ทธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ๋ ์ ์ธํฉ๋๋ค.
JSP ๊ธฐ๋ณธ ๊ฐ์ฒด
JSP๋ ๊ฐ๋ฐ ํธ์๋ฅผ ์ํด ์ฌ๋ฌ ๊ธฐ๋ณธ ๊ฐ์ฒด๋ฅผ ์ ๊ณตํฉ๋๋ค:
- request: ํด๋ผ์ด์ธํธ์ ์์ฒญ ์ ๋ณด๋ฅผ ๋ด๊ณ ์์ผ๋ฉฐ, HTML ํผ ๋ฐ์ดํฐ๋ URL ํ๋ผ๋ฏธํฐ๋ฅผ ์ฝ์ด์ฌ ๋ ์ฌ์ฉํฉ๋๋ค.
- response: ์๋ฒ์ ์๋ต์ ์ฒ๋ฆฌํ๋ฉฐ, ํด๋ผ์ด์ธํธ์๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๊ฑฐ๋ HTTP ์๋ต ์ฝ๋๋ฅผ ์ค์ ํ ๋ ์ฌ์ฉํฉ๋๋ค.
- pageContext: JSP ํ์ด์ง์ ์ปจํ ์คํธ ์ ๋ณด๋ฅผ ๋ด๊ณ ์์ผ๋ฉฐ, ํ์ด์ง ๋ด์์ ๋ค์ํ ๊ฐ์ฒด์ ์ ๊ทผํ ์ ์๊ฒ ํด์ค๋๋ค.
- session: ํด๋ผ์ด์ธํธ์์ ์ธ์ ์ ๋ณด๋ฅผ ๊ด๋ฆฌํ๋ฉฐ, ์ฌ์ฉ์๋ณ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋ ์ฌ์ฉํฉ๋๋ค.
- application: ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ญ์์ ๊ณต์ ๋๋ ์ ๋ณด๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
- out: ํด๋ผ์ด์ธํธ์๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํ ๋ ์ฌ์ฉํฉ๋๋ค.
- config: JSP ํ์ด์ง์ ์ค์ ์ ๋ณด๋ฅผ ๋ด๊ณ ์์ต๋๋ค.
- page: ํ์ฌ JSP ํ์ด์ง ์์ฒด๋ฅผ ๊ฐ๋ฆฌํต๋๋ค.
- exception: ์์ธ ์ฒ๋ฆฌ ํ์ด์ง์์ ๋ฐ์ํ ์์ธ ์ ๋ณด๋ฅผ ๋ด๊ณ ์์ต๋๋ค.
JSP ๊ธฐ๋ณธ ๊ฐ์ฒด์ ์์ญ(Scope)
๊ฐ ๊ธฐ๋ณธ ๊ฐ์ฒด๋ ํน์ ํ ๋ฒ์(Scope)๋ฅผ ๊ฐ์ง๋๋ค:
- pageContext: ํ๋์ JSP ํ์ด์ง ๋ด์์๋ง ์ ํจํฉ๋๋ค.
- request: ํ๋์ HTTP ์์ฒญ ๋์ ์ ํจํ๋ฉฐ, ์์ฒญ์ด ์๋ฃ๋๋ฉด ์ฌ๋ผ์ง๋๋ค.
- session: ๋์ผํ ํด๋ผ์ด์ธํธ์ ์ฌ๋ฌ ์์ฒญ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ ์ ์์ผ๋ฉฐ, ์ธ์ ์ด ์ข ๋ฃ๋ ๋๊น์ง ์ ํจํฉ๋๋ค.
- application: ์น ์ ํ๋ฆฌ์ผ์ด์ ์ด ์คํ๋๋ ๋์ ์ ์ญ์ ์ผ๋ก ์ ํจํฉ๋๋ค.
์ด๋ฌํ ๊ฐ์ฒด๋ค์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ๊ณต์ ํ๊ธฐ ์ํ ๋ฉ์๋๋ฅผ ์ ๊ณตํฉ๋๋ค:
- setAttribute(String name, Object value): ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํฉ๋๋ค.
- getAttribute(String name): ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
- removeAttribute(String name): ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํฉ๋๋ค.
์น ํ์ด์ง ์ด๋
JSP์์๋ ๋ค๋ฅธ ํ์ด์ง๋ก ์ด๋ํ๊ธฐ ์ํด forward์ sendRedirect๋ฅผ ์ฌ์ฉํฉ๋๋ค:
- forward(request, response):
- ์ฌ์ฉ ๋ฐฉ๋ฒ: RequestDispatcher dispatcher = request.getRequestDispatcher(path); dispatcher.forward(request, response);
- ์ด๋ ๋ฒ์: ๋์ผํ ์๋ฒ ๋ด์ ๊ฒฝ๋ก๋ก ์ด๋ํฉ๋๋ค.
- URL ํ์: ๋ธ๋ผ์ฐ์ ์ ์ฃผ์์ฐฝ์ ๊ธฐ์กด URL์ด ์ ์ง๋ฉ๋๋ค.
- ๊ฐ์ฒด ์ ๋ฌ: ๊ธฐ์กด์ request์ response ๊ฐ์ฒด๊ฐ ๊ทธ๋๋ก ์ ๋ฌ๋ฉ๋๋ค.
- ์๋: ๋น๊ต์ ๋น ๋ฆ ๋๋ค.
- ๋ฐ์ดํฐ ์ ์ง: request ๊ฐ์ฒด๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ ์ ์์ต๋๋ค.
- sendRedirect(location):
- ์ฌ์ฉ ๋ฐฉ๋ฒ: response.sendRedirect(location);
- ์ด๋ ๋ฒ์: ๋์ผํ ์๋ฒ๋ฟ๋ง ์๋๋ผ ๋ค๋ฅธ ์๋ฒ์ URL๋ก๋ ์ด๋ํ ์ ์์ต๋๋ค.
- URL ํ์: ๋ธ๋ผ์ฐ์ ์ ์ฃผ์์ฐฝ์ ์ด๋ํ ํ์ด์ง์ URL์ด ํ์๋ฉ๋๋ค.
- ๊ฐ์ฒด ์ ๋ฌ: ์๋ก์ด request์ response ๊ฐ์ฒด๊ฐ ์์ฑ๋ฉ๋๋ค.
- ์๋: forward์ ๋นํด ๋๋ฆฝ๋๋ค.
- ๋ฐ์ดํฐ ์ ์ง: request ๊ฐ์ฒด๋ฅผ ํตํด ๋ฐ์ดํฐ ์ ๋ฌ์ด ๋ถ๊ฐ๋ฅํ๋ฉฐ, session์ด๋ cookie๋ฅผ ์ด์ฉํด์ผ ํฉ๋๋ค.
input.jsp
<%@ page contentType="text/html; charset=UTF-8" %>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>์ง์ญ ์ ํ</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
</head>
<body>
<div class="container mt-5">
<div class="col-lg-6 mx-auto">
<h3 class="text-center">์ง์ญ ์ ํ์ ๋ฐ๋ฅธ ๋ฐฐ๊ฒฝ์ ๋ณ๊ฒฝ</h3>
<form action="result.jsp" method="post">
<div class="form-group">
<label for="username">์ด๋ฆ:</label>
<input type="text" id="username" name="username" class="form-control" placeholder="์ด๋ฆ์ ์
๋ ฅํ์ธ์" required>
</div>
<div class="form-group">
<label for="region">์ง์ญ ์ ํ:</label>
<select id="region" name="region" class="form-control">
<option value="์์ธ">์์ธ</option>
<option value="๋์ ">๋์ </option>
<option value="๊ตฌ๋ฏธ">๊ตฌ๋ฏธ</option>
<option value="๊ด์ฃผ">๊ด์ฃผ</option>
<option value="๋ถ์ธ๊ฒฝ">๋ถ์ธ๊ฒฝ</option>
</select>
</div>
<button type="submit" class="btn btn-primary btn-block">์ ์ถ</button>
</form>
</div>
</div>
</body>
</html>
result.jsp
<%@ page contentType="text/html; charset=UTF-8" %>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>๊ฒฐ๊ณผ ํ์ด์ง</title>
</head>
<body>
<%
// ์ฌ์ฉ์๊ฐ ์
๋ ฅํ ๊ฐ ๊ฐ์ ธ์ค๊ธฐ
String name = request.getParameter("username");
String region = request.getParameter("region");
// ์ง์ญ์ ๋ฐ๋ผ ๋ฐฐ๊ฒฝ์ ์ค์
String backgroundColor;
switch (region) {
case "์์ธ":
backgroundColor = "lightblue";
break;
case "๋์ ":
backgroundColor = "orange";
break;
case "๊ตฌ๋ฏธ":
backgroundColor = "pink";
break;
case "๊ด์ฃผ":
backgroundColor = "green";
break;
case "๋ถ์ธ๊ฒฝ":
backgroundColor = "purple";
break;
default:
backgroundColor = "white"; // ๊ธฐ๋ณธ๊ฐ
}
%>
<style>
body {
background-color: <%= backgroundColor %>;
color: #333;
text-align: center;
font-family: Arial, sans-serif;
}
</style>
<h1>์๋
ํ์ธ์, <%= name %>๋!</h1>
<p>์ ํํ ์ง์ญ: <%= region %></p>
</body>
</html>
RegionColorServlet.java
package com.example;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
// @WebServlet์ผ๋ก URL ๋งคํ
@WebServlet("/regionColor")
public class RegionColorServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 1. ํด๋ผ์ด์ธํธ ๋ฐ์ดํฐ ์์ง
String name = request.getParameter("username");
String region = request.getParameter("region");
// 2. ์ง์ญ์ ๋ฐ๋ผ ๋ฐฐ๊ฒฝ์ ๊ฒฐ์
String backgroundColor;
switch (region) {
case "์์ธ":
backgroundColor = "lightblue";
break;
case "๋์ ":
backgroundColor = "orange";
break;
case "๊ตฌ๋ฏธ":
backgroundColor = "pink";
break;
case "๊ด์ฃผ":
backgroundColor = "green";
break;
case "๋ถ์ธ๊ฒฝ":
backgroundColor = "purple";
break;
default:
backgroundColor = "white"; // ๊ธฐ๋ณธ๊ฐ
}
// 3. ๊ฒฐ๊ณผ ๋ฐ์ดํฐ๋ฅผ JSP๋ก ์ ๋ฌ
request.setAttribute("name", name);
request.setAttribute("region", region);
request.setAttribute("backgroundColor", backgroundColor);
// 4. JSP๋ก ํฌ์๋ฉ
request.getRequestDispatcher("/result.jsp").forward(request, response);
}
}
https://java-is-happy-things.tistory.com/26
'๐ป์น(Web)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ฝ๋ ๋ฆฌํฉํ ๋ง (1) | 2024.12.20 |
---|---|
Spring (0) | 2024.12.02 |
Servlet (0) | 2024.12.01 |
[๊ณตํตํ๋ก์ ํธ]5์ฃผ์ฐจ: React Openvidu ๊ตฌํ (0) | 2024.08.11 |
[React]์ด๊ธฐ์ธํ (0) | 2024.07.18 |