๊ด€๋ฆฌ ๋ฉ”๋‰ด

JiYoung Dev ๐Ÿ–ฅ

[JSP/Servlet] JSP ๋‚ด์žฅ๊ฐ์ฒด(HttpServletResponse) & ์ฟ ํ‚ค(Cookie) (2023.05.17) ๋ณธ๋ฌธ

full stack/Back-End

[JSP/Servlet] JSP ๋‚ด์žฅ๊ฐ์ฒด(HttpServletResponse) & ์ฟ ํ‚ค(Cookie) (2023.05.17)

Shinjio 2023. 5. 19. 09:39

๐ŸŽˆ JSP ๋‚ด์žฅ๊ฐ์ฒด - HttpServletResponse

๐Ÿ“– sendRedirect()

 

 

๋ธŒ๋ผ์šฐ์ €(ํด๋ผ์ด์–ธํŠธ) ์ฃผ์†Œ์ฐฝ์— ์ž‘์„ฑ๋œ ๊ฒฝ๋กœ 

>> ๋ธŒ๋ผ์šฐ์ €(ํด๋ผ์ด์–ธํŠธ)๊ฐ€ ๊ทธ ๊ฒฝ๋กœ์— ์ง์ ‘ ์š”์ฒญ์„ ํ–ˆ๋‹ค! ๋ผ๋Š” ์˜๋ฏธ

 

์šฐ๋ฆฌ๋Š” Ex03redirect๋กœ ์š”์ฒญํ•จ

์ตœ์ข… ์ฃผ์†Œ์ฐฝ์—๋Š” Ex03createInput.html์ด ๋œธ

 

 

์ฆ‰, ์ตœ์ข…์ ์œผ๋กœ ๋ธŒ๋ผ์šฐ์ €(ํด๋ผ์ด์–ธํŠธ)๊ฐ€ Ex03createInput.html์— ์š”์ฒญ!!

 

 

 

 

โš™๏ธ sendRedirect์˜ ํ”„๋กœ์„ธ์Šค

์„œ๋ฒ„๋Š” ์–ด๋””๋กœ ์š”์ฒญํ•ด์•ผํ•˜๋Š”์ง€ ๊ฒฝ๋กœ๋ฅผ ์‘๋‹ต

ํด๋ผ์ด์–ธํŠธ๋Š” ์‘๋‹ต๋ฐ›์€ ๊ฒฝ๋กœ๋กœ ์š”์ฒญ

์š”์ฒญ๊ณผ ์‘๋‹ต์ด 2๋ฒˆ์”ฉ ์ผ์–ด๋‚จ!โœจโœจ

 

์š”์ฒญ์€ request๊ฐ์ฒด๋ฅผ ๊ฐ€์ง€๊ณ  ์‚ฌ์šฉ ๊ฐ€๋Šฅ

1๋ฒˆ์—์„œ ์‚ฌ์šฉํ•œ request๊ฐ์ฒด์™€ 3๋ฒˆ์—์„œ ์‚ฌ์šฉํ•œ request๊ฐ์ฒด๋Š” ์ด๋ฆ„๋งŒ ๊ฐ™์„ ๋ฟ ์„œ๋กœ ๋‹ค๋ฅธ ๊ฐ์ฒด์ž„

์ด ๋‘˜์€ ์„œ๋กœ ๊ฐ’(๋ฐ์ดํ„ฐ)์„ ๊ณต์œ ํ•˜์ง€ ์•Š์Œ
์ฆ‰, 1๋ฒˆ์—์„œ ์‚ฌ์šฉํ•œ ๊ฐ์ฒด๋Š” ์‚ฌ์šฉํ•œ ๊ฒ€์ƒ‰ํ•œ ์ •๋ณด ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๊ณ  ์žˆ์Œ. ๊ทธ๋Ÿฌ๋‚˜ 3๋ฒˆ์—์„œ ์‚ฌ์šฉํ•œ request ๊ฐ์ฒด๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๊ฒ€์ƒ‰ํ•œ ๋ฐ์ดํ„ฐ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์Œ!!!

