For Beginners

[Backend] Servlet, JSP์˜ ๊ธฐ๋ณธ ์ง€์‹ ๋ณธ๋ฌธ

2021๋…„ ์ž๋ฃŒ/WEB

[Backend] Servlet, JSP์˜ ๊ธฐ๋ณธ ์ง€์‹

.log 2021. 3. 29. 23:10
728x90

๐Ÿ‘‰ Web Architecture

๐Ÿ‘‰ ํด๋ผ์ด์–ธํŠธ↔์›น ์„œ๋ฒ„

ํด๋ผ์ด์–ธํŠธ์™€ ์›น ์„œ๋ฒ„ ์‚ฌ์ด์—์„œ๋Š” ์š”์ฒญ๊ณผ ์‘๋‹ต์ด ์ด๋ฃจ์–ด์ง„๋‹ค.
1. ํด๋ผ์ด์–ธํŠธ(๋ธŒ๋ผ์šฐ์ €)์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐœ์ƒํ•˜์—ฌ ์›น ์„œ๋ฒ„๋กœ ์š”์ฒญ(request)
2. ์›น ์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ์˜ ์ ‘์†์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.
...
3. ์„œ๋ฒ„์˜ ์ •๋ณด๋ฅผ ๋ฐ›์•„ ์‘๋‹ต(response)๋ฅผ ํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์— ์ „๋‹ฌํ•œ๋‹ค.

๐Ÿ‘‰ ์›น ์„œ๋ฒ„↔์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„

์›น ์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ ์ ‘์†์ด ์ฒ˜๋ฆฌ๋˜๋ฉด, ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ์„œ ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋Š” ๋””๋น„์— ์ €์žฅํ•˜๊ณ , ๋””๋น„์—์„œ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ด์™€์„œ ์‘๋‹ตํ•  ๋‚ด์šฉ์„ ์›น ์„œ๋ฒ„์— ์ „๋‹ฌํ•˜์—ฌ์•ผ ํ•œ๋‹ค.
๊ทธ ๊ณผ์ •์„ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์—์„œ ๋‹ด๋‹นํ•œ๋‹ค.

์‚ฌ๋žŒ๋“ค์€ ์›น๊ณผ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๋ฅผ ๋ถ„๋ฆฌํ•˜์ง€ ์•Š๊ณ  ๋™์‹œ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ์•˜๋Š”๋ฐ,
๊ทธ๋ ‡๊ฒŒ ๋“ฑ์žฅํ•œ ๊ฒƒ์ด WAS์ด๋‹ค.

WAS(Web Application Server)๋Š” ๊ธฐ์กด ์›น ์„œ๋ฒ„์™€ ๋‹ค๋ฅด๊ฒŒ ๋™์ ์ธ ์„œ๋ฒ„ ์ฝ˜ํ…์ธ ๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์ œ์•ˆ๋˜์—ˆ๋‹ค.

์›๋ž˜๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์—ฐ์‚ฐ์„ ํ”„๋ก ํŠธ์—์„œ ์ˆ˜ํ–‰ํ•˜์˜€๋Š”๋ฐ, ๋””๋น„, ํด๋ผ์šฐ๋“œ์˜ ๋ฐœ์ „์œผ๋กœ ์—ฐ์‚ฐ ์ฒ˜๋ฆฌ ์†๋„๊ฐ€ ๋นจ๋ผ์ ธ ์›น ๋ธŒ๋ผ์šฐ์ €๋ฅผ ํ™”๋ฉด์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ , ์„œ๋ฒ„์—์„œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ฐ”๋€Œ์–ด ๊ฐ€๋ฉฐ ๋“ฑ์žฅํ•˜์˜€๋‹ค.

๐Ÿ‘‰ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„↔๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ฐ’์„ ์ถ”๊ฐ€, ์—…๋ฐ์ดํŠธ, ์‚ญ์ œํ•˜๊ณ 
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ฐ’์„ ์กฐํšŒํ•˜์—ฌ ๋‹ค์‹œ ํด๋ผ์ด์–ธํŠธ๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

๐Ÿ‘‰ ์„œ๋ธ”๋ฆฟ(Servlet)์ด๋ž€?

