Java

2024.07.04 JSP ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๋ณธ ์ฟ ํ‚ค์™€ ์„ธ์…˜ ๊ด€๋ฆฌ

์ •ํ›ˆ5 2024. 7. 4. 16:18
๐Ÿ’ก ํ•™์Šต ๋ชฉํ‘œ

1. ์ฟ ํ‚ค์™€ ์„ธ์…˜์˜ ๊ฐœ๋…๊ณผ ์ฐจ์ด์ ์„ ์ดํ•ดํ•œ๋‹ค.
2. JSP์—์„œ ์ฟ ํ‚ค์™€ ์„ธ์…˜์„ ์„ค์ •ํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ตํžŒ๋‹ค.
3. ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์šด

 

์ฟ ํ‚ค ๊ฐœ๋…๊ณผ ์‚ฌ์šฉ๋ฒ•

์ฟ ํ‚ค(Cookie)

์›น ๋ธŒ๋ผ์šฐ์ €์— ์ €์žฅ๋˜๋Š” ์ž‘์€ ๋ฐ์ดํ„ฐ ์กฐ๊ฐ์ž…๋‹ˆ๋‹ค.

์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ฟ ํ‚ค๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ดํ›„ ํด๋ผ์ด์–ธํŠธ๋Š” ํ•ด๋‹น ์ฟ ํ‚ค๋ฅผ ์„œ๋ฒ„๋กœ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.

์ฟ ํ‚ค๋Š” ์ฃผ๋กœ ์‚ฌ์šฉ์ž ์‹๋ณ„, ์ƒํƒœ ์œ ์ง€, ๊ฐœ์ธ ์„ค์ • ๋“ฑ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

 

 

ํŠน์ง•

  • ํด๋ผ์ด์–ธํŠธ(๋ธŒ๋ผ์šฐ์ €)์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
  • ์œ ํšจ ๊ธฐ๊ฐ„์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ณด์•ˆ์ด ์ƒ๋Œ€์ ์œผ๋กœ ๋‚ฎ์Šต๋‹ˆ๋‹ค.
  • ์ž‘์€ ๋ฐ์ดํ„ฐ ์ €์žฅ ์šฉ๋Ÿ‰(์•ฝ 4KB)์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

 

class_jsp_v05 ํด๋” ์ƒ์„ฑ

 

setCookie.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
    <%
    	String username = "ํ™๊ธธ๋™";
    	Cookie userCookie = new Cookie("username", username);
    	/* ์ฟ ํ‚ค๋Š” ์„œ๋ฒ„์ธก์— ์ €์žฅ๋œ๋‹ค?
    	   ์ฟ ํ‚ค๋Š” ์š”์ฒญํ•œ ์‚ฌ์šฉ์ž ๋ธŒ๋ผ์šฐ์ €์— ์ €์žฅ๋œ๋‹ค.
    	   ์ฆ‰, setCookie.jsp ์š”์ฒญํ•œ ์‚ฌ์šฉ์ž์— response ๊ฐ์ฒด๋กœ ๋ฐ์ดํ„ฐ ์กฐ๊ฐ์„ ๋‹ด์•„์„œ ๋ณด๋‚ด ์ฃผ์–ด์•ผ ํ•œ๋‹ค.
    	*/
    	
    	userCookie.setMaxAge(60 * 60 * 24);
    	response.addCookie(userCookie);
    %>
    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
		<h1>์‚ฌ์šฉ์ž๊ฐ€ ์ด ํŽ˜์ด์ง€ ์š”์ฒญ์‹œ์— ์„œ๋ฒ„์ธก์—์„œ ์ฟ ํ‚ค๋ฅผ ์ƒ์„ฑํ•ด์„œ ์‘๋‹ต ํ•ฉ๋‹ˆ๋‹ค.</h1>
		
		<a href="getCookie.jsp">์ฟ ํ‚ค ๊ฐ’ ์ฝ์–ด ๋ณด๋Š” ํŽ˜์ด์ง€</a>
</body>
</html>

 

 

