1. Cookie๋?
- ํด๋ผ์ด์ธํธ(๋ธ๋ผ์ฐ์ )์ ์ ์ฅ๋๋ ํค์ ๊ฐ์ด ๋ค์ด์๋ ์์ ๋ฐ์ดํฐํ์ผ!
- ์ค๋ณต๋์ง ์๋ name๊ณผ value ํ ์์ผ๋ก ์ด๋ฃจ์ด์ง
- ์์๊ฐ ์๋ค
- ๋ง๋ฃ ๊ธฐํ(๋์ด)๋ฅผ ์ง์ ํด ์ค ์ ์๋ค, ๋จ ์ง์ ํด ์ฃผ์ง ์์ผ๋ฉด Session ๊ฐ์ผ๋ก ์ ์ฅ๋๋ค.
- ์น ๋ธ๋ผ์ฐ์ ๊ฐ ๋ณด๊ดํ๊ณ ์๋ ๋ฐ์ดํฐ๋ก, ์น ์๋ฒ์ ์์ฒญ์ ๋ณด๋ผ ๋ ์ฟ ํค๋ฅผ ํค๋์ ๋ด์ ์ ์กํ๋ค.
2. Session์ด๋?
- Session์ ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ ์ฐ๊ฒฐ๋ ์ํ๋ฅผ ์ ์งํ๊ธฐ ์ํด ์๋ฒ์ ์ ์ฅ๋๋ ๋ฐ์ดํฐ์ด๋ค.
- ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ์ ์ํ๋ฉด, ์๋ฒ๋ ๊ณ ์ ํ Session ID๋ฅผ ์์ฑํด ํด๋ผ์ด์ธํธ์๊ฒ ์ ๋ฌํ๋ค.
- ํด๋ผ์ด์ธํธ๋ Session ID๋ฅผ ์ฟ ํค์ ์ ์ฅํ๊ฑฐ๋ URL์ ํฌํจํด ์๋ฒ์ ํต์ ํ๋ฉฐ, ์๋ฒ๋ ์ด ID๋ก ํด๋ผ์ด์ธํธ๋ฅผ ์๋ณํ๋ค.
- ์ธ์ ๋ฐ์ดํฐ๋ ์๋ฒ์ ๋ฉ๋ชจ๋ฆฌ ๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋๋ฉฐ, ํด๋ผ์ด์ธํธ๊ฐ ๋ธ๋ผ์ฐ์ ๋ฅผ ๋ซ๊ฑฐ๋ ์ธ์ ๋ง๋ฃ ์๊ฐ์ด ์ง๋๋ฉด ์ญ์ ๋๋ค.
- ์ฟ ํค๋ ํด๋ผ์ด์ธํธ์ ์ ์ฅ๋์ด ๋ฐ์ดํฐ๋ฅผ ๋ก์ปฌ์์ ์ ์งํ๋ค.
- ์ธ์ ์ ์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ์ฌ ๋ณด์๊ณผ ์ฌ์ฉ์ ์ํ๋ฅผ ์ ์งํ๋ ๋ฐ ์ ํฉํ๋ค.
3. ๋น๊ต
ํญ๋ชฉ | Cookie(์ฟ ํค) | Session(์ธ์ ) |
์ ์ฅ์์น | ํด๋ผ์ด์ธํธ(๋ธ๋ผ์ฐ์ ) | ์๋ฒ |
๋ฐ์ดํฐ ํฌ๊ธฐ ์ ํ | ์ต๋ 4KB | ์๋ฒ ๋ฉ๋ชจ๋ฆฌ/DB ์ฉ๋์ ๋ฐ๋ผ ๋ค๋ฆ |
๋ณด์ | ํด๋ผ์ด์ธํธ์ ์ ์ฅ๋๋ฏ๋ก ์๋์ ์ผ๋ก ์ทจ์ฝ | ์๋ฒ์ ์ ์ฅ๋๋ฏ๋ก ๋น๊ต์ ์์ |
์๋ช | ๋ง๋ฃ ๊ธฐํ ์ค์ ๊ฐ๋ฅ (๊ธฐํ ์ค์ ์์ผ๋ฉด ๋ธ๋ผ์ฐ์ ์ข ๋ฃ ์ ์ญ์ ) |
๋ธ๋ผ์ฐ์ ์ข ๋ฃ ๋๋ ์ธ์ ๋ง๋ฃ ์ ์ญ์ |
์๋ | ํด๋ผ์ด์ธํธ์ ์ ์ฅ๋๋ฏ๋ก ์๋ฒ ๋ถํ๊ฐ ์ ์ | ์๋ฒ์์ ๊ด๋ฆฌํ๋ฏ๋ก ๋ถํ ๋ฐ์ ๊ฐ๋ฅ |
์ฌ์ฉ ๋ชฉ์ | ์ฌ์ฉ์ ์๋ณ์ ๋ณด ์ ์ฅ (์๋๋ก๊ทธ์ธ, ์ค์ ์ ์ง ๋ฑ) | ์ฌ์ฉ์ ์ํ ๊ด๋ฆฌ (๋ก๊ทธ์ธ ์ํ ์ ์ง, ์ฅ๋ฐ๊ตฌ๋ ๋ฑ) |
์ ์ก ๋ฐฉ์ | HTTP ์์ฒญ ์ ํค๋์ ํฌํจํด ์๋์ผ๋ก ์ ์ก | ํด๋ผ์ด์ธํธ์์ Session ID ๋ฅผ ํตํด ์๋ฒ์ ํต์ |
์ ์ง ๋ฐฉ์ | ํด๋ผ์ด์ธํธ์์ ์ง์ ์ฟ ํค ๊ฐ์ ์์ /์ญ์ ๊ฐ๋ฅ | ์๋ฒ์์๋ง ๊ด๋ฆฌ ๊ฐ๋ฅ, ํด๋ผ์ด์ธํธ๋ Session ID๋ง ์์ |
4. ์ฟ ํค ์ค์ต
LoginServlet.java ์๋ธ๋ฆฟ
4-1. ์ฟ ํค ์์ฑ & ์ค์
// ์ฟ ํค ์์ฑ
Cookie cookie = new Cookie("userName", "๋ค์ธ");
// ๋ง๋ฃ ๊ธฐํ ์ค์ (1์ผ = 24์๊ฐ * 60๋ถ * 60์ด)
cookie.setMaxAge(24 * 60 * 60); // 86400์ด, ์ฆ 1์ผ ๋์ ์ ํจ
// ์๋ต์ ์ฟ ํค ์ถ๊ฐ
response.addCookie(cookie);
4-2. ์ฟ ํค๋ฅผ ๋ธ๋ผ์ฐ์ ์ ์ ์กํ๊ธฐ
// ์ฟ ํค๋ฅผ ์์ฑํ ๋ค, response ๊ฐ์ฒด์ ์ถ๊ฐํ๋ฉด ๋ธ๋ผ์ฐ์ ์ ์ฟ ํค๊ฐ ์ ์ก๋์ด ์ ์ฅ๋ฉ๋๋ค.
response.addCookie(cookie);
response.sendRedirect("Ex01GetCookie.jsp"); // ํ์ด์ง ์ด๋
4-3. Cookie ๊บผ๋ด์ค๊ธฐ
// ์ฟ ํค ๊ฐ์ ธ์ค๊ธฐ
Cookie[] cookies = request.getCookies();
// ์ฟ ํค ๋ฐฐ์ด์์ "season" ์ด๋ฆ์ ์ฟ ํค๋ฅผ ์ฐพ๊ณ ๊ฐ ์ถ๋ ฅ
if (cookies != null) {
for (Cookie c : cookies) {
if ("season".equals(c.getName())) { // "season" ์ด๋ฆ์ ์ฟ ํค์ธ์ง ํ์ธ
String value = c.getValue(); // ์ฟ ํค ๊ฐ ๊ฐ์ ธ์ค๊ธฐ
out.println("<h1>์ฟ ํค ๊ฐ: " + value + "</h1>"); // ์ฟ ํค ๊ฐ ์ถ๋ ฅ
}
}
}
4-4. ํ์ธ ๋ฐฉ๋ฒ
๋ธ๋ผ์ฐ์ ์์ F12(๊ฐ๋ฐ์ ๋๊ตฌ) > [Application] > ์ข์ธก ๋ฉ๋ด์์ [Cookies] ํด๋ฆญ > ํด๋น ์น์ฌ์ดํธ URL ์ ํ
์ค์ ๋ ์ฟ ํค ๋ชฉ๋ก์์ ์ด๋ฆ๊ณผ ๊ฐ ํ์ธ ๊ฐ๋ฅ
(์ ๋ ํ์ฌ ์ด์ด ๋์ ์ฐฝ์ด ๋ง์์ ์ด๋ ๊ฒ ๋์ค๋ ์ํด ๋ถํ๋๋ฆฝ๋๋ค.)
4-5. ์ฟ ํค๋ ์ธ์ ์ฌ์ฉ๋ผ?
โก ์๋ ๋ก๊ทธ์ธ
์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธ ์ "์์ด๋ ์ ์ฅ" ๋๋ "๋ก๊ทธ์ธ ์ํ ์ ์ง" ์ต์
์ ์ ํํ๋ฉด, ํด๋น ์ ๋ณด๋ฅผ ์ฟ ํค์ ์ ์ฅํ์ฌ ์ดํ ๋ฐฉ๋ฌธ ์ ์๋์ผ๋ก ๋ก๊ทธ์ธํ ์ ์๋ค.
โก ํ์
๋ค์ ๋ณด์ง ์๊ธฐ
"์ผ์ฃผ์ผ๊ฐ ์ด ์ฐฝ์ ๋ค์ ๋ณด์ง ์๊ธฐ"์ ๊ฐ์ ์ค์ ์ ์ฟ ํค์ ์ ์ฅํ์ฌ, ์ฌ์ฉ์๊ฐ ์ค์ ํ ๊ธฐ๊ฐ ๋์ ๋์ผํ ํ์
์ด ๋ํ๋์ง ์๋๋ก ํฉ๋๋ค.
โก์ผํ๋ชฐ ์ฅ๋ฐ๊ตฌ๋
๋ก๊ทธ์ธํ์ง ์์ ์ฌ์ฉ์๊ฐ ์ ํํ ์ํ๋ค์ ์ฟ ํค์ ์์ ์ ์ฅํ์ฌ, ํ์ด์ง๋ฅผ ์ด๋ํ๊ฑฐ๋ ๋ธ๋ผ์ฐ์ ๋ฅผ ๋ซ์๋ค๊ฐ ๋ค์ ์ด์ด๋ ์ฅ๋ฐ๊ตฌ๋ ์ ๋ณด๊ฐ ์ ์ง๋๋๋ก ํ๋ค.
โก ์ต๊ทผ ๋ณธ ์ํ ํ์
์ฌ์ฉ์๊ฐ ์กฐํํ ์ํ ์ ๋ณด๋ฅผ ์ฟ ํค์ ์ ์ฅํ์ฌ, ๋ฉ์ธ ํ์ด์ง๋ ์ถ์ฒ ์น์
์ ์ต๊ทผ ๋ณธ ์ํ๋ค์ ํ์ํ๋ค.
5. ์ธ์ ์ค์ต
์ธ์ ๊ธฐ๋ณธ ๋ฉ์๋
setAttribute(String name, Object value)
์ธ์
์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฉ์๋ (name์ ํค, value๋ ๊ฐ)
getAttribute(String name)
์ธ์
์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฉ์๋, ํด๋น ํค๊ฐ ์์ผ๋ฉด null์ ๋ฐํ
removeAttribute(String name)
์ธ์
์์ ํน์ ๋ฐ์ดํฐ๋ฅผ ์ ๊ฑฐํ๋ ๋ฉ์๋
invalidate()
์ธ์
์ ์์ ํ ๋ฌดํจํํ๋ ๋ฉ์๋ (๋ก๊ทธ์์)
์์ ๊ฐ์ ์น ์ฌ์ดํธ์์
- ๋ก๊ทธ์ธ ํ์ง ์์ ๊ฒฝ์ฐ์๋ guest ๋ ํ์ํฉ๋๋ค
- ๋ก๊ทธ์ธ ํ ๊ฒฝ์ฐ 'guest' ์๋ฆฌ์ 'ใ ใ (์ ์ ์์ด๋)'๋ ํ์ํฉ๋๋ค.
๋ผ๋ ๋ฌธ๊ตฌ๋ฅผ ๋์ฐ๊ณ ์ถ์ ๋ ์ธ์ ์ ํ์ฉํ๋ค.
๋จผ์ home.jsp๋ฅผ ๋ง๋ค๊ณ ํ์ด์ง ๋ฐฐ๋์ ํค๋ ๋ถ๋ถ์ ์๋ <h1> ํ๊ทธ์ ์คํฌ๋ฆฝํธ๋ฆฟ<%%> ์ ์ด์ด
<header class="major">
<h1>Hi, guest๋ ํ์ํฉ๋๋ค ๐</h1>
</header>
์๋ฐ ์ฝ๋๋ฅผ ์ฝ์ ํด ์ค๋ค.
<header class="major">
<!-- session์์ ์ฌ์ฉ์ ์ด๋ฆ ๊ฐ์ ธ์ค๊ธฐ -->
<h1>Hi, <%= session.getAttribute("userName") != null ?
session.getAttribute("userName") : "guest" %>๋ ํ์ํฉ๋๋ค ๐</h1>
</header>
๋ก๊ทธ์์๋ ์ธ์ ์ ํตํด์ ์ด๋ฃจ์ด์ง๊ธฐ ๋๋ฌธ์ ๋ก๊ทธ์์ ๋ฒํผ๋ ๋ง๋ค์ด ์ค๋ค.
home.jsp
<!-- Banner -->
<section id="banner" class="major">
<div class="inner">
<header class="major">
<!-- session์์ ์ฌ์ฉ์ ์ด๋ฆ ๊ฐ์ ธ์ค๊ธฐ -->
<h1>Hi, <%= session.getAttribute("userName") != null ? session.getAttribute("userName") : "guest" %>๋ ํ์ํฉ๋๋ค ๐</h1>
</header>
<div class="content">
<p>This page is for the QueryString<br />
Example</p>
<ul class="actions">
<li><a href="#one" class="button next scrolly">Get Started</a></li>
</ul>
</div>
</div>
</section>
<!-- ๋ก๊ทธ์์ ๋ฒํผ -->
<form action="logout" method="post">
<button type="submit">๋ก๊ทธ์์</button>
</form>
์ด์ ์ฌ์ฉ์์ ์์ด๋์ ๋น๋ฐ๋ฒํธ๋ฅผ ๋ฐ๋ login.jsp ํ์ด์ง๋ฅผ ๋ง๋ค์ด ์ค๋ค.
login.jsp
<%@ page session="true" %>
<!DOCTYPE html>
<html>
<head>
<title>๋ก๊ทธ์ธ</title>
</head>
<body>
<h1>๋ก๊ทธ์ธ ํ์ด์ง</h1>
<!-- ๋ก๊ทธ์ธ ์คํจ ๋ฉ์์ง ์ถ๋ ฅ -->
<%
String error = request.getParameter("error");
if ("invalid".equals(error)) {
%>
<p style="color: red;">์์ด๋ ๋๋ ๋น๋ฐ๋ฒํธ๊ฐ ์๋ชป๋์์ต๋๋ค.</p>
<%
}
%>
<!-- ๋ก๊ทธ์ธ ํผ -->
<form action="login" method="post">
<label for="username">์์ด๋:</label>
<input type="text" id="username" name="username" required><br>
<label for="password">๋น๋ฐ๋ฒํธ:</label>
<input type="password" id="password" name="password" required><br>
<button type="submit">๋ก๊ทธ์ธ</button>
</form>
</body>
</html>
5-1. ์ธ์ ์์ฑ & ๋ฐ์ดํฐ ์ ์ฅ (๋ก๊ทธ์ธ)
์๋๋ ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ์์ด๋์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ฒ๋ฆฌํ๋ ์๋ธ๋ฆฟ ํด๋์ค
์ด ์ฝ๋๋ ๋ก๊ทธ์ธ ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ , ์ฑ๊ณต ์ ์ธ์ ์ ์ฌ์ฉ์ ์ด๋ฆ์ ์ ์ฅํ๋ ๋ก์ง
LoginServlet.java
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
import java.io.IOException;
@WebServlet("/login") // URL ํจํด: /login
public class LoginServlet extends HttpServlet {
// POST ์์ฒญ ์ฒ๋ฆฌ
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// ํด๋ผ์ด์ธํธ์์ ์ ์ก๋ ํ๋ผ๋ฏธํฐ(์์ด๋์ ๋น๋ฐ๋ฒํธ) ๋ฐ๊ธฐ
String username = request.getParameter("username"); // ์์ด๋
String password = request.getParameter("password"); // ๋น๋ฐ๋ฒํธ
// ์์ : ๊ฐ๋จํ ๋ก๊ทธ์ธ ๊ฒ์ฆ (ํ๋์ฝ๋ฉ๋ ๊ณ์ ์ ๋ณด ์ฌ์ฉ)
// ์ค์ ํ๊ฒฝ์์๋ DB๋ฅผ ํ์ฉํ ์ธ์ฆ ๊ตฌํ ํ์
if ("admin".equals(username) && "1234".equals(password)) {
// ๋ก๊ทธ์ธ ์ฑ๊ณต
// ์ธ์
์์ฑ ๋๋ ๊ธฐ์กด ์ธ์
๊ฐ์ ธ์ค๊ธฐ
// ์ธ์
์ ์ฌ์ฉ์ ์ ๋ณด ์ ์ฅ
HttpSession session = request.getSession();
session.setAttribute("userName", username);
// ํ ํ์ด์ง๋ก ๋ฆฌ๋ค์ด๋ ํธ
response.sendRedirect("home.jsp");
} else {
// ๋ก๊ทธ์ธ ์คํจ
// ๋ก๊ทธ์ธ ํ์ด์ง๋ก ๋ฆฌ๋ค์ด๋ ํธ (์๋ฌ ๋ฉ์์ง ์ถ๊ฐ)
response.sendRedirect("login.jsp?error=invalid");
}
}
}
์ด๋ ๊ฒ ํ๋ฉด home ํ๋ฉด์์ session.getAttiribute("userName")๋ฅผ ํตํด ์๋ธ๋ฆฟ์์ ์ธ์ ์ ์ ์ฅ๋ username ์ด ํ๋ฉด์ ๋์์ง๋ค.
๋ง์ฝ์ ์ธ์ ์ด ๋น์ด์๋ ๊ฒฝ์ฐ, guest๋ ํ์ํฉ๋๋ค ๋ผ๋ ๋ฌธ๊ตฌ๋ฅผ ๋ณด์ฌ์ฃผ๋ ๋์ , ์ฌ์ฉ์๋ฅผ ๋ก๊ทธ์ธ ํ์ด์ง๋ก ๋ฆฌ๋๋ ์ ์ํค๊ณ ์ถ๋ค๋ฉด body ํ๊ทธ ์๋์ชฝ์ ์คํฌ๋ฆฝํธ๋ฆฟ <% %> ์ ์ด์ด์ java ์ฝ๋๋ฅผ ์ฐ๊ณ , ๋ก๊ทธ์ธ ํ ์ฌ์ฉ์์๊ฒ๋ง ๋ณด์ฌ์ค ํ์ ๋ฌธ๊ตฌ์๋ ํํ์ <%= userName %>์ ์ฌ์ฉํ๋ฉด ๋๋ค.
<%@ page session="true" %>
<!DOCTYPE html>
<html>
<head>
<title>ํ ํ์ด์ง</title>
</head>
<body>
<%
// ์ธ์
์์ ์ฌ์ฉ์ ์ด๋ฆ ๊ฐ์ ธ์ค๊ธฐ
String userName = (String) session.getAttribute("userName");
if (userName == null) {
// ์ธ์
์ ๋ฐ์ดํฐ๊ฐ ์์ ๊ฒฝ์ฐ ๋ก๊ทธ์ธ ํ์ด์ง๋ก ์ด๋
response.sendRedirect("login.jsp");
}
%>
<h1>์๋
ํ์ธ์, <%= userName %>๋!</h1>
<p>ํ ํ์ด์ง์ ์ค์ ๊ฒ์ ํ์ํฉ๋๋ค.</p>
<!-- ๋ก๊ทธ์์ ๋ฒํผ -->
<form action="logout" method="get">
<button type="submit">๋ก๊ทธ์์</button>
</form>
</body>
</html>
๐ฅ ์ฃผ์ํ ์
ํํ์(Expression Tag) ๋ด๋ถ์๋ ๋ฐ๋์ ๊ฐ(ํํ์)๋ง ์์ด์ผ ํ๋ฉฐ, ์ธ๋ฏธ์ฝ๋ก (;)์ ์ฌ์ฉํ์ง ์์์ผ ํ๋ค.
์ฌ๋ฐ๋ฅธ ์:
<%= userName %>
์๋ชป๋ ์:
<%= userName; %> <!-- ์๋ฌ ๋ฐ์ -->
5-2. ๋ก๊ทธ์์ ์ฒ๋ฆฌ
session.invalidate()๋ก ๊ฐ๋ฅ
LogoutServlet.java
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
import java.io.IOException;
@WebServlet("/logout") // URL ํจํด: /logout
public class LogoutServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// ์ธ์
๋ฌดํจํ
HttpSession session = request.getSession(false); // ๊ธฐ์กด ์ธ์
๊ฐ์ ธ์ค๊ธฐ
if (session != null) {
session.invalidate(); // ์ธ์
์ข
๋ฃ
}
// ๋ก๊ทธ์ธ ํ์ด์ง๋ก ๋ฆฌ๋ค์ด๋ ํธ
response.sendRedirect("login.jsp");
}
}
6. ์ฟผ๋ฆฌ์คํธ๋ง
์ถ๊ฐ์ ์ผ๋ก ๋ก๊ทธ์ธ๋ ์ฌ์ฉ์ ์ด๋ฆ์ ํ๋ฉด์ ๋์ฐ๋ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ์ฟผ๋ฆฌ์คํธ๋ง์ด ์๋ค.
์ฟผ๋ฆฌ์คํธ๋ง์ ์ฌ์ฉ์๊ฐ ์ ๋ ฅ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ๋ฐฉ๋ฒ ์ค ํ๋๋ก, url ์ฃผ์์ ๋ฏธ๋ฆฌ ํ์๋ ๋ฐ์ดํฐ๋ฅผ ํ๋ผ๋ฏธํฐ๋ฅผ ํตํด ๋๊ธฐ๋ ๊ฒ์ ๋งํ๋ค.
์๋ฅผ ๋ค์ด, URL์ด
http://example.com/home.jsp?name=Dain
์ด๋ผ๋ฉด, name์ด๋ผ๋ ํ๋ผ๋ฏธํฐ๋ฅผ ๋ฐ์์์ JSP์์ ์ฌ์ฉํ ์ ์๋ค.
๋ค์ home.jsp ํ์ด์ง์์ ๊ฐ๋ฉด ์ฟผ๋ฆฌ ์คํธ๋ง์ผ๋ก ๋ฐ์ ์ด๋ฆ์ ์ถ๋ ฅํ ์ ์๋ค.
<%@ page session="true" %>
<!DOCTYPE html>
<html>
<head>
<title>ํ ํ์ด์ง</title>
</head>
<body>
<%
// ์ฟผ๋ฆฌ ์คํธ๋ง์์ "name" ํ๋ผ๋ฏธํฐ๋ฅผ ๊ฐ์ ธ์ด
String userName = request.getParameter("name");
if (userName == null) {
userName = "guest"; // ์ฟผ๋ฆฌ ์คํธ๋ง์ ์ด๋ฆ์ด ์์ผ๋ฉด guest๋ก ์ค์
}
%>
<h1>์๋
ํ์ธ์, <%= userName %>๋!</h1>
<p>ํ ํ์ด์ง์ ์ค์ ๊ฒ์ ํ์ํฉ๋๋ค.</p>
</body>
</html>
7. ์ฟผ๋ฆฌ์คํธ๋ง๊ณผ ์ธ์
7-1. ์ฟผ๋ฆฌ์คํธ๋ง์ ์ ํจ๋ฒ์
ํ ๋ง๋๋ก ์ฟผ๋ฆฌ์คํธ๋ง๊ณผ ์ธ์ ์ ์ฐจ์ด๋ฅผ ์ดํดํ๋ ๋ฐ ์์ด ์ค์ํ ์ ์ ๋์ ์ ํจ ๋ฒ์์ด๋ค.
์ฟผ๋ฆฌ์คํธ๋ง (Query String)URL์ ์ผ๋ถ๋ก, ์ฃผ๋ก ํ์ด์ง ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ๋ฐ ์ฌ์ฉ๋๋ค. URL์ ๊ฐ์ ํฌํจ์์ผ ์ ๋ฌํ๊ณ , ๊ทธ ๊ฐ์ request.getParameter("userName") ๋ฑ์ ํตํด ํด๋น ํ์ด์ง์์ ์ฌ์ฉํ ์ ์๋ค.
์๋ฅผ ๋ค์ด์ ์๋์ ๊ฐ์ URL ์ด ์๋ค๊ณ ๊ฐ์ ํ์.
https://example.com/home.jsp?userName=Dain
์ด ๋ ์ ํจ ๋ฒ์๋? ์ฟผ๋ฆฌ์คํธ๋ง์์ ์ ๋ฌ๋ ๋ฐ์ดํฐ๋ ํ์ฌ ํ์ด์ง์๋ง ์ ํจํ๋ค.
URL์ ํตํด ๋ค๋ฅธ ํ์ด์ง๋ก ์ด๋ํ๋ฉด ์ฟผ๋ฆฌ์คํธ๋ง์ ๊ฐ์ ์ฌ๋ผ์ง๋ค.
<!-- home.jsp์์ -->
<h1>์๋
ํ์ธ์, <%= request.getParameter("userName") %>๋!</h1>
์ฟผ๋ฆฌ์คํธ๋ง ๋ฐฉ์์ home.jsp ํ์ด์ง์์๋ง userName ๊ฐ์ ์ฌ์ฉํ๊ณ , ๋ค๋ฅธ ํ์ด์ง๋ก ์ด๋ํ๋ฉด ๊ฐ์ด ์ฌ๋ผ์ง๊ฒ ๋๋ค๋ ํน์ง์ด ์๋ค.
7-2. ์ธ์ ์ ์ ํจ๋ฒ์
์์์ ์ดํด ๋ดค๋ฏ์ด ์ธ์
์ ์๋ฒ ์ธก์์ ๊ด๋ฆฌ๋๋ ๋ฐ์ดํฐ๋ก, ์ฌ์ฉ์๊ฐ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ์ฌ์ฉํ๋ ๋์ ์ธ์
์ด ์ ํจํ ๋ชจ๋ ํ์ด์ง์์ ์ ๊ทผํ ์ ์๋ค.
์ฆ, ์ธ์
์ ์ ์ฅ๋ ๊ฐ์ ๋ธ๋ผ์ฐ์ ๊ฐ ๋ซํ๊ธฐ ์ ๊น์ง, ํน์ ์ธ์
์ด ๋ง๋ฃ๋ ๋๊น์ง ์ ํจํ๋ค. ๋ฐ๋ผ์ ์ฌ์ฉ์๊ฐ ์ฌ๋ฌ ํ์ด์ง๋ฅผ ์ด๋ํ๋ ๋์์๋ ์ธ์
์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ๊ณ์ ์ฌ์ฉํ ์ ์๋ค.
์ฟผ๋ฆฌ์คํธ๋ง๊ณผ ๋ฌ๋ฆฌ ์ธ์ ์ ์ฌ์ฉํ๋ฉด ํ ๋ฒ์ ๋ก๊ทธ์ธ์ผ๋ก ์น์ฌ์ดํธ ๋ด์ ์ฌ๋ฌ ํ์ด์ง์์ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๋ถ๋ฌ ์ฌ ์ ์๋ค.
์๋ฅผ ๋ค์ด ์ฌ์ฉ์๊ฐ ๋ค์ด๋ฒ์์ ํ ๋ฒ์ ๋ก๊ทธ์ธ์ ํ๋ฉด, userName์ด ์ธ์ ์ ์ ์ฅ๋๋ฏ๋ก ์ฌ๋ฌ ํ์ด์ง์์ ๋์ผํ ์ฌ์ฉ์ ์ด๋ฆ์ ํ๋ฉด์ ๋์ธ ์ ์๋ค๋ ๊ฒ์ด๋ค. ๋ด์ค, ๋ธ๋ก๊ทธ, ๋ฉ์ผ,์คํฌ์ธ , ๋ ธํธ ๋ฑ ๋ค๋ฅธ ํ์ด์ง๋ฅผ ์ฎ๊ฒจ ๋ค๋ ๋๋ ๋ค์ด๋ฒ๋ ํด๋น ์ฌ์ฉ์์ ์ด๋ฆ ์ ๋ณด๋ฅผ ๊ณ์ ์ฌ์ฉ ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋์ ๋ก๊ทธ์ธ ์ ๋ณด๊ฐ ์ ์ง๋๋ค.
๊ฐ ํ์ด์ง์์ Session.getAttribute() ๋ฅผ ์ฐ๋ฉด ๋๊ธฐ ๋๋ฌธ์ด๋ค.
์ฟผ๋ฆฌ์คํธ๋ง: ํ์ด์ง๋ฅผ ์ด๋ํ๋ฉด ๊ฐ์ด ์ฌ๋ผ์ง. ํด๋น ํ์ด์ง์์๋ง ์ ํจ.
์ธ์ : ์ฌ์ฉ์๊ฐ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉํ๋ ๋์ ๊ณ์ ์ ํจ. ๋ค๋ฅธ ํ์ด์ง์์๋ ๊ณ์ ์ฌ์ฉ ๊ฐ๋ฅ
7-3. ์ธ์ ํ์์์
ํ์ง๋ง ์ธ์ ์ ์๊ฐ ์ ํ์ด ์๋ค๋ฉด ๋ธ๋ผ์ฐ์ ๋ ๊ณ์ ๋ก๊ทธ์ธ์ด ์ ์ง๋๋ ๋์ ์ฌ์ฉ์์ ์ ๋ณด๋ฅผ ์ ๊ณตํ๊ฒ ๋๋ค.
์ธ์ ํ์์์์ ์ค์ ํ๋ฉด ์ผ์ ์๊ฐ์ด ์ง๋๋ฉด ์๋์ผ๋ก ์ธ์ ์ด ์ข ๋ฃ๋์ด ๋ณด์์ ๊ฐํํ ์ ์๋ค.
์ธ์
ํ์์์์ ์ฌ์ฉ์๊ฐ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ์ผ์ ์๊ฐ ๋์ ํ๋ํ์ง ์์ผ๋ฉด ์๋์ผ๋ก ๋ก๊ทธ์์๋๋๋ก ์ค์ ํ๋ ๊ธฐ๋ฅ์ด๋ค.์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธํ ์ํ๋ก ์น ํ์ด์ง๋ฅผ ๋ ๋๊ฑฐ๋ ์ผ์ ์๊ฐ ๋์ ์๋ฌด๋ฐ ํ๋์ ํ์ง ์์ผ๋ฉด, ์๋ฒ๋ ์ธ์
์ ์๋์ผ๋ก ์ข
๋ฃํ๊ณ ํด๋น ์ฌ์ฉ์์ ์ ๋ณด๋ฅผ ๋ ์ด์ ์ ์งํ์ง ์๊ฒ ๋๋ค.
์ธ์ ํ์์์ ์ค์ ํ๋ ๋ฒ์ web.xml์์ ๊ฐ๋ฅ ํ๋ค.
<session-config>
<session-timeout>30</session-timeout> <!-- 30๋ถ -->
</session-config>
8. ํ๋ณํ(Casting)
์ฝ๋๋ฅผ ์ ๋ฆฌํ๋ค๊ฐ ์ถ๊ฐ๋ก ๋ค๋ฃจ๊ณ ์ถ์ ๋ด์ฉ
๐ฅ ์ String์ผ๋ก ํ๋ณํ์ ํด?
HttpSession ๊ฐ์ฒด์ getAttribute() ๋ฉ์๋๋ ๋ชจ๋ ๊ฐ์ฒด๋ฅผ Object ํ์ ์ผ๋ก ๋ฐํํ๊ธฐ ๋๋ฌธ์ด๋ค.
String userName = (String) session.getAttribute("userName");
Object ํ์
์ ๋ชจ๋ ํด๋์ค์ ๋ถ๋ชจ์ด๊ธฐ ๋๋ฌธ์, ํด๋น ๊ฐ์ฒด๊ฐ ์ค์ ๋ก String์ด ์๋ ๋ค๋ฅธ ํ์
์ผ ์ ์๋ค.
ํ์ง๋ง ์ธ์ ์ ์ ์ฅํ ๋ String ๊ฐ์ฒด๋ก ์ ์ฅํ๋ค๋ฉด ์ ํํ๊ฒ String ํ์ ์ผ๋ก ํ๋ณํํ์ฌ ์ฌ์ฉํด์ผ ํ๋ค.
Object obj = session.getAttribute("userName");
if (obj != null) {
String userName = (String) obj; // ํ๋ณํ ํ ์ฌ์ฉ
// ์ด์ userName์ ๋ฌธ์์ด๋ก ์ฌ์ฉํ ์ ์์
}
๐ฅ ํ๋ณํ์ด ์คํจํ๋ฉด?
ํ๋ณํ์ ์๋ชปํ๋ฉด ClassCastException ์์ธ๊ฐ ๋ฐ์ํ ์ ์๋ค.
์๋ฅผ ๋ค์ด, ์ธ์ ์ ์ ์ฅ๋ ๊ฐ์ด String์ด ์๋ ๋ค๋ฅธ ํ์ ์ด๋ผ๋ฉด, ํด๋น ๊ฐ์ String์ผ๋ก ํ๋ณํํ๋ ค ํ ๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค. ์ด๋ฅผ ๋ฐฉ์งํ๋ ค๋ฉด ์ธ์ ์ ์ ์ฅํ ๋ ํ์ ์ ๋ช ํํ ํ์ธํ๊ณ , ํ์ํ๋ค๋ฉด ํ๋ณํ์ ์์ ํ๊ฒ ์ฒ๋ฆฌํด์ผ ํ๋ค.
์ฐธ๊ณ ์๋ฃ
1. ๋ด ๋จธ๋ฆฟ์
2. ์ค์ธ์ฌ ์ฑ์๋ฏผ์ค JSP ์์ ์ค์ต๋ด์ฉ
3. htmlup5 (https://html5up.net/)
4. session Time out ๋ถ๋ถ์ ๊ถ๊ธํ ๊ฒ์ chatGPT ์ ๋ฌผ์ด๋ด
5. ํฌ์คํ ์์ฑ์ ๋์์ ์ฃผ์ ๋ธ๋ก๊ทธ (๊พธ๋ฒ )
๊ฐ ์ฃผ์ ์ ๋ํ ๊ณต์ ๋ฌธ์ ๋งํฌ
1. ์ธ์ ๋ฐ ์ฟ ํค
- Mozilla HTTP ์ฟ ํค https://developer.mozilla.org/ko/docs/Web/HTTP/Cookies
- Java EE 7 Specifications - Session Management https://docs.oracle.com/javaee/7/api/javax/jms/Session.html
- Oracle - Configuring Session Timeout https://docs.oracle.com/en/database/oracle/application-express/21.1/aeadm/configuiring-session-timeout.html
'Coding > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JSP & Servlet] URL ๋งคํ (9) | 2025.01.28 |
---|---|
[Java] ์ฟผ๋ฆฌ์คํธ๋ง ์ผ๋ก ๊ฐ ๋๊ฒจ์ ํ๋ฉด์ ์ถ๋ ฅํ๊ธฐ (15) | 2025.01.26 |
[Java] WebContent ์ /src/main/webapp์ ์ฐจ์ด์ (16) | 2025.01.26 |
[Java] ์๋ฐ๋ก SOAP ์์ฒญ/์๋ต (SOAP Request/Response), WSDL, UDDI, XML (11) | 2025.01.25 |
[Java] ์์์ ์๋์ผ๋ก ํด์ ํ๋ try-with-resources ๊ตฌ๋ฌธ (57) | 2024.12.26 |