์ž๋ฐ” ์„œ๋ธ”๋ฆฟ์€ ์ž๋ฐ”๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›น ํŽ˜์ด์ง€๋ฅผ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•˜๋Š” ์„œ๋ฒ„์ธก ํ”„๋กœ๊ทธ๋žจ์ด๋‹ค.
์›น ์„œ๋ฒ„์˜ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ณ , JSP์™€ ๋น„์Šทํ•œ ์ ์ด ์žˆ์ง€๋งŒ,
์„œ๋ธ”๋ฆฟ์€ ์ž๋ฐ” ์ฝ”๋“œ ์•ˆ์— HTML ์ฝ”๋“œ๋ฅผ ํฌํ•จ
JSP๋Š” HTML ์ฝ”๋“œ ์•ˆ์— ์ž๋ฐ”์ฝ”๋“œ๋ฅผ ํฌํ•จ

๐Ÿ‘‰ ์„œ๋ธ”๋ฆฟ์˜ ๋™์ž‘

1. ๋ฐ์ดํ„ฐ๋ฅผ ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ์–ป๋Š”๋‹ค.
2. ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ์ง์— ๋”ฐ๋ผ ๊ฐ€๊ณตํ•œ๋‹ค.
3. ์‘๋‹ต ํŽ˜์ด์ง€๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.(์‘๋‹ต ํŽ˜์ด์ง€๋กœ ๋„˜๊ธด๋‹ค)

๐Ÿ‘‰ ์„œ๋ธ”๋ฆฟ API

MyServlet > HttpServlet > GenericServlet > Servlet

๐Ÿ‘‰ ์„œ๋ธ”๋ฆฟ ์ƒ๋ช…์ฃผ๊ธฐ(LifeCycle)

main ๋ฉ”์„œ๋“œ๊ฐ€ ์—†์Œ
ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญ์„ ํ•˜๊ฒŒ ๋˜๋ฉด ์„œ๋ธ”๋ฆฟ ๊ฐ์ฒด๋Š” ์ตœ์ดˆ ํ•œ๋ฒˆ๋งŒ ์ƒ์„ฑ๋˜๊ณ , ์ดˆ๊ธฐํ™” ๋œ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์š”์ฒญ์ด ์ด๋ฃจ์–ด์งˆ ๋•Œ๋งˆ๋‹ค ์„œ๋น„์Šค ๋ฉ”์„œ๋“œ๋งŒ ๋ฐ˜๋ณตํ•œ๋‹ค.
์„œ๋ธ”๋ฆฟ ๊ฐ์ฒด๊ฐ€ ํ•„์š” ์—†๊ฒŒ ๋˜๋ฉด ์ œ๊ฑฐํ•˜๋Š” ์ผ๊นŒ์ง€ ์ง„ํ–‰ํ•œ๋‹ค.
* ๋‹จ, ์„œ๋ธ”๋ฆฟ ์ฝ”๋“œ๊ฐ€ ์ˆ˜์ •๋˜๋ฉด ๋‹ค์‹œ ์ƒ์„ฑ๋˜๊ณ , ์ดˆ๊ธฐํ™”๋œ๋‹ค.

๐Ÿ‘‰ Get ๋ฐฉ์‹๊ณผ Post ๋ฐฉ์‹์˜ ์ฐจ์ด

  GET POST
ํŠน์ง• ๋ฐ์ดํ„ฐ๊ฐ€ URL ๋’ค ์ฟผ๋ฆฌ์ŠคํŠธ๋ง์œผ๋กœ ์ „์†ก body์— ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ ๋ฐ์ดํ„ฐ๋กœ ์ „๋‹ฌ
์žฅ์  ๋น ๋ฅด๋‹ค ๋ฐ์ดํ„ฐ ๊ธธ์ด ์ œํ•œ ์—†๋‹ค
์ตœ์†Œํ•œ์˜ ๋ณด์•ˆ
๋‹จ์  ๋ฐ์ดํ„ฐ ์–‘์— ์ œํ•œ(๋ธŒ๋ผ์šฐ์ €๋งˆ๋‹ค ๋‹ค๋ฆ„)
๋ณด์•ˆ์ด ์•ˆ๋จ
๋ฐ์ดํ„ฐ์˜ ์–‘์ด ๊ฐ™๋‹ค ๊ฐ€์ •ํ•˜๋ฉด, GET ๋ณด๋‹ค
๋Š๋ฆฐ ์†๋„

