Search
Duplicate
โšก

JSP ํ•ต์‹ฌ ๊ธฐ์ˆ  ์š”์†Œ

JSP ํ•ต์‹ฌ ๊ธฐ์ˆ  ์š”์†Œ

์„œ๋ธ”๋ฆฟ(Servlet)๊ณผ JSP(JavaServer Pages)๋Š” ์ž๋ฐ” ๊ธฐ๋ฐ˜ ์›น ๊ฐœ๋ฐœ์˜ ํ•ต์‹ฌ ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค.
โ€ข
HTTP
โ€ข
Servlet
โ€ข
JSP
โ—ฆ
JSP ํƒœ๊ทธ
โ–ช
์Šคํฌ๋ฆฝํŠธ ํƒœ๊ทธ
โ€ข
์„ ์–ธ๋ฌธ
โ€ข
์Šคํฌ๋ฆฝํ‹€๋ฆฟ
โ€ข
ํ‘œํ˜„๋ฌธ
โ–ช
๋””๋ ‰ํ‹ฐ๋ธŒ ํƒœ๊ทธ
โ–ช
์•ก์…˜ ํƒœ๊ทธ
โ—ฆ
๋‚ด์žฅ ๊ฐ์ฒด
โ–ช
request
โ–ช
response
โ–ช
out
โ—ฆ
JSTL
โ—ฆ
EL
โ€ข
Filter
โ€ข
Session
โ€ข
Cookie
โ€ข
Listener
โ€ข
MVC

ํ•ต์‹ฌ ๊ธฐ์ˆ  ์š”์†Œ ์ •๋ฆฌ

HTTP

์›น์—์„œ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๊ธฐ ์•ฝ์†

HTTP์˜ ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ

โ€ข
URL (Uniform Resource Locator)
โ—ฆ
์›น์—์„œ ์ž์›์˜ ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ฃผ์†Œ
โ—ฆ
๊ตฌ์กฐ: ํ”„๋กœํ† ์ฝœ://ํ˜ธ์ŠคํŠธ:ํฌํŠธ/๊ฒฝ๋กœ?์ฟผ๋ฆฌ์ŠคํŠธ๋ง#ํ”„๋ž˜๊ทธ๋จผํŠธ
โ—ฆ
์˜ˆ: https://example.com:8080/user?id=123
โ€ข
HTTP ์š”์ฒญ ๋ฉ”์‹œ์ง€
โ—ฆ
์š”์ฒญ ๋ผ์ธ: ๋ฉ”์„œ๋“œ(GET, POST ๋“ฑ) + URL + HTTP ๋ฒ„์ „
โ—ฆ
ํ—ค๋”: Host, Content-Type, User-Agent ๋“ฑ์˜ ๋ฉ”ํƒ€์ •๋ณด
โ—ฆ
๋ฐ”๋””: POST/PUT ์š”์ฒญ ์‹œ ์ „์†กํ•  ๋ฐ์ดํ„ฐ (GET์€ ๋ฐ”๋”” ์—†์Œ)
โ€ข
HTTP ์‘๋‹ต ๋ฉ”์‹œ์ง€
โ—ฆ
์ƒํƒœ ๋ผ์ธ: HTTP ๋ฒ„์ „ + ์ƒํƒœ ์ฝ”๋“œ(200, 404, 500 ๋“ฑ) + ์ƒํƒœ ๋ฉ”์‹œ์ง€
โ—ฆ
ํ—ค๋”: Content-Type, Set-Cookie, Cache-Control ๋“ฑ
โ—ฆ
๋ฐ”๋””: ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „๋‹ฌํ•  ์‹ค์ œ ๋ฐ์ดํ„ฐ (HTML, JSON ๋“ฑ)
โ€ข
๋ฐ์ดํ„ฐ ์ „์†ก ๋ฐฉ์‹
โ—ฆ
GET ๋ฐฉ์‹: (์กฐํšŒ์šฉ) URL ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ™์—ฌ์„œ ์ „์†กํ•˜๋Š” ๋ฐฉ์‹
โ–ช
URL์— ์ฟผ๋ฆฌ์ŠคํŠธ๋ง์œผ๋กœ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ (์˜ˆ: ?name=ํ™๊ธธ๋™&age=25)
โ—ฆ
POST ๋ฐฉ์‹: (๋“ฑ๋ก์šฉ) ์š”์ฒญ ๋ณธ๋ฌธ(Body) ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์•„ ์ „์†กํ•˜๋Š” ๋ฐฉ์‹
โ–ช
HTTP ๋ฐ”๋””์— ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์•„ ์ „์†ก (๋ณด์•ˆ์„ฑ ๋†’์Œ)
โ—ฆ
๋ฐ์ดํ„ฐ ํ˜•์‹: application/x-www-form-urlencoded, multipart/form-data, application/json ๋“ฑ

