๐ปServlet + JSP
์๋ฐ์์ ์น ์ดํ๋ฆฌ์ผ์ด์ ์ ์์ฑํ๊ธฐ ์ํ ๊ธฐ์ ๋ก Servlet๊ณผ JSP๊ฐ ์๋ค.
์ด ๋์ ์ฅ๋จ์ , ๊ทธ๋ฆฌ๊ณ ์ด ๋์ ๊ฐ์ด ์ฌ์ฉํ์ ๋์ ์ฅ์ ์ ์๋์ ๊ฐ๋ค.
1. Servlet
- ์ฅ์ : ์๋ฐ๊ธฐ๋ฐ์ผ๋ก ์๋ฐ ์ฝ๋ ์์ฑ์ด ์ฉ์ดํ๋ค
- ๋จ์ : ํด๋ผ์ด์ธํธ ์ฝ๋ ์์ฑ์ด ๋ถํธํ๋ค.
2. JSP
- ์ฅ์ : ํด๋ผ์ด์ธํธ ์ฝ๋ ์์ฑ์ด ์ฉ์ดํ๋ค.
- ๋จ์ : ์๋ฐ ์ฝ๋ ์์ฑ์ด ๋ถํธํ๋ค.
3. Servlet + JSP
- Servlet์ ์ฅ์ ๊ณผ JSP์ ์ฅ์ ์ ํฉ์ณค๋ค.
- ์๋ฐ์ฝ๋๋ ์๋ธ๋ฆฟ์์ ์์ฑํ๊ณ ํด๋ผ์ด์ธํธ ์ฝ๋๋ JSP์ฝ๋์์ ์์ฑํ๋ค.
- MVC ๋์์ธ ํจํด์ผ๋ก ํตํฉ๊ด๋ฆฌ๋ฅผ ํ๋ค.
- ์์๋ ๋ฌด์กฐ๊ฑด servlet์ด ๋จผ์ ์คํํ๋ค.
- ๊ทธ ์ด์ ๋ ๊ฑฐ์ ๋๋ถ๋ถ์ JSP ์ฝ๋๋ฅผ ๋ณด๋ฉด ์๋จ์ <%%>๋ก ์๋ฐ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ๊ทธ ์ค์ ์ผ๋ถ๋ ์คํ๋จ์ HTML ์ฝ๋๋ฅผ ์์ฑํ๋ค.
- ์๋ธ๋ฆฟ ์ฝ๋๋ฅผ ๋จผ์ ์คํํ์ฌ ์๋ฐ์ฝ๋๋ฅผ ์ํํ๊ณ ํ๋ฉด์ ์ถ๋ ฅํด์ผํ๋ ๋ฐ์ดํฐ๋ฅผ JSP๊ฐ ๋ฐ์ HTML๋ฅผ ์์ฑ์ํจ๋ค.
๐ปMVC ๋์์ธ ํจํด
ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ์์ณฅ์ ํ๋ฉด ์๋ฒ์ชฝ์ ๋ด๋น ์ ๋ฌด(์ญํ )์ ๋ฐ๋ผ Controller, View, Model ์ด๋ผ๋ 3๊ฐ์ ๊ณ์ธต์ผ๋ก ๋๋ ์ ธ์๋ค.
Controller / ์๋ธ๋ฆฟ : ์์ฒญ์์๋ถํฐ ์๋ต๊น์ง ์ ์ฒด๋ฅผ ๊ด๋ฆฌํ๋ค.
View / JSP : ์ถ๋ ฅ๋ด๋น, HTML ํ์ด์ง๋ฅผ ์์ฐํ๋ค.
Model / ์๋ฐ : ์ค๋ผํด DB(๋ฐ์ดํฐ) ์ฒ๋ฆฌํ๋ค.
์ฌ์ฉ์๊ฐ ์๋ฒ์ ์์ฒญ์ ํ๋ฉด Controller๋ ๊ทธ ์์ฒญ์ ๋ฐ์ Model์๊ฒ DB ์์ ์ ๋งก๊ธด๋ค. Model๋ ์ ๋ฌด๋ฅผ ์ฒ๋ฆฌํ์ฌ Controller์๊ฒ ๋ฐํํ๋ค. ๋๋ ค๋ฐ์ ๋ฐ์ดํฐ๋ฅผ Viewํํ ๋๊ฒจ์ฃผ๋ฉด์ ํ์ด์ง๋ฅผ ๋ง๋ค๋ผ๊ณ ์ํจ๋ค. View๊ฐ ํ์ด์ง๋ฅผ ๋ง๋ค๋ฉด ๋ค์ Controller์๊ฒ ๋ฐํํ์ฌ Controller๋ ์ฌ์ฉ์์๊ฒ ๋ฐํํ๋ค.
MVC ์ํคํ ์ฒ๋ฅผ ์ ์ฉํ๋ ๋ฐฉ๋ฒ์๋ JSP ๋ชจ๋ธ1๊ณผ JSP ๋ชจ๋ธ2 ๋ ๊ฐ์ง๊ฐ ์๋ค.
JSP Model 1
์๋ฐ ์ฝ๋์ ํด๋ผ์ด์ธํธ ์ฝ๋๋ฅผ ํ ์ฅ์ JSP ํ์ด์ง์ ํฌํจ์ํค๋ ๋ฐฉ์์ผ๋ก ๋์ํ๋ค. ์ฆ, ๋ฐ์ดํฐ ์ฒ๋ฆฌ, ํ๋ฉด ํํ, ์ฌ์ฉ์ ์
๋ ฅ ์ฒ๋ฆฌ ๋ฑ์ด ๋ชจ๋ ํ๋์ JSP ํ์ผ์์ ์ด๋ฃจ์ด์ง๋๋ค.
์ฅ์ ์ผ๋ก ๊ฐ๋จํ๊ณ ๋น ๋ฅด๊ฒ ๊ตฌํํ ์ ์์ผ๋ฉฐ, ์์ ๊ท๋ชจ์ ํ๋ก์ ํธ๋ ํ์ต์ฉ์ผ๋ก ์ ํฉํ๋ค.
๋จ์ ์ผ๋ก๋ ์ฝ๋์ ์ ์ง๋ณด์๊ฐ ์ด๋ ต๊ณ , ํ์ฅ์ฑ์ด ๋จ์ด์ง๋ค.
JSP Model 2
MVC ์ํคํ
์ฒ๋ฅผ ์๊ฒฉํ ๋ฐ๋ฅด๋ฉฐ, ๊ฐ๊ฐ์ ์ญํ ์ ํด๋นํ๋ ์ฝ๋๋ฅผ ๋ถ๋ฆฌํ์ฌ ์์ฑํ๋ค. ์ฆ, ๋ชจ๋ธ์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ, ๋ทฐ๋ ํ๋ฉด ํํ์, ์ปจํธ๋กค๋ฌ๋ ์ฌ์ฉ์ ์
๋ ฅ์ ์ฒ๋ฆฌํ๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ชจ๋ธ์ด๋ ๋ทฐ์ ๋ฐ์ํ๋ค.
์ฅ์ ์ผ๋ก๋ ์ฝ๋์ ๊ฐ๋
์ฑ๊ณผ ์ ์ง๋ณด์๊ฐ ์ฉ์ดํ๋ฉฐ, ๋๊ท๋ชจ ํ๋ก์ ํธ์ ์ ํฉํ์ฌ ๋ค์์ ๊ฐ๋ฐ์๋ค์ด ํ์
ํ ๋ ์ฌ์ฉํ๋ค.
๋จ์ ์ผ๋ก๋ ์ด๊ธฐ ๊ตฌ์ฑ์ด ๋ณต์กํ ์ ์๊ณ , ๊ฐ ์์๋ฅผ ๋ถ๋ฆฌํ์ฌ ์์ฑํด์ผ ํ๋ฏ๋ก ์ผ๋ถ๋ถ์ด๋ ์ ์ฒด๋ฅผ ๊ฐ๋ฐํ๋ ๋ฐ ์๊ฐ์ด ๋ ์์๋ ์ ์๋ค.
๐ปMVC ๋์์ธ ํจํด์ผ๋ก ๊ตฌ์ฑํ๊ธฐ
WEB-INF ํด๋
webapp์ ์๋ hello.jsp๋ฅผ webapp ํ์ ํด๋ WEB-INF๋ก ์ฎ๊ธฐ๋ฉด ์ด๋ป๊ฒ ๋ ๊น?
์์ ํ์ด์ง ์กด์ฌ๋ฅผ ์ฐพ์ ์ ์๋ค.
์ด๋ฐ ์๋ฌ๊ฐ ๋ ๊ฒ์ WEB-INF ํด๋์ ํน์ฑ๋๋ฌธ์ด๋ค.
๋ด๋ถ ์์คํ ์์์ ๊ด๋ฆฌํ๋ ๋ณด์ ํด๋๋ก์จ ๋ธ๋ผ์ฐ์ ์์ ์ง์ ์ ๊ทผ์ด ๋ถ๊ฐ๋ฅํ๋ค. ํด๋น ์ฝ๋๋ ์๋ธ๋ฆฟ์์ ์ ๊ทผ ๊ฐ๋ฅํ๋ฐ ์ด๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ฑ ์์๋ค์ ์์ ํ๊ฒ ๊ด๋ฆฌํ ์ ์๋๋ก ํ๋ค.
jsp๋ ํด๋ผ์ด์ธํธ ์ฝ๋๋ฅผ ๋ด๋นํ๋ ๋ถ์์ ํ ํ์ด์ง์ด๊ธฐ ๋๋ฌธ์, ์ง์ ์ ์ผ๋ก ๋ธ๋ผ์ฐ์ ์์ ํธ์ถ๋์ง ์๋๋ก WEB-INF ํด๋์ ๋ฃ์ด์ค๋ค. ์ผ๋ฐ์ ์ผ๋ก๋ jsp ํ์ผ์ ๊ด๋ฆฌํ๊ธฐ ์ํด views์ ๊ฐ์ ์ด๋ฆ์ ํด๋๋ฅผ WEB-INF ํ์์ ์์ฑํ์ฌ ์ฌ์ฉํ๋ค.
์๋ธ๋ฆฟ์์ jsp ํธ์ถํ๊ธฐ
๊ทธ๋ ๋ค๋ฉด ์๋ธ๋ฆฟ์์ ์๋ฐ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ์ด๋ป๊ฒ jsp๋ฅผ ํธ์ถํ ๊น?
์๋ธ๋ฆฟ์ 'RequestDispatcher' ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ jsp๋ฅผ ํธ์ถํ๋ค.
RequestDispatcher๋ ์๋ธ๋ฆฟ์์ ๋ค๋ฅธ ๋ฆฌ์์ค๋ก ์์ฒญ์ ์ ๋ฌํ๊ฑฐ๋ ํฌ์๋ฉํ ๋ ์ฌ์ฉํ๋ ์ธํฐํ์ด์ค์ด๋ค.
์๋ฐ ์ฝ๋ ์์ ๊ฒฐ๊ณผ ์ ๋ฌ
int count = 100;
req.setAttribute("count", count);
์๋ธ๋ฆฟ์์ DB ์์ ๋๋ ๋ค๋ฅธ ์์ ์ ๊ฒฐ๊ณผ๋ฌผ์ ํ์ด์ง๋ผ๋ฆฌ ๊ณต์ ๋ฅผ ํ๊ธฐ ์ํด HttpServletRequest ๊ฐ์ฒด์ setAttribute๋ก ๊ฐ์ jsp์ ์ ๋ฌํ๋ค.
๊ฐ์ฒด๋ฅผ ์ ์ธํ๋ ๋ฐฉ๋ฒ
RequestDispatcher dispatcher = req.getRequestDispatcher("/WEB-INF/views/hello.jsp");
getRequestDispatcher(String path): ํ์ฌ ์ปจํ ์คํธ ๋ด์์ ์ง์ ๋ ๊ฒฝ๋ก์ ๋ํ RequestDispatcher๋ฅผ ๋ฐํํ๋ค. ๊ฒฝ๋ก๋ ์ปจํ ์คํธ ๋ฃจํธ๋ถํฐ์ ์๋ ๊ฒฝ๋ก๋๋ ์ ๋ ๊ฒฝ๋ก๋ก ์ ๋ ฅํ๋ค. ๋ฌด์กฐ๊ฑด '/'๋ถํฐ ์์ํ๋ฉฐ '/'๋ webapp๋ฅผ ์๋ฏธํ๋ค.
ํฌ์๋ฉํ๋ ๋ฐฉ๋ฒ
RequestDispatcher dispatcher = req.getRequestDispatcher("/WEB-INF/views/hello.jsp");
forward(ServletRequest request, ServletResponse response) : ํ์ฌ ์์ฒญ์ ๋ค๋ฅธ ์๋ธ๋ฆฟ์ด๋ JSP๋ก ์ ๋ฌํ์ฌ ์ดํ์ ์ฒ๋ฆฌ๋ ์ ๋ฌ๋ ์๋ธ๋ฆฟ์ด๋ JSP์์ ์ด์ด์ง๋๋ก ํ๋ค.
์๋ธ๋ฆฟ ์ฝ๋
Hello.java
package com.test.mvc;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Hello extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setAttribute("count", count);
RequestDispatcher dispatcher = req.getRequestDispatcher("/WEB-INF/views/helo.jsp");
dispatcher.forward(req, resp);
}
}
jsp ๋ฐ์ดํฐ ์์ ํ๊ธฐ
jsp๋ ์๋ธ๋ฆฟ์์ ๋์ด์จ ๋ฐ์ดํฐ๋ฅผ request.getAttribute ๋ก ์์ ํ๋ค.
์์ ํ ๊ฐ์ ํ์ด์ง๋ก ์ถ๋ ฅํ์ฌ view์ ์ญํ ์ ํ๋ค.
hello.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>hello.jsp</title>
<link rel="stylesheet" href="http://pinnpublic.dothome.co.kr/cdn/example-min.css">
<style>
</style>
</head>
<body>
<h1>Hello</h1>
<div>count: <%= request.getAttribute("count") %></div>
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="http://pinnpublic.dothome.co.kr/cdn/example-min.js"></script>
<script>
</script>
</body>
</html>
์๋ธ๋ฆฟ ์ฃผ์ / JSP ์ฃผ์๋ฅผ ํ๋ ธ์ ๋
์๋ธ๋ฆฟ ์ฃผ์ ํ๋ ธ์ ๋
์ฃผ์์ฐฝ์ ์ฃผ์๋ฅผ ๋ค์ ํ์ธํ๋ค.
JSP ์ฃผ์๋ฅผ ํ๋ ธ์ ๋
์๋ธ๋ฆฟ์ RequestDispatcher ๊ฒฝ๋ก๋ฅผ ํ์ธํ๋ค.
'SERVER(Servlet, JSP)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Server] ๋ฉ๋ชจ project : ๋ฉ๋ชจ CRUD (0) | 2023.10.24 |
---|---|
[JDBC] DB ์ฐ๊ฒฐํ ๋ ์์ฃผ ๋ฐ์ํ๋ ์ค๋ฅ ๋ฐ ํด๊ฒฐ ๋ฐฉ๋ฒ (0) | 2023.10.22 |
[JSP] ํ์ด์ง ์ด๋๊ณผ ๋ด์ฅ ๊ฐ์ฒด ์ ์ฅ์์ ์๋ช ์ฃผ๊ธฐ(โ ) (0) | 2023.10.19 |
[JSP] ์ด๋ฏธ์ง ๋ทฐ์ด(์ ๋ก๋ ๋ฐ ์ญ์ ์ฒ๋ฆฌ) (0) | 2023.10.18 |
[JSP] cos library๋ฅผ ํ์ฉํ ํ์ผ ์ ๋ก๋/๋ค์ด๋ก๋ (0) | 2023.10.18 |