์‘๋‹ต์€ resonse ๊ฐ์ฒด๋ฅผ ๊ฐ€์ง€๊ณ  ์‚ฌ์šฉ๊ฐ€๋Šฅ
2๋ฒˆ๊ณผ 4๋ฒˆ์—์„œ ์‚ฌ์šฉํ•˜๋Š” reponse ๊ฐ์ฒด๋Š” ์„œ๋กœ ๋‹ค๋ฅด๋‹ค!

 

 

๐Ÿ“– forward

 

 

๐Ÿ“– Redirect vs Forward

โš™๏ธ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ๋ฐฉ์‹

 

 

โš™๏ธ foward๋ฐฉ์‹ 

์ตœ์ข…์ ์œผ๋กœ ์ด๋™ํ•œ ํŽ˜์ด์ง€์˜ ๊ฒฝ๋กœ๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์•Œ ์ˆ˜ ์—†๋‹ค

 

 

 

 

๋‹จ์ˆœํ•œ ํŽ˜์ด์ง€ ์ด๋™์‹œ์—๋Š” ๋ฆฌ๋‹ค์ด๋ ‰ํŒ…๋ฐฉ์‹

๋„˜๊ฒจ์•ผ ํ•˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ foward ๋ฐฉ์‹ ํ˜น์€ ์ฟผ๋ฆฌ์ŠคํŠธ๋ง ๋ฐฉ์‹

 

Rendering
์„œ๋ฒ„๊ฐ€ ์‘๋‹ตํ•ด์ฃผ๋Š” ๋ฆฌ์†Œ์Šค(html, js, css ๋“ฑ)๋ฅผ ๊ฐ€์ง€๊ณ  ๋ธŒ๋ผ์šฐ์ € ํ™”๋ฉด์— ํ‘œํ˜„ํ•ด์ฃผ๋Š” ์ž‘์—…

→ ๊ทธ๋ฆผ์„ ๊ทธ๋ฆฌ๋Š” ์ž‘์—… 

< Rendering์˜ ์ข…๋ฅ˜ >
SSR(Server Side Rendering) ↔ CSR(Client Side Rendering)
์„œ๋ฒ„์—์„œ ๋ Œ๋”๋ง ์ฒ˜๋ฆฌ                  ํด๋ผ์ด์–ธํŠธ์—์„œ ๋ Œ๋”๋ง ์ฒ˜๋ฆฌ

SSR
- ์„œ๋ฒ„์—์„œ ์ด๋ฏธ ๋งŒ๋“ค์–ด์ง„ ์ •์  ์›นํŽ˜์ด์ง€(html)๋ฅผ ๋ถˆ๋Ÿฌ์™€์„œ ํ™”๋ฉด์— ๋ Œ๋”๋ง ํ›„ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋‹ค์šด ๋ฐ›์Œ
- ์žฅ์  : ์ฒซํŽ˜์ด์ง€๋ฅผ ๋กœ๋”ฉํ•˜๋Š” ์†๋„๊ฐ€ CSR์— ๋น„ํ•ด์„œ ๋น ๋ฅด๋‹ค. 
- ๋‹จ์  : ํŽ˜์ด์ง€ ์ด๋™์‹œ, ์‚ฌ์ดํŠธ ์กฐ์ž‘์‹œ ์†๋„๊ฐ€ ๋‹ค์†Œ ๋Š๋ฆผ
 > ์„œ๋ฒ„์—์„œ ์ด๋ฏธ ๋ Œ๋” ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋กœ html์„ ํด๋ผ์ด์–ธํŠธ์— ์ „๋‹ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— JS๊ฐ€ ๋‹ค์šด๋กœ๋“œ ๋˜๋Š” ๋™์•ˆ ์‚ฌ์šฉ์ž๋Š” ๋ Œ๋”๋ง๋œ ํ™”๋ฉด์„ ๋ณผ ์ˆ˜ ์žˆ์Œ
- ex. jsp