๐Ÿ‘‰ URI ๋ถ„์„

 * ํ•˜๋‹จ์˜ ๋งํฌ๋Š” ๋‚ด๊ฐ€ ์ง€๊ธˆ ๊ธ€์„ ์“ฐ๊ณ  ์žˆ๋Š” ๋งํฌ๋ฅผ ๊ทธ๋Œ€๋กœ ๋ณต์‚ฌํ•œ ๊ฒƒ์ด๋‹ค.

 

๐Ÿ‘‰ ์ž๋ฐ” ์„œ๋ฒ„ ํŽ˜์ด์ง€(JSP)๋ž€?

์ž๋ฐ” ์„œ๋ฒ„ ํŽ˜์ด์ง€(JSP: Java Server Page)๋Š” HTML ๋‚ด์— ์ž๋ฐ” ์ฝ”๋“œ๋ฅผ ์‚ฝ์ž…ํ•˜์—ฌ ์›น ์„œ๋ฒ„์—์„œ ๋™์ ์œผ๋กœ ์›น ํŽ˜์ด์ง€๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์›น ๋ธŒ๋ผ์šฐ์ €์— ๋Œ๋ ค์ฃผ๋Š” ์–ธ์–ด์ด๋‹ค.

์‹คํ–‰ ์‹œ ์ž๋ฐ” ์„œ๋ธ”๋ฆฟ์œผ๋กœ ๋ณ€ํ™˜๋œ ํ›„ ์‹คํ–‰๋˜๋ฏ€๋กœ ์„œ๋ธ”๋ฆฟ๊ณผ ๊ฑฐ์˜ ์œ ์‚ฌํ•˜๋‹ค.

๐Ÿ‘‰ JSP์˜ ๋™์ž‘

1. JSP๊ฐ€ ์„œ๋ธ”๋ฆฟ ์ž๋ฐ” ํŒŒ์ผ๋กœ ๋ณ€ํ™˜๋จ
2. ์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค ์ปดํŒŒ์ผ์ด ์ด๋ฃจ์–ด์ง
3. ์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌ๋จ
4. ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ์š”์ฒญ ๋ฐ›์Œ(request)
5. ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ์ง์— ๋”ฐ๋ผ ๋ณ€ํ™˜
6. ๋ณ€ํ™˜๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์‘๋‹ต(response)

๐Ÿ‘‰ JSP์˜ ์šฉ๋ฒ•

1. ์„ ์–ธ
<%! ๋ฉค๋ฒ„ ๋ณ€์ˆ˜์™€ ๋ฉ”์„œ๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ถ€๋ถ„%>
2. ์Šคํฌ๋ฆฝํŠธ๋ฆฟ
<% ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ ์‹œ ๋งค๋ฒˆ ํ˜ธ์ถœ๋˜๋Š” ์˜์—ญ %>
3. ํ‘œํ˜„์‹
<%= ๋ธŒ๋ผ์šฐ์ €์— ์ถœ๋ ฅํ•  ๋ฐ์ดํ„ฐ %>
4. ์ฃผ์„
<%-- ์ฃผ์„ํ•  ๋ถ€๋ถ„ -->
* html ์ฃผ์„์˜ ๊ฒฝ์šฐ, ๋ธŒ๋ผ์šฐ์ € ์ƒ์—์„œ html ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์—ด๋žŒ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, JSP์˜ ์ฃผ์„์€ ์„œ๋ธ”๋ฆฟ์œผ๋กœ ๋ณ€ํ™˜๋˜๋ฉด์„œ ๊ฐ€์ ธ์˜ค์ง€ ์•Š์œผ๋ฏ€๋กœ ๋ธŒ๋ผ์šฐ์ € ์ƒ์—์„œ ์—ด๋žŒํ•  ์ˆ˜ ์—†๋‹ค.

๐Ÿ‘‰ JSP ์ง€์‹œ์ž

1. ํ•ด๋‹น ํŽ˜์ด์ง€๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•  ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•œ ์ •๋ณด ์ œ๊ณต
<%@ page attr1="val1" .... %>
2. ํŠน์ • jsp ํŒŒ์ผ์„ ํŽ˜์ด์ง€์— ํฌํ•จ
<%@ include file="/hello.jsp" %>
3. ์ปค์Šคํ…€ ํƒœ๊ทธ, JSTL ์ด์šฉ ์‹œ ์‚ฌ์šฉ
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

