-
ํด๋ผ์ด์ธํธ-์๋ฒ ๊ตฌ์กฐ์ ์๋ธ๋ฆฟ ServletJAVA 2020. 9. 18. 23:59
๐ฏ ์น์๋น์ค์ ์๋์๋ฆฌ์ MVC ํจํด์์ ์๋ธ๋ฆฟ์ ์ญํ ๊ณผ ํน์ง์ ์์๋ณธ๋ค.
ํด๋ผ์ด์ธํธ - ์๋ฒ ๊ตฌ์กฐ
์ฌ์ฉ์(Client)๊ฐ ์น ๋ธ๋ผ์ฐ์ ์์ url ์ฃผ์๋ฅผ ์ ๋ ฅํ๋ฉด ์๋ฒ(Server)์ ํ์ด์ง๋ฅผ ์์ฒญ(Request)ํ๊ฒ ๋๋ค. ์๋ฒ๋ ์ฌ์ฉ์๊ฐ ์์ฒญํ HTML, JSP, ์๋ธ๋ฆฟ ํ์ผ์ ๊ฒ์ํด์ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์๋ต(Response)ํ๋ค. ์๋ฒ์ ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญํ ํ์ผ์ด ์์ ๊ฒฝ์ฐ 404 Not Found ์๋ฌ๋ฅผ ํ์ํ๋ค.
URL ๊ตฌ์กฐ
URL(Uniform Resource Locator)์ด๋ ์น ์๋ฒ๊ฐ ์ธํฐ๋ท์ ์กด์ฌํ๋ ์์์ ๊ฒ์ํ๊ณ ํด์ํ๋๋ฐ ํ์ํ ๋คํธ์ํฌ ์๋น์ค์ ํํ์์ ์๋ฏธํ๋ค.
์ฃผ์์ฐฝ์
www.naver.com
๋ง ์ ๋ ฅํด๋ ๋ค์ ์ด๋ฐ ๊ตฌ์กฐ๊ฐ ๋ง๋ค์ด์ง๋ค. ์ฃผ์์ฐฝ์์ ์ํฐ์น๋ ์๊ฐ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋น์คํ๋ ์๋ฒ์ ์ปดํจํฐ ์ฃผ์(IP ๋๋ ๋๋ฉ์ธ์ฃผ์)๋ก ์ฐพ์๊ฐ๊ณ , ํฌํธ๋ฒํธ๋ก ์น์๋ฒ๋ฅผ ์ฐพ์ ๋ค index.htmlํ์ผ์ ๋ฌ๋ผ๊ณ ์์ฒญํ๊ฒ ๋๋ค.index.html์ ์๋ฒ๊ฐ ์๋น์คํ๋ ์์ ์ ๋ณด(URI)๋ฅผ ์๋ฏธํ๋ฉฐ ์๋ฒ๋ ํด๋น ํ์ผ์ ๊ฐ๊ณ ์์ด์ผ ํ๊ณ ์ด๊ฑธ ์ฐพ์์ ์ฌ์ฉ์์๊ฒ ์๋ตํ๋ค. ์ฌ์ฉ์ ๋ธ๋ผ์ฐ์ ์์ ์๋ต์ ๋ณด๋ด๋ฉด ์ด์ ํ๋์ ์์ฒญ๊ณผ ์๋ต ์ฒ๋ฆฌ๊ฐ ๋๋๋ค.
HTTP ํ๋กํ ์ฝ
ํด๋ผ์ด์ธํธ์ ์๋ฒ์ ํต์ ๊ท์ฝ์ ์๋ฏธํ๋ค.
ํน์ง 1. ๋ฌด์ฐ๊ฒฐ ํต์ ๋ฐฉ์
TCPํต์ ํ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์๋ฒ๊ฐ ์๋ตํ๋ฉด TCP ์ฐ๊ฒฐ์ ๋์ด๋ฒ๋ฆฐ๋ค. ํ๋์ ์์ฒญ์ ๋ํ ํ๋์ ์๋ต์ด ์ฒ๋ฆฌ๋๊ณ ๋๋ฉด ์ฐ๊ฒฐ์ด ๋์ด์ง๋ค. ์ด๊ฒ ์ปค๋ฅ์ ๋ฆฌ์ค ๋ฐฉ์์ด๋ค.
ํน์ง 2. ๋ฌด์ํ ํต์ ๋ฐฉ์
์์ฒญํ ๋๋ง๋ค ์๋ก ๋ค๋ฅธ ์ฐ๊ฒฐ๋ก ์ธ์๋์ด์ ์์ฒญ ๊ฐ ์ํ์ ๋ณด๊ฐ ์ ์ง๋์ง ์๋ ํน์ฑ์ด ์๋ค.
์ฃผ์์ฐฝ์ url์ ์ ๋ ฅํ๊ณ ์์ฒญ์ ๋ณด๋ด๋ฉด ์ธํฐ๋ท์ฐฝ ๋ฐ์ ์ด๋ฐ ๋ฌธ๊ตฌ๊ฐ ์ ๊น ๋จ๊ณ ์ฌ๋ผ์ง๋ค. ์๋ต์ฒ๋ฆฌํ๊ณ ์ฐ๊ฒฐ์ ๋๋ด๋ ๋ชจ์ต์ด๋ค.
HTTP Request ์์ฒญ์ ๋ณด
ํด๋ผ์ด์ธํธ๊ฐ ์น ๋ธ๋ผ์ฐ์ ์์ URL์ ์ ๋ ฅํ๊ฑฐ๋ ์ด๋ค ๋งํฌ๋ฅผ ๋๋ฌ์ ์ํ๋ ์๋น์ค๋ฅผ ์์ฒญํ๋ฉด ์์ฒญ์ ๋ณด๊ฐ ๋ฐ์๋์ด ์๋ฒ์ ์ ๋ฌ๋๋ค.
์์ฒญ ๋ผ์ธ : ์์ฒญ๋ฐฉ์ ๋ฐ ์์ฒญ url๊ณผ HTTP ๋ฒ์ ์ ๋ณด๋ฅผ ๊ฐ๋๋ค.
์์ฒญ ํค๋ : ์น๋ธ๋ผ์ฐ์ ์ ๋ณด, ์ธ์ด, ์ธ์ฝ๋ฉ๋ฐฉ์, ์์ฒญ ์๋ฒ ์ ๋ณด ๋ฑ๊ณผ ๊ฐ์ ์ถ๊ฐ ์ ๋ณด๋ฅผ ๊ฐ๋๋ค.
์์ฒญ ๋ณธ์ฒด : ์์ฒญ์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๋๋ค. ํผํ๊ทธ ์์ ์ ๋ ฅ๋ ๊ฐ๋ค์ธ ํ๋ผ๋ฏธํฐ ์ ๋ณด๋ฅผ ์๋ฏธํ๋ค.
HTTP method ์์ฒญ๋ฐฉ์
method๋ ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ์์ฒญ์ ํ๋ ๋์ ๋ฐฉ์์ ์๋ฏธํ๋ค. GET, POST, PUT, DELETE ๋ฑ์ด ์๋ค.
get๋ฐฉ์
http://127.0.0.1:5500/target.html?userid=๊น๊ธธ๋&passwd=1111
์ผ๋ฐ์ ์ผ๋ก ์ฃผ์๋ฅผ ์ ๋ ฅํ๊ฑฐ๋ ํ์ดํผ๋งํฌ๊ฐ ํฌํจ๋ ๊ฐ์ฒด๋ฅผ ํด๋ฆญํ๋ ๋ฐฉ์์ด๋ค. ์์ฒญํค๋๋ก ์ ์ก๋๋ฉฐ ๋ฌธ์์ด ์ ๋ณด๋ฅผ ํจ๊ป ์์ฒญํ๋ ๊ฒฝ์ฐ URI ๋ค์ '?'๋ฌผ์ํ ๊ธฐํธ๋ฅผ ๋ถ์ด๊ณ ๋ฌธ์์ด ์ ๋ณด๋ฅผ ๋ถ์ฌ์ ์ ์กํ๋ค. ๋ง์ฝ ์ด ๋ฌธ์์ด์ด ์ค์ํ ์ ๋ณด๋ฅผ ๋ด๊ณ ์์ ๊ฒฝ์ฐ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ๋ ธ์ถ๋๊ธฐ ๋๋ฌธ์ ์ํํ๋ค. ๋ฐ๋ผ์ ๋ฐ์ดํฐ๋ฅผ ๋จ์ํ๊ฒ ๋น ๋ฅธ ์๋๋ก ์์ฒญํ ๋ ์ฌ์ฉํ๋ค.
post ๋ฐฉ์
http://127.0.0.1:5500/01form.html
๋ฐ์ดํฐ๋ฅผ ์์ฒญ ๋ฐ๋์ ์จ๊ฒจ์ ์๋ณด์ด๊ฒ ์ ์กํ๋ ๋ฐฉ๋ฒ์ด๋ค. ๋ฐ๋ผ์ ์ค์ํ ์ ๋ณด๋ POST๋ฐฉ์์ผ๋ก ์ ์กํ๋ค. ๊ทธ๋ฐ๋ฐ ์ด ๋ฐฉ์์ body์ ์จ๊ธฐ๋ฉด์ ์ธ์ฝ๋ฉ์ ํด๋ฒ๋ฆฌ๊ธฐ ๋๋ฌธ์ ์๋ฒ์์ ์ฌ์ฉ ์ ๋์ฝ๋ฉ ์ฒ๋ฆฌ๋ฅผ ํด์ผํ๋ฏ๋ก ๋ฒ๊ฑฐ๋ก์ ์๊ณ ์๋์ ์ผ๋ก ์๋๊ฐ ๋๋ฆฌ๋ค.
HTTP Response ์๋ต์ ๋ณด
์๋ต์ ๋ณด์ ์ํ ๋ผ์ธ์ HTTP ๋ฒ์ , ์ํ์ฝ๋, ์ํ์ฝ๋ ์ค๋ช ์ ๋ด๊ณ ์๋ค. ์์ฒญ ์ฒ๋ฆฌ๋ฅผ ์ฑ๊ณตํ ๊ฒฝ์ฐ ์ํ์ฝ๋ 200์, ์๋ฒ๊ฐ ์์ฒญ URI๋ฅผ ์ฐพ์ง ๋ชปํ ๊ฒฝ์ฐ 404๋ฅผ, ์๋ฒ ํ๋ก๊ทธ๋จ์ ์คํ ์ค๋ฅ๋ 500์ ๋ํ๋ธ๋ค.
์น ์ปดํฌ๋ํธ( Web Component )
1) HTML ์ปดํฌ๋ํธ ( ์ ์ :static )
2) JSP ์ปดํฌ๋ํธ ( ๋์ : dynamic )
3) Servlet ์ปดํฌ๋ํธ (๋์ : dynamic )์น์ปจํ ์ด๋๊ฐ ์ดํด๋ฆฝ์ค์ ํฐ์บฃ ์ญํ ์ด๋ค. ์ฌ์ฉ์๊ฐ ์์ฒญํ ์ ๋ณด๋ฅผ ์ฐพ์์ ํด๋ผ์ด์ธํธ์๊ฒ ์ ์กํ๋ ์ญํ ์ ํ๋ค.
MVC ํจํด
์ ํ๋ฆฌ์ผ์ด์ ์ ์ธ ๊ฐ์ง ์์ญ์ผ๋ก ๊ตฌ๋ถํด ์์ ์ ๋ถ๋ฆฌํจ์ผ๋ก์จ ์๋ก๊ฐ์ ๊ฒฐํฉ๋ ์ต์ํํด ์ ์ง๋ณด์ ํจ๊ณผ๋ฅผ ๋์ธ๋ค.
๋ชจ๋ธ
์น ์ดํ๋ฆฌ์ผ์ด์ ์ ๋น์ฆ๋์ค ๋ก์ง์ ๋ด๋นํ๋ ๋ชจ๋๋ก์ ์ผ๋ฐ ์๋ฐ ํด๋์ค๋ก ๊ตฌํ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๋ ์ ํ์ํ dao, dtoํด๋์ค ํ์ผ๋ค์ ํด๋น๋๋ค. ์๋น์ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฒ๋ฆฌ๋ฅผ ๋ด๋นํ๋ค.
๋ทฐ
์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ง ํ๋ฉด ๊ตฌ์ฑ์ ๋ด๋นํ๋ฉฐ JSP๋ก ๊ตฌํ๋๋ค. ๋ชจ๋ธ์ ๋ฐ์ดํฐ๋ฅผ html๋ก ๋ณด์ฌ์ฃผ๊ฑฐ๋ ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ๋ ํ๋ฉด ๊ตฌ์ฑ์ ๋ด๋นํ๋ค.
์ปจํธ๋กค๋ฌ
๋ชจ๋ธ๊ณผ ๋ทฐ๋ฅผ ๊ด๋ฆฌํ๋ ์ญํ ์ด๋ฉฐ ์๋ธ๋ฆฟ์ผ๋ก ๊ตฌํํ๋ค. ์์ฒญ๋ค์์ ๋ณด์ฌ์ค ํ๋ฉด ์ ํ ์์ ์ด๋ ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ๋ฐ์ดํฐ ๊ฒ์ฆํ๊ฑฐ๋ ์ถ๋ ฅํ๋ ์์ ๋ฑ์ ๋ด๋นํ๋ค. ์ค์ ์๋ฐ์ฝ๋์ ๊ฑฐ์ ๋น์ทํ๋ค.
์๋ธ๋ฆฟ์ด๋?
- ์๋ฐ๊ธฐ๋ฐ์ ์น ์ปดํฌ๋ํธ๋ก์ java ํ์ฅ์๋ฅผ ๊ฐ๋๋ค.
- ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ํด์ ๋์ ์ผ๋ก ์คํ๋๋ค. ๋ฐ๋ผ์ ๋ค์ํ ํด๋ผ์ด์ธํธ ์๊ตฌ ์ฌํญ์ ์ฒ๋ฆฌํ ์ ์๋ค.
- ์๋ธ๋ฆฟ์ ๋ฐ๋์ ์น ์ปจํ ์ด๋์ ์ํด์ ๊ด๋ฆฌ๋๋ฉฐ, ์ค๋ ๋๋ก ๋์๋์ด ํจ์จ์ ์ธ ์์ฒญ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค.
- MVC ํจํด์ Controller ์ญํ ๋ก์ ์๋ธ๋ฆฟ์ด ์ฌ์ฉ๋๋ค.
์๋ธ๋ฆฟ ํ์ผ ๋ง๋ค๊ธฐ
์ Dynamic Web ํ๋ก์ ํธ๋ฅผ ์์ฑํ๋ค. ๋ง๋ค ๋ ๊ณ์ Next๋ฅผ ํด๋ฆญํ ๋ค web.xml ์์ฑ์ ์ฒดํฌํด์ผ ํ๋ค.
ํ๋ก์ ํธ์์ ์ค๋ฅธ์ชฝ๋ง์ฐ์ค๋ฅผ ํด๋ฆญํด ์๋ธ๋ฆฟ ํ์ผ์ ๋ง๋ ๋ค.
ํจํค์ง ๊ฒฝ๋ก์ ํด๋์ค ๋ค์์ ์ค์ ํ๋ค.
์ฌ์ฉ์ ์์ฒญ ์ฃผ์๋ฅผ ์์ ํ๊ฑฐ๋ ์ถ๊ฐํ ์ ์๋ค.
๋๊ฒ๊ณผ ๋ํฌ์คํธ ๋ฉ์๋ ๋๊ฐ๋ง ์ฃผ๋ก ์ฌ์ฉํ๋ค.
์๋ธ๋ฆฟ ํ์ผ์ด src ํด๋ ๋ฐ ํจํค์ง ์์ ์์ฑ๋์๋ค.
์๋ธ๋ฆฟ ์ฝ๋ ๋ณด๊ธฐ
@WebServlet("/HelloTest")
์ด๋ ธํ ์ด์ ์์ ๋ค์ด๊ฐ ๋ด์ฉ์ด ์ฌ์ฉ์ ์์ฒญ ์ฃผ์๊ฐ๋๋ค. →์๋ธ๋ฆฟ๋งคํ
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.getWriter().append("Served at: ").append(request.getContextPath()); }
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); }
์ฌ์ฉ์ ์์ฒญ๋ฐฉ์์ด GET ๋ฐฉ์์ด๋ผ๋ฉด doGet() ๋ฉ์๋๋ฅผ ํธ์ถํ๊ฒ ๋๋ค. ์ด๋ค ๋ฐฉ์์ผ๋ก ์์ฒญ๋๊ฑด ์ฒ๋ฆฌํ ๋ด์ฉ์ ๋๊ฐ๊ธฐ ๋๋ฌธ์ ์ฒ๋ฆฌ ์ฝ๋๋ฅผ ํ๊ตฐ๋ฐ์๋ง ๋ง๋ค์ด๋๊ณ doPost()์์ doGet()์ ํธ์ถํด์ ์ฌ์ฉํ๋ค.
์๋ธ๋ฆฟ ๋งตํ
ํด๋ผ์ด์ธํธ๊ฐ ์๋ธ๋ฆฟ์ ์ ๊ทผํ ์ ์๋ ๊ฒฝ๋ก๋ฅผ ์ง์ ํด์ฃผ๋ ๋๊ฐ์ง ๋ฐฉ๋ฒ์ด๋ค.
@WebServlet ์ด๋ ธํ ์ด์ ์ด์ฉ
XML ํ์ผ์ ์ด์ฉํ์ฌ ํ๊ฒฝ์ค์ ๋ฐ ์ถ๊ฐ์ ๋ณด๋ฅผ ๋ฑ๋กํ๋ ๋ฐฉ๋ฒ ๋์ ์ ์๋ฐ์ฝ๋์ ์ง์ ์๋ธ๋ฆฟ ๊ฒฝ๋ก๋ฅผ ์ง์ ํ๋ ๋ฐฉ๋ฒ์ด๋ค. ํด๋์ค ์์ ์ง์ ํด์ค๋ค.
web.xml์ url ๋งคํํ๊ธฐ
<servlet> <servlet-name>HelloTestServlet</servlet-name> <servlet-class>com.controller.HelloTestServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloTestServlet</servlet-name> <url-pattern>/xxx</url-pattern> </servlet-mapping>
<servlet>ํ๊ทธ ์์ ์์ผ๋ก ์ฌ์ฉํ ์๋ธ๋ฆฟ์ ๋ณ๋ช ๊ณผ ์๋ธ๋ฆฟ์ ์ค์ ํด๋์ค ์ด๋ฆ์ ์์ฑํ๋ค. <servlet-mapping>ํ๊ทธ ์์๋ ์๋ธ๋ฆฟ ํ๊ทธ์์ ์ง์ ํ ์๋ธ๋ฆฟ ๋ณ๋ช ๊ณผ ์๋ธ๋ฆฟ์ ์คํํ ๋ ์ฌ์ฉํ url์ ์ง์ ํ๋ค. ์ ์ฝ๋์์
/xxx
๊ฐ ์๋ธ๋ฆฟ์ url ๊ฒฝ๋ก๊ฐ ๋๋ค.๐ NEXT : Servlet์ ์์ฒญ๊ณผ ์๋ต์ฒ๋ฆฌ ์์๋ณด๊ธฐ
๋ฐ์ํ'JAVA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์คํ๋ง ํ๋ ์์ํฌ STS3 ์ค์น, ๊ฐ๋ฐํ๊ฒฝ ์ค์ (0) 2020.10.21 Servlet ์๋ธ๋ฆฟ ๊ฐ์ฒด์ ์์ฒญ-์๋ต์ฒ๋ฆฌ (0) 2020.09.20 ์ดํด๋ฆฝ์ค tern ์๋ฐ์คํฌ๋ฆฝํธ ์๋์์ฑ ํ๋ฌ๊ทธ์ธ ์ค์ (0) 2020.09.17 JAVA ์๋ฐ Eclipse jee, ํฐ์บฃ์๋ฒ ํ๊ฒฝ์ค์ (0) 2020.08.26 JAVA ์๋ฐ ๋ง์ด๋ฐํฐ์ค mybatis ๋์ SQL (0) 2020.08.23