getCookie.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
    <%
    	Cookie[] cookies = request.getCookies();
    	String cUsername = null;
    	if(cookies != null) {
    		
    		// ์ฟ ํ‚ค๋Š” ์—ฌ๋Ÿฌ๊ฐœ ์กด์žฌ ๊ฐ€๋Šฅํ•˜๋‹ค. ์—ฌ๊ธฐ ํŽ˜์ด์ง€์—์„œ ํ•„์š”ํ•œ
    		// ์ฟ ํ‚ค๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ •์˜ํ•œ username ์ด๋ฆ„์„ ๊ฐ€์ง„ ๋…€์„์ด๋‹ค.
    		
    		for(Cookie c : cookies) {
    			
    			if(c.getName().equals("username")){
    				
    				cUsername = c.getValue();
    				
    				break;
    			}	
    		}
    			
    	}
    	
    %>
      
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
		<h2>์ฟ ํ‚ค ์ฝ๊ธฐ</h2>
		<%
			if(cUsername != null) {
				
				out.println("<p> ์•ˆ๋…•ํ•˜์„ธ์š” " + cUsername + " ๋‹˜");
			} else {
				out.println(" <p> ์ฟ ํ‚ค๊ฐ€ ์„ค์ •๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. </p>");
			}
		%>
		
		<a href="setCookie.jsp">์ฟ ํ‚ค ์„ค์ •ํ•˜๋Ÿฌ ๊ฐ€๊ธฐ</a>

</body>
</html>

 

 

 

 

 


 

 

์„ธ์…˜ ๊ฐœ๋…๊ณผ ์‚ฌ์šฉ๋ฒ•

์„ธ์…˜(Session)

์„œ๋ฒ„์— ์ €์žฅ๋˜๋Š” ์‚ฌ์šฉ์ž๋ณ„ ๋ฐ์ดํ„ฐ์ž…๋‹ˆ๋‹ค.

๊ฐ ์‚ฌ์šฉ์ž๋Š” ๊ณ ์œ ํ•œ ์„ธ์…˜ ID๋ฅผ ๊ฐ€์ง€๋ฉฐ, ์„ธ์…˜ ID๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„๋Š” ์‚ฌ์šฉ์ž๋ฅผ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„ธ์…˜์€ ์ฃผ๋กœ ๋กœ๊ทธ์ธ ์ •๋ณด, ์‚ฌ์šฉ์ž ์„ค์ •, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒํƒœ ๋“ฑ์„ ์ €์žฅํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

 

 

์„ธ์…˜์˜ ํŠน์ง•

  • ์„œ๋ฒ„์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.
  • ๋น„๊ต์  ํฐ ๋ฐ์ดํ„ฐ ์ €์žฅ ์šฉ๋Ÿ‰์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.
  • ๋ณด์•ˆ์ด ์ƒ๋Œ€์ ์œผ๋กœ ๋†’์Šต๋‹ˆ๋‹ค.

 

  ์ƒํƒœ ์œ ์ง€๋ž€?

  • ์„ธ์…˜ ID
    ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์™€์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ์ถ”์ ํ•˜๊ธฐ ์œ„ํ•ด ์„ธ์…˜ ID๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
    ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์„ธ์…˜ ID๋ฅผ ์ฟ ํ‚ค๋กœ ์ „๋‹ฌ๋ฐ›์œผ๋ฉฐ, ์ดํ›„ ๋ชจ๋“  ์š”์ฒญ์— ์ด ์„ธ์…˜ ID๋ฅผ ํฌํ•จํ•˜์—ฌ ์„œ๋ฒ„์— ์ „์†กํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„๋Š” ์ด ์„ธ์…˜ ID๋ฅผ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ์˜ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

  • ์ถ”์ƒ์ ์ธ ๊ฐœ๋…
    ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ์ƒํƒœ ์œ ์ง€๋Š” ๋ฌผ๋ฆฌ์ ์ธ ์—ฐ๊ฒฐ์„ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ,
    ํด๋ผ์ด์–ธํŠธ์˜ ์ƒํƒœ ์ •๋ณด๋ฅผ ์„ธ์…˜ ID๋ฅผ ํ†ตํ•ด ์ถ”์ ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ์ถ”์ƒ์ ์ธ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค.

 

class_jsp_v06 ํด๋” ์ƒ์„ฑ

 

setSession.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
    <%
    	String username = "ํ™๊ธธ๋™";
    	int age = 21;
    	
    	session.setAttribute("username", username); // key value ๊ตฌ์กฐ map
    	session.setAttribute("age", age);
    %>
    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>์„ธ์…˜ ์„ค์ • ํŽ˜์ด์ง€</title>
</head>
<body>

	<h2>์„ธ์…˜ ์„ค์ •์ด ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.</h2>
	<a href="getSession.jsp">์„ธ์…˜ ์ฝ์–ด ๋ณด๊ธฐ</a>
	
</body>
</html>

 

 