CSR
- ๋นˆ HTML ํŒŒ์ผ ์•ˆ์— ๋ชจ๋‘” ๋กœ์ง์ด ๋‹ด๊ธด js ํŒŒ์ผ์ด ์กด์žฌ. ๋”ฐ๋ผ์„œ js์„ ๋ชจ๋‘ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์€ ํ›„์—์•ผ ํ™”๋ฉด์— ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ์Œ. ๊ทธ๋Ÿฌ๋‚˜ ํ™”๋ฉด์„ ๋ด„๊ณผ ๋™์‹œ์— ์‚ฌ์ดํŠธ ์กฐ์ž‘์ด ๊ฐ€๋Šฅํ•จ. 

- ์žฅ์  : ํŽ˜์ด์ง€ ์ด๋™์‹œ SSR์— ๋น„ํ•ด ๋น ๋ฅด๋‹ค. & ์„œ๋ฒ„ ํŠธ๋ž˜ํ”ฝ ๊ฐ์†Œ
- ๋‹จ์  : ์ฒซํŽ˜์ด์ง• ๋กœ๋”ฉํ•˜๋Š” ์†๋„๊ฐ€ SSR์— ๋น„ํ•ด ๋‹ค์†Œ ๋Š๋ฆฌ๋‹ค. 
- ex. react, vue ๋“ฑ

์ฐธ๊ณ  ์˜์ƒ.
https://youtu.be/iZ9csAfU5Os

 

๐ŸŽˆ์ฟ ํ‚ค์™€ ์„ธ์…˜

๐Ÿ“– HTTP ํŠน์ง•

 

 

HTTP์˜ ๋น„์—ฐ๊ฒฐ์„ฑ๊ณผ ๋ฌด์ƒํƒœ์˜ ํŠน์„ฑ์œผ๋กœ ์ธํ•ด ์‚ฌ์šฉ์ž์˜ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์—†์Œ.

์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ฟ ํ‚ค(Cookie)์™€ ์„ธ์…˜(Session)์ด ์กด์žฌ

 

HTTP์˜ ํŠน์„ฑ๊ณผ ๋ฌด๊ด€ํ•˜๊ฒŒ(๋น„์—ฐ๊ฒฐ์„ฑ, ๋ฌด์ƒํƒœ) ๋กœ๊ทธ์ธ, ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋“ฑ์˜ ์‚ฌ์šฉ์ž์˜ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ฟ ํ‚ค์™€ ์„ธ์…˜์„ ์‚ฌ์šฉํ•จ!

 

๐Ÿ“– ์ฟ ํ‚ค(Cookie)

๋จน์—ˆ๋˜ ํ”์ ์ด ๋‚จ์•„์žˆ๋‹ค >> ์›น์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ฟ ํ‚ค๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์‚ฌ์šฉํ•˜๋ฉด ํ”์ ์ด ๋‚จ๋Š”๋‹ค.

 

 

์ฟ ํ‚ค ์•ˆ์— ์‚ฌ์šฉ์ž๊ฐ€ ์œ ์ง€ํ•˜๊ณ  ์‹ถ์–ดํ•˜๋Š” ์ƒํƒœ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋‹ค.

 

 

์ฟ ํ‚ค๋Š” ํด๋ผ์ด์–ธํŠธ ์ปดํ“จํ„ฐ์— ์ €์žฅ๋˜์–ด ์žˆ๋‹ค. 

์ฟ ํ‚ค๋ฅผ ํ—ˆ์šฉํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? --> ์šฐ๋ฆฌ PC์— ์ €์žฅํ•ด์•ผํ•˜๋‹ˆ๊นŒ ํ™•์ธ

์ €์žฅ๋œ ํŒŒ์ผ์€ ์šฐ๋ฆฌ PC์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. 

 

 

์ฟ ํ‚ค์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” ์ •๋ณด : name, value, expires/Max-age(๋งŒ๋ฃŒ๊ธฐ๊ฐ„) ์™ธ

session ์ด๋ผ๊ณ  ๋˜์–ด ์žˆ์œผ๋ฉด ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋‹ซ์œผ๋ฉด ์ฟ ํ‚ค๊ฐ€ ์‚ฌ๋ผ์ง (์„ธ์…˜ ์ฟ ํ‚ค) 


โš™๏ธ ์ฟ ํ‚ค ๋™์ž‘ ๋ฐฉ์‹

 

