๐JSP(Jakarta Server Pages, ์ด์ ๋ช ์นญ: Java Server Pages)
JSP๋ HTML ๋ด์ Java ์ฝ๋๋ฅผ ์ฝ์ ํ์ฌ ์น ์๋ฒ์์ ๋์ ์ผ๋ก ์น ํ์ด์ง๋ฅผ ์์ฑํ์ฌ ์น ๋ธ๋ผ์ฐ์ ์ ๋๋ ค์ฃผ๋ ์๋ฒ ์ฌ์ด๋ ์คํฌ๋ฆฝํธ ์ธ์ด์ด๋ค. Java EE ์คํ ์ค ์ผ๋ถ๋ก WAS์์ ๋์ํ๋ค. JSP๋ ์คํ์์๋ Java Servlet์ผ๋ก ๋ณํ๋ ํ ์คํ๋๋ฏ๋ก ์๋ธ๋ฆฟ๊ณผ ๊ฑฐ์ ์ ์ฌํ๋ค๊ณ ๋ณผ ์ ์๋ค. ํ์ง๋ง, ์๋ธ๋ฆฟ๊ณผ๋ ๋ฌ๋ฆฌ HTML ํ์ค์ ๋ฐ๋ผ ์์ฑ๋๋ฏ๋ก ์น ๋์์ธํ๊ธฐ์ ํธ๋ฆฌํ๋ค.
JSP์ ๊ธฐ๋ณธ ๊ฐ์ฒด
1. pageContext(=page)
- ํ๋์ JSP ํ์ด์ง
- ํ์ด์ง๋ ํ๋์ JSP์ด๋ฏ๋ก, ํ ํ์ด์ง์์ ๋ค๋ฅธ ํ์ด์ง์ ์ ๋ณด๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
2. request
- ํ๋์ http ์์ฒญ ์ ๋ณด
- ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์ค๋ ํ ๋ฒ์ ์์ฒญ๊ณผ ๊ด๋ จ๋ ์์ญ์ผ๋ก ๋ธ๋ผ์ฐ์ ๊ฐ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ผ๋ฉฐ ์์ฒญํ๋ request ๊ฐ์ฒด๋ ์ฌ๋ผ์ง๋ค.
3. session
- ์ธ์ ์ ํ๋์ ๋ธ๋ผ์ฐ์ (Chrome, Internet, ...) ์ ๊ณต์ ํ๋ค. ์ฃผ๋ก ๋ก๊ทธ์ธ ์ ๋ณด/์ํ๋ฅผ ์ ์งํ ๋ ์ฌ์ฉํ๋ค.
4. application
- ํ๋์ ์น ์ ํ๋ฆฌ์ผ์ด์
- ๋ชจ๋ ์ ์ , ๋ชจ๋ ํ์ด์ง, ํ์ด์ง ์์ฒญ, ์ธ์ ์ ๊ณต์ ๋ ์ ์๋ค.
- 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 ์คํฌ๋ฆฝํ ์์
JSP๋ HTML ์ฝ๋ ๋ด์ Java ์ฝ๋๋ฅผ ์ฝ์ ํ๊ธฐ ์ํด ์ฌ๋ฌ ์คํฌ๋ฆฝํ ์์๋ฅผ ์ ๊ณตํ๋ค.
- ์คํฌ๋ฆฝํ๋ฆฟ(Scriptlet): JSP ๋ฌธ๋ฒ์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ด ๋๋ ํ๊ทธ๋ก, ๋๋ถ๋ถ์ JSP ๋ฌธ๋ฒ ํํ์ ์ด ์คํฌ๋ฆฝํธ๋ฆฟ์ ๊ธฐ๋ณธ์ผ๋ก ํ๋ค.
<body>
<!-- 1๋ถํฐ 100๊น์ง ํฉ์ ๊ตฌํ๊ธฐ -->
<%
int sum = 0;
for(int i=0; i<=100; i++){
sun+=i;
}
%>
</body>
- ์ ์ธ๋ฌธ(Declaration): ๋ฉค๋ฒ ๋ณ์๋ ๋ฉ์๋๋ฅผ ์ ์ธํ ๋ ์ฌ์ฉํ๋ค.
<body>
<!-- ์ ์ธ๋ฌธ(์ ์ธ๋ง ๊ฐ๋ฅ -->
<%! String name = "ํ๊ธธ๋"; %>
<%! public int plus(int a, int b) { return a+b; } %>
</body>
- ํํ์(Expression): ๋ณ์, ๋ฉ์๋ ๋ฑ์ ์คํ์ ๊ดํ ๋ถ๋ถ์ ๋งก์ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ํํํ๋ค.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
int sum = 0;
for(int i = 1; i <= 100; i++){
sum += i;
}
%>
<!-- ๊ตฌํ๋ถ (๋ณ์ ์ ์ธ, ๋ณ์ ๋ฐ ๋ฉ์๋์ ๋ํ ์คํ ๊ฐ๋ฅ) -->
<h1>1~100 ๊น์ง ํฉ ๊ฒฐ๊ณผ : <%= sum %></h1>
</body>
</html>
- ์ฃผ์(Comment): ์ฝ๋์ ๋ํ ์ค๋ช ์ ์์ฑํ ๋ ์ฌ์ฉํ๋ฉฐ, ํด๋ผ์ด์ธํธ์๊ฒ๋ ์ ๋ฌ๋์ง ์๋๋ค.
<%-- This is a JSP comment --%>
JSP ์ง์์ด(Directive)
JSP ์ง์์ด๋ ํ์ด์ง์ ์ ์ญ์ ์ธ ์์ฑ์ ์ค์ ํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
- <%@ page %>: JSP ํ์ด์ง์ ์์ฑ์ ์ง์ ํ๋ค.
- <%@ include %>: ๋ค๋ฅธ JSP ํ์ผ์ ์ ์ ์ผ๋ก ํฌํจํ๋ค.
- <%@ taglib %>: ์ปค์คํ ํ๊ทธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ๋ ์ ์ธํ๋ค.
์น ํ์ด์ง ์ด๋
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๋ฅผ ์ด์ฉํด์ผ ํ๋ค.
๐JSTL(JSP Standard Tag Library)
1. JSP ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.
2. JSP์์ (๋ฐ๋ณต๊ณผ ์กฐ๊ฑด, ๋ฐ์ดํฐ ๊ด๋ฆฌ ํฌ๋งท, XML ์กฐ์, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ก์ธ์ค)์ ๊ตฌํํ๋ ์ปค์คํ ํ๊ทธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ชจ์์ด๋ค.
3. ์๊ฐ, ๋ ์ง, ์ซ์์ ํฌ๋งท์ด๋ ๋ฌธ์์ด ๊ฐ๊ณต ๋ฑ์ ์ฒ๋ฆฌ์์ ๋น์ฆ๋์ค ๋ก์ง๊ณผ ํ๋ฆฌ์ ํ ์ด์ ๋ก์ง์ ๋ถ๋ฆฌํ ์ ์๊ฒ ํด์ค๋ค.
4. JSTL์ EL(Expression Language)๋ฅผ ์ฌ์ฉํ์ฌ ํํํ๋ค.
ํ๊ทธ๋ช | ์ค๋ช |
<c:set /> | ๋ณ์ ์ง์ |
<c:if /> | ์กฐ๊ฑด๋ฌธ |
<c:choose /> | java์ switch๋ฌธ๊ณผ ๋น์ท |
<c:when /> | switch๋ฌธ์ case |
<c:otherwise /> | switch๋ฌธ์ default |
<c:forEach /> | for๋ฌธ |
<c:url /> | url์ ์๋์ผ๋ก contextPath๋ฅผ ๋ถ์ฌ์ฃผ๋ ์ญํ |
<c: param /> | ํ๋ผ๋ฏธํฐ๋ฅผ ์ ๋ฌ |
<c:out /> | ํ๋ฉด์ ์ถ๋ ฅ |
1. <c:set />
<c:set scope="request" var="data" value="my_testValue" />
// request ๋ฒ์(scope)์ data๋ผ๋ ์ด๋ฆ์ ๋ณ์๋ฅผ ์ค์ ํ๊ณ ๊ฐ์ผ๋ก "my_testValue"๋ฅผ ์ ์ฅํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
request.setAttribute("data", "my_testValue"); ์ ๋์ผํ ์๋ฏธ
2. <c: if />
JSP์ EL(Expression Language)์์๋ "์ '๋ฅผ ๋ชจ๋ ์ ํจํ ๋ฌธ์์ด ๋ฆฌํฐ๋ด๋ก ์ธ์ํ๋ค.
<c:if test="${memberType == 'admin'}">
<h2>๊ด๋ฆฌ์์
๋๋ค.</h2>
</c:if>
3. switch๋ฌธ
<c:choose>
<c:when test="${test=='morning'}">
<p>choose ์์นจ</p>
</c:when>
<c:when test="${test=='lunch'}">
<p>choose ์ ์ฌ</p>
</c:when>
<c:otherwise>
<p>choose ์ ๋
</p>
</c:otherwise>
</c:choose>
4. forEach
<c:forEach var="i" begin="1" end="10" step="1">
<p>${i}</p>
</c:forEach>
<c:forEach var="memberItem" items="${memberList}">
<tr>
<td>${memberItem.id}</td>
<td>${memberItem.pw}</td>
<td>${memberItem.name}</td>
</tr>
</c:forEach>
5. <c:url />
<c:url var="jstl3url" value="/jstl3">
<c:param name="data1" value="abc" />
<c:param name="data2" value="def" />
</c:url>
// Generated URL: /contextPath/jstl3?data1=abc&data2=def
6. <c:out />
<c:out value="${str2}"></c:out>
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
JSP(Java Server Page)
JSP JSP๋? ์๋ฐ์๋ฒํ์ด์ง(JSP)๋ HTML ๋ด ์๋ฐ์ฝ๋๋ฅผ ์ฝ์ ํ์ฌ ์น ์๋ฒ์์ ๋์ ์ผ๋ก ์น ํ์ด์ง๋ฅผ ์์ฑํ์ฌ ์น ๋ธ๋ผ์ฐ์ ์ ๋๋ ค์ฃผ๋ ์ธ์ด์ด๋ค. Java EE ์คํ ์ค ์ผ๋ถ๋ก ์น ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ์์ ๋
java-is-happy-things.tistory.com
'๐ป์น(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 |