getSession.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>์„ธ์…˜์„ ์ฝ์–ด ๋ณด๋Š” ํŽ˜์ด์ง€</title>
</head>
<body>
	<h2>์„ธ์…˜ ์ฝ๊ธฐ</h2>
	<%
		// ์‚ผํ•ญ ์—ฐ์‚ฐ์ž
		// if else
		// try catch ์‚ฌ์šฉ ๊ฐ€๋Šฅ 
		
		try{
			
			String username = (String)session.getAttribute("username");
			
			int age = (int) session.getAttribute("age");
			
			if(username != null){
				out.println("<p> ์•ˆ๋…• " + username + "</p>");
				out.println("๋‚˜์ด๋Š” " + age +" ์ด๋„ค์š”! </p>");
				
			} else {
				out.println("์„ธ์…˜์ด ์„ค์ •์ด ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.");
			}
			
		} catch(Exception e){
			response.sendRedirect("");
		}
	%>

</body>
</html>

 

 

 

 

๋„์ „ ๊ณผ์ œ

์„ธ์…˜๊ณผ ๊ด€๋ จ๋œ ๋ฉ”์†Œ๋“œ๋“ค์„ ํ™•์ธ ๋ฐ ํ™œ์šฉํ•˜๊ณ  ์„ธ์…˜์„ ๋ฌดํšจํ™” ์‹œํ‚ค๋Š” ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค์–ด ๋ณด์„ธ์š”

 

๋ฉ”์†Œ๋“œ ์ด๋ฆ„
๋ฆฌํ„ด ํƒ€์ž…
์„ค๋ช…
getAttribute(String name)
java.lang.Object
์„ธ์…˜ ์†์„ฑ๋ช…์ด name์ธ ์†์„ฑ์˜ ๊ฐ’์„ Object ํƒ€์ž…์œผ๋กœ ๋ฆฌํ„ดํ•œ๋‹ค. ํ•ด๋‹น ๋˜๋Š” ์†์„ฑ๋ช…์ด ์—†์„ ๊ฒฝ์šฐ์—๋Š” null ๊ฐ’์„ ๋ฆฌํ„ดํ•œ๋‹ค.
getAttributeNames()
java.util.Enumeration
์„ธ์…˜ ์†์„ฑ์˜ ์ด๋ฆ„๋“ค์„ Enumeration ๊ฐ์ฒด ํƒ€์ž…์œผ๋กœ ๋ฆฌํ„ดํ•œ๋‹ค.
getCreationTime()
long
1970๋…„ 1์›” 1์ผ 0์‹œ 0์ดˆ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•˜์—ฌ ํ˜„์žฌ ์„ธ์…˜์ด ์ƒ์„ฑ๋œ ์‹œ๊ฐ„๊นŒ์ง€ ๊ฒฝ๊ณผํ•œ ์‹œ๊ฐ„์„ ๊ณ„์‚ฐํ•˜์—ฌ 1/1000์ดˆ ๊ฐ’์œผ๋กœ ๋ฆฌํ„ดํ•œ๋‹ค.
getId()
java.lang.String
์„ธ์…˜์— ํ• ๋‹น๋œ ๊ณ ์œ  ์‹๋ณ„์ž๋ฅผ String ํƒ€์ž…์œผ๋กœ ๋ฆฌํ„ดํ•œ๋‹ค.
getMaxInactiveInterval()
int
ํ˜„์žฌ ์ƒ์„ฑ๋œ ์„ธ์…˜์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์„ค์ •๋œ ์„ธ์…˜ ์œ ์ง€์‹œ๊ฐ„์„ intํ˜•์œผ๋กœ ๋ฆฌํ„ดํ•œ๋‹ค.
invalidate()
void
ํ˜„์žฌ ์ƒ์„ฑ๋œ ์„ธ์…˜์„ ๋ฌดํšจํ™” ์‹œํ‚จ๋‹ค.
removeAttribute(String.name)
void
์„ธ์…˜ ์†์„ฑ๋ช…์ด name์ธ ์†์„ฑ์„ ์ œ๊ฑฐํ•œ๋‹ค.
setAttribute(String name, Object value)
void
์„ธ์…˜ ์†์„ฑ๋ช…์ด name์ธ ์†์„ฑ์— ์†์„ฑ๊ฐ’์œผ๋กœ value๋ฅผ ํ• ๋‹นํ•œ๋‹ค.
setMaxInactiveInterval(int interval)
void
์„ธ์…˜์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ์„ธ์…˜ ์œ ์ง€์‹œ๊ฐ„์„ ์ดˆ ๋‹จ์œ„๋กœ ์„ค์ •ํ•œ๋‹ค.

 

test_form.jsp