๐Ÿ‘‰ JSP ์ง€์‹œ์ž ์†์„ฑ ์ •๋ฆฌ

์†์„ฑ ๊ธฐ๋ณธ๊ฐ’ ์„ค๋ช…
language java ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด ์ง€์ •
info   JSP ํŽ˜์ด์ง€ ์„ค๋ช…
contentType text/html;charset=ISO-8859-1 ๋ฌธ์ž ์ง‘ํ•ฉ ์ง€์ •(๋ธŒ๋ผ์šฐ์ €)
pageEncoding ISO-8859-1 ๋ฌธ์ž ์ง‘ํ•ฉ ์ง€์ •(JSP ํŽ˜์ด์ง€)
import   ์ž๋ฐ” ํŒจํ‚ค์ง€, ํด๋ž˜์Šค ์ง€์ •
session true ์„ธ์…˜ ์‚ฌ์šฉ ์œ ๋ฌด
errorPage   ์—๋Ÿฌ ์‹œ ์ฒ˜๋ฆฌ๋  ํŽ˜์ด์ง€ ์ง€์ •
isErrorPage false ์ด ํŽ˜์ด์ง€๊ฐ€ ์—๋Ÿฌ ์ฒ˜๋ฆฌ ํŽ˜์ด์ง€์ธ์ง€
buffer 8KB ๋ฒ„ํผ์˜ ํฌ๊ธฐ
autoflush true ๋ฒ„ํผ ์ž๋™ ์ „์†ก ์—ฌ๋ถ€
isThreadsafe true ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ์—ฌ๋ถ€
extends javax.servlet.jsp.HttpJspPage ํด๋ž˜์Šค ์ƒ์† ๋ณ€๊ฒฝ

๐Ÿ‘‰ JSP ๊ธฐ๋ณธ ๊ฐ์ฒด

๊ฐ์ฒด ๋ช… ํƒ€์ž… ์„ค๋ช…
request javax.servlet.http.httpServletRequest ์‚ฌ์šฉ์ž ์ž…๋ ฅ ์ •๋ณด(ํด๋ผ์ด์–ธํŠธ ์ •๋ณด) ์ฝ๊ธฐ ์‹œ ์‚ฌ์šฉ
response javax.servlet.http.httpServletResponse ์‘๋‹ต ์ฒ˜๋ฆฌ
pageContext javax.servlet.jsp.PageContext ๊ธฐ๋ณธ ๊ฐ์ฒด ์–ป์„ ๋•Œ, forward, include
session javax.servlet.http.HttpSession ํด๋ผ์ด์–ธํŠธ ์„ธ์…˜ ์ •๋ณด ์ฒ˜๋ฆฌ
application javax.servlet.ServletContent ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฒ˜๋ฆฌ ๊ด€๋ จ ์ •๋ณด ๋ ˆํผ๋Ÿฐ์Šค
(์‚ฌ์‹ค์ƒ ํ”„๋กœ์ ํŠธ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.)
out javax.servlet.jsp.JspWriter output ์ŠคํŠธ๋ฆผ ์ฒ˜๋ฆฌ
config javax.servlet.ServletConfig ์ดˆ๊ธฐํ™” ํ™˜๊ฒฝ
page java.lang.Object ์ฐธ์กฐ ๋ณ€์ˆ˜
exception java.lang.Exception ์˜ค๋ฅ˜ ์ •๋ณด

๐Ÿ‘‰ set, get

๋ฉ”์„œ๋“œ ์„ค๋ช…
setAttribute(name, value) name์ด๋ผ๋Š” ๊ณณ์— value ๋ฐ์ดํ„ฐ set
getAttribute(name) ์†์„ฑ ๊ฐ’ ์žˆ์œผ๋ฉด get ์—†์œผ๋ฉด null
getAttributeNames() ์†์„ฑ๋“ค์˜ ์ด๋ฆ„๋“ค์„ Enumeration ํ˜•ํƒœ๋กœ get
removeAttribute(name) ํ•ด๋‹น ์†์„ฑ์„ ์‚ญ์ œ
Comments