Servlet

HttpServlet ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์•„ HTTP ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์ž๋ฐ” ํด๋ž˜์Šค
์–ด๋””๋กœ ์š”์ฒญ์ด ์™”๋Š”์ง€, ์–ด๋–ป๊ฒŒ ์š”์ฒญ์ด ์™”๋Š”์ง€, ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‘๋‹ตํ• ์ง€ ์ •์˜ํ•˜๋Š” ํด๋ž˜์Šค
โ€ข
์ž๋ฐ” ๊ธฐ๋ฐ˜์˜ ์›น ์š”์ฒญ/์‘๋‹ต์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํด๋ž˜์Šค
โ€ข
HTTP ์š”์ฒญ์„ ๋ฐ›๊ณ , ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•œ ํ›„ ์‘๋‹ต์„ ๋ฐ˜ํ™˜
โ€ข
doGet(), doPost() ๋“ฑ ๋ฉ”์„œ๋“œ๋กœ HTTP ๋ฉ”์„œ๋“œ ์ฒ˜๋ฆฌ
@WebServlet("/hello") public class HelloServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.getWriter().write("Hello, Servlet!"); } }
Java
๋ณต์‚ฌ

JSP (JavaServer Pages)

HTML + Java
HTML ์•ˆ์— ์ž๋ฐ” ์ฝ”๋“œ๋ฅผ ์‚ฝ์ž…ํ•˜์—ฌ ๋™์  ์›น ํŽ˜์ด์ง€๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ธฐ์ˆ 
โ€ข
HTML์— ์ž๋ฐ” ์ฝ”๋“œ๋ฅผ ์‚ฝ์ž…ํ•˜์—ฌ ๋™์ ์ธ ์›น ํŽ˜์ด์ง€ ์ƒ์„ฑ
โ€ข
JSP ํŒŒ์ผ์€ ์ตœ์ดˆ ์š”์ฒญ ์‹œ ์„œ๋ธ”๋ฆฟ ์ฝ”๋“œ๋กœ ์ž๋™ ๋ณ€ํ™˜๋˜๊ณ  ์ปดํŒŒ์ผ๋จ
โ€ข
์ดํ›„ ์š”์ฒญ๋ถ€ํ„ฐ๋Š” ์ปดํŒŒ์ผ๋œ ์„œ๋ธ”๋ฆฟ์„ ์žฌ์‚ฌ์šฉํ•˜์—ฌ ๋น ๋ฅด๊ฒŒ ์‘๋‹ต
โ€ข
๋ทฐ(View) = ํ™”๋ฉด ์—ญํ• ๋กœ ์‚ฌ์šฉ
<%@ page language="java" %> <html> <body> <h1>Hello, <%= request.getParameter("name") %></h1> </body> </html>
HTML
๋ณต์‚ฌ

JSTL (JSP Standard Tag Library)

JSP ์—์„œ ํƒœ๊ทธ ํ˜•์‹์œผ๋กœ ์กฐ๊ฑด๋ฌธ, ๋ฐ˜๋ณต๋ฌธ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <c:forEach var="item" items="${list}"> <p>${item}</p> </c:forEach>
HTML
๋ณต์‚ฌ
<c:if test="${age >= 20}"> <p>์„ฑ์ธ์ž…๋‹ˆ๋‹ค.</p> </c:if>
HTML
๋ณต์‚ฌ