<%@ 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>
	<h1>ใ…‡ใ…‡</h1>
	
	<%
	String username = "ํ™๊ธธ๋™";
    	int age = 21;
    	
    	session.setAttribute("username", username); // key value ๊ตฌ์กฐ map
    	session.setAttribute("age", age);
    %>
	
	<!--  http:localhost:8080/jsp/test_form.jsp -->
	<form action="challenge.jsp" method="POST">
		<label for="qq">์ด๋ฆ„</label>
		<input type="text" id="qq" name="username" value="๊ฐ€์„">
		
		<label for="ee">๋‚˜์ด</label>
		<input type="text" id="ee" name="age" value="21">
		
		<button type="submit">์ œ์ถœ</button>
		
	</form>

</body>
</html>

 

challenge.jsp

<%@page import="org.apache.jasper.tagplugins.jstl.core.Remove"%>
<%@ 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>
	<!--  ์„ธ์…˜๊ณผ ๊ด€๋ จ๋œ ๋ฉ”์†Œ๋“œ๋“ค์„ ํ™•์ธ ๋ฐ ํ™œ์šฉํ•˜๊ณ  ์„ธ์…˜์„ ๋ฌดํšจํ™” ์‹œํ‚ค๋Š” ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค์–ด ๋ณด์„ธ์š”  -->
	
	<h2>์„ธ์…˜ ์‚ญ์ œ</h2>
	
	<%
	try {
		
		session.removeAttribute("username");
		session.removeAttribute("age");
		
		// ์„ธ์…˜์—์„œ ์‚ฌ์šฉ์ž ์ด๋ฆ„๊ณผ ๋‚˜์ด๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
 		 String username = (String) session.getAttribute("username");
        Integer age = (Integer) session.getAttribute("age");
        
        request.getSession().invalidate();
        
        // ์‚ฌ์šฉ์ž ์ด๋ฆ„์ด null์ด ์•„๋‹Œ ๊ฒฝ์šฐ
        
        if (username != null) {
            // ์„ธ์…˜ ๋ฌดํšจํ™”
           
            out.print(username);
            out.print(age);
            
            // ์‚ฌ์šฉ์ž ์ด๋ฆ„๊ณผ ๋‚˜์ด๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
            out.println("<p>์•ˆ๋…• " + username + "</p>");
            out.println("<p>๋‚˜์ด๋Š” " + age + "์ด๋„ค์š”!</p>");
        } else {
            // ์„ธ์…˜์ด ์„ค์ •๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ
            out.println("<p>์„ธ์…˜์ด ์„ค์ •๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.</p>");
        }
    } catch (Exception e) {
        // ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด setSession.jsp๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธํ•ฉ๋‹ˆ๋‹ค.
        response.sendRedirect("test_form.jsp");
    }
		
	%>

</body>
</html>

 

 

 


 

๊ตฌ๊ตฌ๋‹จ ๋งŒ๋“ค์–ด ๋ณด๊ธฐ

 

gugudan_form.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>๊ตฌ๊ตฌ๋‹จ ํผ</title>
</head>
<body>
	<%
		String mHidden = "ํ™๊ธธ๋™";
	%>
	<h1>๊ตฌ๊ตฌ๋‹จ์— ์‚ฌ์šฉํ•  ์ˆซ์ž๋ฅผ ์ž…๋ ฅ ํ•˜์‹œ์˜ค</h1>
	<form action="result.jsp" method="get">
		<input type="hidden" name="mHidden" value="<%=mHidden%>">
		<input type="number" name="number" value="7">
		<input type="submit" value="์ œ์ถœ">	
	</form>
</body>
</html>

 

result.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>๊ตฌ๊ตฌ๋‹จ ๊ฒฐ๊ณผ</title>
</head>
<body>
	<h1>๊ตฌ๊ตฌ๋‹จ ๊ฒฐ๊ณผ</h1>
	<% 
		String sessionId = session.getId();
		out.print("sessionId : " + sessionId);
		
		String numberStr = request.getParameter("number");
		int number = Integer.parseInt(numberStr); // ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ์ƒ๋žต 
		
	%>	
	<h2> <%=number %> ๋‹จ</h2>
	
	<table border="1">
		<thead>
			<tr>
				<th>๊ณ„์‚ฐ์‹</th>
				<th>๊ฒฐ๊ณผ</th>
			</tr>
		</thead>
		<tbody>
			<% for(int i = 1; i <= 9; i++) { %>
			<tr>
				<td><%=number %> x <%= i %> </td>
				<td><%=number * i %></td>
			</tr>				
			<%} %>				
		</tbody>
		<tfoot></tfoot>	
	</table>
</body>
</html>