์š”์ฒญ์„ ๋ฐ›๊ณ  ์‘๋‹ต์„ ํ•ด์ค„๋•Œ ์ƒ์„ฑ๋œ ์ฟ ํ‚ค๋ฅผ ํ•จ๊ป˜ ์ „๋‹ฌํ•ด์คŒ 

ํŒจํ‚ท์˜ ํ—ค๋”๋ถ€๋ถ„์— ์ฟ ํ‚ค ์ €์žฅ

ํด๋ผ์ด์–ธํŠธ๋Š” ์›น ๋ธŒ๋ผ์šฐ์ €. ์›น ๋ธŒ๋ผ์šฐ์ €๋งˆ๋‹ค ์ฟ ํ‚ค๋Š” ๋‹ค๋ฅด๋‹ค. 

์ฟ ๊ธฐ์˜ ๊ฐ’์„ ์จ์•ผํ•  ๋•Œ ์š”์ฒญํ•  ๋•Œ ํŒจํ‚ท์— ์‹ฃ์–ด์„œ ๊ฐ™์ด ์š”์ฒญ

์„œ๋ฒ„์—์„œ ์ฟ ํ‚ค ํ™•์ธํ•˜์—ฌ ์ฟ ํ‚ค๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ•˜๋ฉด ์„œ๋ฒ„์—์„œ ์ˆ˜์ • ์ง„ํ–‰. ์ˆ˜์ •๋œ ์ •๋ณด๋ฅผ ํ—ค๋”์— ํฌํ•จ์‹œ์ผœ ์‘๋‹ต

 

โš™๏ธ ์ฟ ํ‚ค ์‚ฌ์šฉ ์˜ˆ์‹œ

์‡ผํ•‘๋ชฐ ์žฅ๋ฐ”๊ตฌ๋‹ˆ

ํŒ์—…์ฐฝ(์˜ค๋Š˜ ํ•˜๋ฃจ ์—ด์ง€ ์•Š์Œ)

 

โš™๏ธ ์ฟ ํ‚ค ์‚ฌ์šฉ ์žฅ๋‹จ์ 

 

 

์‘๋‹ตํ•˜๋Š” ๊ณผ์ •์— ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ๋‹ด๊ฒจ์žˆ์Œ. 

์‘๋‹ตํ•˜๋Š” ๊ณผ์ •์„ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๋ณผ ์ˆ˜๋„ ์žˆ์Œ. ===> ๋ณด์•ˆ์ƒ ์œ„ํ—˜์„ฑ

๋ธŒ๋ผ์šฐ์ €๋‹น 300๊ฐœ๊นŒ์ง€. ํ—ˆ์šฉ์šฉ๋Ÿ‰ ๋ฒ—์–ด๋‚  ๊ฒฝ์šฐ ๊ฐ€์žฅ ์˜ค๋ž˜๋œ ์ฟ ํ‚ค ์‚ญ์ œํ•˜๋Š” ๋“ฑ์˜ ๋ฐฉ๋ฒ•์œผ๋กœ ์—…๋ฐ์ดํŠธ

 

 

JSESSIONID ์„ธ์…˜์ฟ ํ‚ค : ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ž„์˜์ ์œผ๋กœ ์„œ๋ฒ„๊ฐ€ ๋ฐœ๊ธ‰ 

 

โš™๏ธ ์ฟ ํ‚ค ์ƒ์„ฑ & ์‚ฌ์šฉ & ์‚ญ์ œ

์„œ๋ฒ„์—์„œ ์ฟ ํ‚ค ์ƒ์„ฑ ํ›„ ํด๋ผ์ด์–ธํŠธ๋กœ ์ „๋‹ฌ