EL (Expression Language)

JSP ์—์„œ ${ } ๊ธฐํ˜ธ๋กœ ์ž๋ฐ” ๊ฐ์ฒด ๋ฐ ๋ณ€์ˆ˜๋ฅผ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•˜๋„๋ก ๋งŒ๋“  ํ‘œํ˜„์‹
โ€ข
ํ‘œํ˜„์‹ <%= %>, ์Šคํฌ๋ฆฝํ‹€๋ฆฟ <% %> ๋“ฑ์œผ๋กœ ๋ณต์žกํ•˜๊ฒŒ ์ผ๋˜ ์ž๋ฐ” ์ฝ”๋“œ๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Œ.

Filter

์„œ๋ธ”๋ฆฟ์ด๋‚˜ JSP ์‹คํ–‰ ์ „ํ›„์— ์š”์ฒญ์„ ๊ฐ€๋กœ์ฑ„์„œ ๊ณตํ†ต ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋„๊ตฌ
โ€ข
ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์ด ์„œ๋ธ”๋ฆฟ์ด๋‚˜ JSP์— ๋„๋‹ฌํ•˜๊ธฐ ์ „/ํ›„์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ปดํฌ๋„ŒํŠธ
โ€ข
๋กœ๊ทธ์ธ ์ฒดํฌ, ์ธ์ฝ”๋”ฉ ์ฒ˜๋ฆฌ, ๋กœ๊น… ๋“ฑ์— ์‚ฌ์šฉ
@WebFilter("/secure/*") public class AuthFilter implements Filter { public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) req; if (request.getSession().getAttribute("user") == null) { ((HttpServletResponse) res).sendRedirect("/login.jsp"); } else { chain.doFilter(req, res); // ๊ณ„์† ์ง„ํ–‰ } } }
Java
๋ณต์‚ฌ

Session

์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด, ์„œ๋ฒ„์— ๊ธฐ์–ตํ•˜๋Š” ์ƒํƒœ ์ •๋ณด
โ€ข
JSESSIONID ์ฟ ํ‚ค๋กœ ์‚ฌ์šฉ์ž๋ฅผ ์‹๋ณ„

Cookie

์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด, ํด๋ผ์ด์–ธํŠธ์— ์ €์žฅ๋˜๋Š” ์ž‘์€ ๋ฐ์ดํ„ฐ

Listener

์›น ์•ฑ์—์„œ ํŠน์ • ์ด๋ฒคํŠธ(์„ธ์…˜ ์ƒ์„ฑ, ์ข…๋ฃŒ ๋“ฑ)๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ž๋™์œผ๋กœ ์‹คํ–‰๋˜๋Š” ๊ฐ์‹œ์ž
โ€ข
์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ด๋ฒคํŠธ(์ƒ๋ช…์ฃผ๊ธฐ, ์„ธ์…˜, ์š”์ฒญ ๋“ฑ)๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  ์ฒ˜๋ฆฌํ•˜๋Š” ๊ตฌ์„ฑ ์š”์†Œ
โ€ข
์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์ฒ˜๋ฆฌ (์˜ˆ: ์„ธ์…˜ ์ƒ์„ฑ/์†Œ๋ฉธ ๊ฐ์ง€, ์ปจํ…์ŠคํŠธ ์ดˆ๊ธฐํ™” ๋“ฑ)

์˜ˆ: ์„ธ์…˜ ์ƒ์„ฑ/์†Œ๋ฉธ ๊ฐ์ง€

@WebListener public class SessionListener implements HttpSessionListener { public void sessionCreated(HttpSessionEvent se) { System.out.println("์„ธ์…˜ ์ƒ์„ฑ: " + se.getSession().getId()); } public void sessionDestroyed(HttpSessionEvent se) { System.out.println("์„ธ์…˜ ์ข…๋ฃŒ: " + se.getSession().getId()); } }
Java
๋ณต์‚ฌ

MVC (Model View Contrller)

์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ชจ๋ธ, ๋ทฐ, ์ปจํŠธ๋กค๋Ÿฌ ์—ญํ• ๋กœ ๋‚˜๋ˆ„์–ด์„œ ๊ฐœ๋ฐœํ•˜๋Š” ๊ตฌ์กฐ
โ€ข
๋ชจ๋ธ : ๋ฐ์ดํ„ฐ์™€ ๋กœ์ง์„ ๋‹ด๋‹นํ•˜๋Š” ์—ญํ•  (Java : Service, DTO, DAO)
โ€ข
๋ทฐ : ํ™”๋ฉด์„ ๋‹ด๋‹นํ•˜๋Š” ์—ญํ•  (JSP)
โ€ข
์ปจํŠธ๋กค๋Ÿฌ : ํ๋ฆ„์„ ์ œ์–ดํ•˜๋Š” ์—ญํ•  (Servlet)
MVC ๋™์ž‘ ํ๋ฆ„
1.
ํด๋ผ์ด์–ธํŠธ๊ฐ€ Controller(Servlet) ์— ์š”์ฒญ
2.
Controller ๋Š” ์š”์ฒญ์„ ๋ถ„์„ํ•˜๊ณ  Model ํ˜ธ์ถœ
3.
Model ์ด DB ์ฒ˜๋ฆฌ ํ›„ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜
4.
Controller ๋Š” ๊ฒฐ๊ณผ๋ฅผ request(์š”์ฒญ ๊ฐ์ฒด)์— ๋‹ด๊ณ  View(JSP) ๋กœ ์ „๋‹ฌ
5.
View(JSP) ๊ฐ€ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ํ™”๋ฉด์„ ์ถœ๋ ฅ

๊ทธ ์™ธ ๊ธฐ์ˆ  ์š”์†Œ (JSP ๊ธฐ๋ฐ˜ ๊ฐœ๋ฐœ ์‹œ ์ž์ฃผ ๋“ฑ์žฅ)

๊ธฐ์ˆ  ์š”์†Œ
์„ค๋ช…
EL(Expression Language)
${user.name} ํ˜•ํƒœ๋กœ ์ž๋ฐ” ๊ฐ์ฒด์˜ ์†์„ฑ ์ ‘๊ทผ
JSTL (JSP Standard Tag Library)
<c:forEach>, <c:if> ๋“ฑ ๋ฐ˜๋ณต, ์กฐ๊ฑด ํ‘œํ˜„์„ ํƒœ๊ทธ๋กœ ์ฒ˜๋ฆฌ
Web.xml
์„œ๋ธ”๋ฆฟ/ํ•„ํ„ฐ/๋ฆฌ์Šค๋„ˆ ๋“ฑ์„ ๋“ฑ๋กํ•˜๋Š” ์„ค์ • ํŒŒ์ผ
RequestDispatcher
JSP ๋˜๋Š” ๋‹ค๋ฅธ ์„œ๋ธ”๋ฆฟ์œผ๋กœ ์š”์ฒญ ์ „๋‹ฌ (forward, include)
Cookie, Session API
์‚ฌ์šฉ์ž ์ƒํƒœ ๊ด€๋ฆฌ (๋กœ๊ทธ์ธ ์ƒํƒœ ๋“ฑ)

์š”์•ฝ

๋ถ„๋ฅ˜
์—ญํ• 
Servlet
์š”์ฒญ ์ฒ˜๋ฆฌ ๋กœ์ง (์ปจํŠธ๋กค๋Ÿฌ)
JSP
ํ™”๋ฉด ์ถœ๋ ฅ (๋ทฐ)
Filter
์š”์ฒญ/์‘๋‹ต ์ „ํ›„์— ๊ฐ€๋กœ์ฑ„์„œ ๋กœ์ง ์‚ฝ์ž…
Listener
์ƒ๋ช…์ฃผ๊ธฐ๋‚˜ ์ด๋ฒคํŠธ ๊ฐ์ง€ ๋ฐ ์ฒ˜๋ฆฌ