์ฟ ํ‚ค ๊ฐ์ฒด( Cookie(String(์ฟ ํ‚ค ๋„ค์ž„), String(์ฟ ํ‚ค ๊ฐ’) ) ์ƒ์„ฑ

 

ํด๋ผ์ด์–ธํŠธ๋กœ ์ฟ ํ‚ค ์ „์†ก

response.addCookie(์ฟ ํ‚ค๋„ค์ž„)

<%@ 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>
	<%
		//-- ์ฟ ํ‚ค ์ƒ์„ฑ
		//1. ์ฟ ํ‚ค ๊ฐ์ฒด ์ƒ์„ฑ : Cookie(String("name"),String("value"))
		Cookie cookie = new Cookie("test","testcookie");
	
		//2. ์ƒ์„ฑ๋œ ์ฟ ํ‚ค์˜ ๋งŒ๋ฃŒ๋‚ ์งœ๋ฅผ ์„ค์ •(์ดˆ๋‹จ์œ„)
		cookie.setMaxAge(60*60*24*365); //1๋…„๋™์•ˆ ์œ ์ง€

		//3. ์„œ๋ฒ„์—์„œ ์ƒ์„ฑ๋œ ์ฟ ํ‚ค๋ฅผ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „์†ก(response)
		response.addCookie(cookie);
		
		response.addCookie(new Cookie("name","์‹ ์ง€์˜"));
	%>
	
	<a href="Ex02GetCookie.jsp">์ฟ ํ‚คํ™•์ธ</a>
</body>
</html>

 

ํด๋ผ์ด์–ธํŠธ์— ์ €์žฅ๋œ ์ฟ ํ‚ค ๊ฐ€์ ธ์˜ค๊ธฐ

request.getCookies();

getName() - ์ฟ ํ‚ค ๋„ค์ž„ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๋ฉ”์„œ๋“œ

getvalue()  - ์ฟ ํ‚ค ๊ฐ’ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๋ฉ”์„œ๋“œ

 

<%@ 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>
	<%
		//-- ์ €์žฅ๋œ ์ฟ ํ‚ค ๊ฐ€์ ธ์˜ค๊ธฐ
		//ํด๋ผ์ด์–ธํŠธ์— ์ €์žฅ๋œ ์ฟ ํ‚ค๋ฅผ ์„œ๋ฒ„๋กœ ๋ณด๋‚ด๊ธฐ (request)
		Cookie[] cookies = request.getCookies();
	
		for(Cookie c : cookies){
			//์ฟ ํ‚ค์˜ name, value ํ™”๋ฉด์— ์ถœ๋ ฅ
			out.print(c.getName() + " : " + c.getValue() + "<br>");
		}
	%>
	
	<a href="Ex03removeCookie.jsp">์ฟ ํ‚ค์‚ญ์ œ</a>
</body>
</html>

 

์ฟ ํ‚ค ์‚ญ์ œํ•˜๊ธฐ

์‚ญ์ œํ•˜๊ณ  ์‹ถ์€ ์ฟ ํ‚ค์˜ ๋„ค์ž„๊ณผ ๋™์ผํ•˜๊ฒŒ ์ฟ ํ‚ค ์ƒ์„ฑ ํ›„ ๋งŒ๋ฃŒ๊ธฐ๊ฐ„ 0์œผ๋กœ ์„ค์ • → ํด๋ผ์ด์–ธํŠธ๋กœ ์ „์†ก

 

<%@ 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>
	<%
		//-- ์ฟ ํ‚ค ์‚ญ์ œ
		//1. ์ฟ ํ‚ค ์ƒ์„ฑ (์‚ญ์ œํ•˜๊ณ  ์‹ถ์€ ์ฟ ํ‚ค์˜ name๊ณผ ๊ฐ™์€ name์„ ๊ฐ€์ง„ ์ฟ ํ‚ค ์ƒ์„ฑ)
		//   - value๋Š” ๋‹ฌ๋ผ๋„ ๋จ
		Cookie cookie = new Cookie("name","");
	
		//2. ๋งŒ๋ฃŒ๊ธฐ๊ฐ„ ์„ค์ • (0s)
		cookie.setMaxAge(0);
		
		//3. ์„œ๋ฒ„์—์„œ ์ƒ์„ฑ๋œ ์ฟ ํ‚ค๋ฅผ ํด๋ผ์ด์–ธํŠธ๋กœ ์ „์†ก
		response.addCookie(cookie);
	%>
	
	<a href="Ex02GetCookie.jsp">์ฟ ํ‚ค ํ™•์ธ</a>
</body>
</html>