java์ Servlet์ด ๋ฌด์์ธ์ง ํญ์ ๊ถ๊ธํ๋๋ฐ ์ด๋ฒ์ ๋ถ์คํธ์ฝ์ค๋ฅผ ์๊ฐํ๋ฉด์ ๋ฐฐ์ธ ์ ์์์ต๋๋ค. ๋ถ์คํธ์ฝ์ค์์ ์ป์ ์ ๋ณด๋ค์ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํฉ๋๋ค.
์์์ด ๊ถ๊ธํ ๋ถ๋ค์ ์๋ ๊ฐ์ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ์ฌ ์ฃผ์ธ์.
๋ชฉ์ฐจ
- Servlet ์ด๋?
- Servlet ๋ผ์ดํ ์ฌ์ดํด
- Request, Response ๊ฐ์ฒด ์ดํดํ๊ธฐ
1. Servlet ์ด๋?
๋จผ์ ์๋ธ๋ฆฟ์ ๋ํ์ฌ ์์๋ณด๊ธฐ ์ ์ ์๋ฐ ์น ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ํด์ ์์๋ณด๋๋ก ํฉ๋๋ค.
์๋ฐ ์น ์ดํ๋ฆฌ์ผ์ด์
- WAS์ ์ค์น(deploy)๋์ด ๋์ํ๋ ์ดํ๋ฆฌ์ผ์ด์ .
- ์๋ฐ ์น ์ดํ๋ฆฌ์ผ์ด์ ์๋ HTML, CSS, ์ด๋ฏธ์ง, ์๋ฐ๋ก ์์ฑ๋ ํด๋์ค(Servlet๋ ํฌํจ๋จ, package, ์ธํฐํ์ด์ค ๋ฑ), ๊ฐ์ข ์ค์ ํ์ผ ๋ฑ์ด ํฌํจ๋๋ค.
์น ์ดํ๋ฆฌ์ผ์ด์ ์ ํผ์์ ๋์ํ๋ ๊ฒ ์๋๋ผ WAS์ ์ํด์ ๋์๋๋๋ฐ ์ด ๋ ์ ํด์ง ์ฝ์์ ์ง์ผ์ผํฉ๋๋ค. ์ฝ์ ์ค ํ๋๋ ํด๋ ๊ตฌ์กฐ์ ๋๋ค. ๋ฐ๋์ WEB_INF ๋ผ๋ ํด๋์ web.xml ์ด๋ผ๋ ํ์ผ์ด ์กด์ฌํด์ผํฉ๋๋ค.
์ฌ๊ธฐ์ web.xml์ '๋ฐฐํฌ ๊ธฐ์ ์'๋ผ๊ณ ํ๋๋ฐ ์ด ์น ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ํ ์ ๋ณด๋ค์ ๋ค ๊ฐ์ง๊ณ ์๋ ํ์ผ์ด๋ผ๊ณ ์๊ฐํ์๋ฉด ๋ฉ๋๋ค. servlet 3.0 ๋ฏธ๋ง์์๋ ํ์๋ก ๊ฐ์ง๊ณ ์์ด์ผ ๋๋ ๊ฒ์ด์๊ณ , 3.0์ด์์์๋ ์ด๋ ธํ ์ด์ ์ด ๋์ ํ๊ธฐ ๋๋ฌธ์ ๋ฐ๋์ ๊ผญ ํฌํจํ์ง๋ ์์๋ ๋์ง๋ง ๊ต์ฅํ ์ค์ํ ํ์ผ์ ๋๋ค. ์ค์ ์คํ๋ง์ ์ฌ์ฉํ๊ฒ ๋ ๋์๋ ์๋ธ๋ฆฟ์ 3์ ๋๋ก ๋ง๋ค์๋ค ํ๋๋ผ๋ ๋ค๋ฅธ ์ค์ ๋ถ๋ถ์ web.xml์ ์ถ๊ฐํด์ผ ํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋ฐ๋์ web.xml์ ์์ฑํด์ผ ํฉ๋๋ค.
lib ํด๋ ์๋์๋ jar ํ์ผ๋ค์ด ์กด์ฌํ๊ฒ ๋๊ณ , classes ๋๋ ํ ๋ฆฌ ์์ ํจํค์ง, class ํ์ผ์ด ์์ด์ผ ํ๋ฏ๋ก ์๋ธ๋ฆฟ์ ๋ชจ๋ classes ํด๋ ์๋์ ๋ค์ด์๊ฒ ๋ฉ๋๋ค.
์๋ธ๋ฆฟ์ด๋?
- ์๋ฐ ์น ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ฑ์์ ์ค์ ๋์ ์ธ ์ฒ๋ฆฌ๋ฅผ ํ๋ ํ๋ก๊ทธ๋จ ์ญํ ์ ํ๋ค.
- WAS์์ ๋์ํ๋ Java ์ ํด๋์ค๋ค
- ์๋ธ๋ฆฟ์ HttpServlet ํด๋์ค๋ฅผ ์์๋ฐ์์ผ ํ๋ค
Q. HttpServlet์ ์์ํ์ง ์์๋ค๋ฉด ์ด๋ป๊ฒ ๋์ํ ๊น?
A. doGet(), doPost() ์ ๊ฐ์ ๋ฉ์๋๋ฅผ HttpServlet์ ์์๋ฐ์์ ํธํ๊ฒ ์ฌ์ฉํ๋ค๋ฉด ์์ํ์ง ์์์ ๋๋ ์ง์ ๊ตฌํํด์ ์ฌ์ฉํด์ผ ํฉ๋๋ค. - ์๋ธ๋ฆฟ๊ณผ JSP๋ก๋ถํฐ ์ต์์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ผ๋ ค๋ฉด, ์น ํ์ด์ง๋ฅผ ๊ฐ๋ฐํ ๋ ์ด ๋ ๊ฐ์ง(JSP, ์๋ธ๋ฆฟ)๋ฅผ ์กฐํ๋กญ๊ฒ ์ฌ์ฉํด์ผ ํ๋ค. ์) ์น ํ์ด์ง๋ฅผ ๊ตฌ์ฑํ๋ ํ๋ฉด(HTML)์ JSP๋ก ํํํ๊ณ , ๋ณต์กํ ํ๋ก๊ทธ๋๋ฐ์ ์๋ธ๋ฆฟ์ผ๋ก ๊ตฌํ
๋ฒ์ ์ ๋ฐ๋ฅธ Servlet ์์ฑ ๋ฐฉ๋ฒ
1. Servlet 3.0 spec ์ด์์์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
- web.xml ํ์ผ์ ์ฌ์ฉํ์ง ์์ต๋๋ค.
- ์๋ฐ ์ด๋ ธํ ์ด์ (annotation)์ ์ฌ์ฉํฉ๋๋ค.
- ์์์ ์ค์ตํ๋ first web์์ ์ฌ์ฉํฉ๋๋ค.
2. Servlet 3.0 spec๋ฏธ๋ง์์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
- servlet์ ๋ฑ๋กํ ๋ web.xml ํ์ผ์ ๋ฑ๋กํฉ๋๋ค.
2. Servlet ๋ผ์ดํ ์ฌ์ดํด
HttpServlet์ 3๊ฐ์ง ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉ
- init()
- service(request, response) - doGet(request, response)
- destroy()
LifecycleServlet.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
package examples;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/LifecycleServlet")
public class LifecycleServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public LifecycleServlet() {
System.out.println("LifecycleServlet ์์ฑ!!");
}
public void init(ServletConfig config) throws ServletException {
System.out.println("init test ํธ์ถ!!");
}
public void destroy() {
System.out.println("destroy ํธ์ถ!!");
}
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
System.out.println("service ํธ์ถ!!");
}
}
|
cs |
์ฝ๋๋ฅผ ์คํ์ ์์ผ๋ณด๋ฉด ๋งจ ์ฒ์์๋ ์ด๋ ๊ฒ ๋์ค๊ฒ ๋ฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์๋ก๊ณ ์นจ์ ํ ๋ฒ ๋๋ฅด๋ฉด(์์ ๋ฒํผ)
์๋น์ค๋ง ํ ๋ฒ ๋ ํธ์ถ๋๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
ํด๋น URL๋ก ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒํํ ์์ฒญ์ํ๋ฉด ์๋ฒ๋ URL์ ๋ฐ์์ ํด๋น URL ๋งคํ ์ ๋ณด๋ฅผ ์์๋์ ๊ฑฐ๊ณ ํด๋น ํด๋์ค๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์กด์ฌํ๋์ง ์ฒดํฌํ๊ฒ ๋ฉ๋๋ค. ๋ง์ฝ ์์ผ๋ฉด ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ฆฌ๊ฒ ๋๋๋ฐ ์ด๋ฅผ '์์ฑ'์ด๋ผ๊ณ ๋ถ๋ฆ ๋๋ค. ์ง๊ธ์ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ์ต์ด๋ก Servlet์ ํธ์ถํ๊ธฐ ๋๋ฌธ์ ์๋ฒ๋ ๋ฉ๋ชจ๋ฆฌ์ ์๋ค๊ณ ํ๋จํ์ฌ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ , ์ฐ๋ฆฌ๋ ์์ฑ์์ ๋ฃ์ด๋๋ ๋ฉ์์ง๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
์๋ก๊ณ ์นจ์ ํ๋ฉด ์๋น์ค๋ง ํธ์ถ ๋๋ ๋ชจ์ต์ ๋ณผ ์ ์๋๋ฐ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ค๋ฅธ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ฌ์ฉํด๋ ์๋น์ค๋ง ํธ์ถ๋ฉ๋๋ค. ์ด๋ฅผ ํตํด์ ์๋ธ๋ฆฟ์ ์๋ฒ์ ์๋ธ๋ฆฟ ๊ฐ์ฒด๋ฅผ ์ฌ๋ฌ ๊ฐ ๋ง๋ค์ง ์๋๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค. ์์ฒญ์ด ์ฌ๋ฌ ๋ฒ ๋ค์ด์ค๋ฉด ์ค์ ์ด ์์ฒญ๋ ๊ฐ์ฒด๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์๋์ง ์๋์ง ํ์ธํด์ ์๋ค๋ฉด ์๋น์ค ๋ฉ์๋๋ง ํธ์ถํฉ๋๋ค.
์ถ๊ฐ์ ์ผ๋ก..
๋ ๋ฒ์งธ ์์ฒญ์ด ๋ค์ด์์ ๋ ๋ถํฐ ์๋น์ค ๋ฉ์๋๋ง ๊ณ์ ์คํ์ด ๋๊ณ ์๋ค๋ ๊ฒ์ ๊ฒฐ๊ตญ ์๋ตํด์ผ๋๋ ๋ชจ๋ ๋ด์ฉ์ ์๋น์ค์ ๊ตฌํํด์ผ ํ๋ค๋ ๊ฒ์ ๋ปํฉ๋๋ค.
๊ทธ๋ผ destroy๋ ์ธ์ ํธ์ถ๋ ๊น์?
init ํจ์์ ์๋ ๋ด์ฉ์ ์์ ํ๊ณ ์ ์ฅํด๋ดค์ต๋๋ค.
๋จ์ง ์์ ํ๊ณ ์ ์ฅ๋ง ํด๋ destroy๊ฐ ํธ์ถ๋๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
์ฝ๋๋ฅผ ํ๋๋ผ๋ ์์ ํ๊ณ ์ ์ฅํ๊ณ ๋๋ฉด ์๋ธ๋ฆฟ์ด ์์ ๋๊ธฐ ๋๋ฌธ์ ์ง๊ธ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ์๋ ์๋ธ๋ฆฟ ๊ฐ์ฒด๋ ๋ ์ด์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด ๋ destroy ๋ผ๋ ๋ฉ์๋๊ฐ ํธ์ถ๋ฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ค์ ์์์ ํด๋ณด๋ฉด ๋ ์ด์ ๋ฉ๋ชจ๋ฆฌ์ ์กด์ฌํ์ง ์์ผ๋ ์ฒ์๋ถํฐ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ , init()์ ํธ์ถํ๊ณ service()๋ฅผ ํธ์ถํ๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
์ ๋ฆฌ
Servlet ์๋ช ์ฃผ๊ธฐ
- WAS๋ ์๋ธ๋ฆฟ ์์ฒญ์ ๋ฐ์ผ๋ฉด ํด๋น ์๋ธ๋ฆฟ์ด ๋ฉ๋ชจ๋ฆฌ์ ์๋์ง ํ์ธํฉ๋๋ค.
- if (๋ฉ๋ชจ๋ฆฌ์ ์์) {
- ํด๋น ์๋ธ๋ฆฟ ํด๋์ค๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ฆผ
- init() ๋ฉ์๋๋ฅผ ์คํ
}
- service()๋ฉ์๋๋ฅผ ์คํ - was๊ฐ ์ข ๋ฃ๋๊ฑฐ๋, ์น ์ดํ๋ฆฌ์ผ์ด์ ์ด ์๋กญ๊ฒ ๊ฐฑ์ ๋ ๊ฒฝ์ฐ destroy() ๋ฉ์๋๊ฐ ์คํ๋ฉ๋๋ค.
doGet ๊ณผ service ์ฐจ์ด์ ์?
service() ๋ฉ์๋๋ httpServlet์ ์ด๋ฏธ ๊ตฌํ์ด ๋์ด์๋ ์ํ์ ๋๋ค.
WAS๋ ๋งค๋ฒ ์๋น์ค๋ง ํธ์ถํ๋๋ฐ ๋ด๊ฐ ์ค๋ฒ๋ผ์ด๋ํ์ง ์์๋ค๋ฉด ๋์ ๋ถ๋ชจ์ธ HttpServlet ์ service()๊ฐ ํธ์ถ๋๊ฒ ๋ฉ๋๋ค. HttpServlet ์ service()๋ ํ ํ๋ฆฟ ๋ฉ์๋ ํจํด์ผ๋ก ๊ตฌํ์ด ๋์ด ์์ต๋๋ค. ํด๋ผ์ด์ธํธ ์์ฒญ์ด GET์ผ ๊ฒฝ์ฐ ์์ ์ด ๊ฐ์ง๊ณ ์๋ doGet์ ๋ฉ์๋๋ฅผ ํธ์ถํฉ๋๋ค. ์ด๋ฐ์์ผ๋ก service ๋ฉ์๋๊ฐ ์ด๋ฏธ ๊ทธ๋ ๊ฒ ๋์ํ๊ณ ์์๊ธฐ ๋๋ฌธ์ doGet ๋ฉ์๋๋ง ์ค๋ฒ๋ผ์ด๋ํด๋ ์๋ต๊ฒฐ๊ณผ๋ฅผ ์ ํ์ธํ ์ ์์ต๋๋ค.
service(request, response) ๋ฉ์๋
HttpServlet์ service๋ฉ์๋๋ ํ ํ๋ฆฟ ๋ฉ์๋ ํจํด์ผ๋ก ๊ตฌํํฉ๋๋ค.
- ํด๋ผ์ด์ธํธ์ ์์ฒญ์ด GET์ผ ๊ฒฝ์ฐ์๋ ์์ ์ด ๊ฐ์ง๊ณ ์๋ doGet(request, response)๋ฉ์๋๋ฅผ ํธ์ถ
- ํด๋ผ์ด์ธํธ์ ์์ฒญ์ด Post์ผ ๊ฒฝ์ฐ์๋ ์์ ์ด ๊ฐ์ง๊ณ ์๋ doPost(request, response)๋ฅผ ํธ์ถ
3. Request, Response ๊ฐ์ฒด ์ดํดํ๊ธฐ
๊ฐ์ฒด๋ ๊ด๋ จ๋ ์ ๋ณด๋ฅผ ๋ชจ์์ ๊ฐ์ง๊ณ ์๋ ๊ฒ์ ๋งํฉ๋๋ค.
ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์์ฒญ์ด ๋ค์ด์ค๋ฉด HttpServletRequest ์ HttpServletResponse๋ฅผ ์์ฑํ๊ณ ์์ฑ๋ ๊ฐ์ฒด๋ฅผ ์๋ธ๋ฆฟ์๊ฒ ์ ๋ฌํฉ๋๋ค.
- HttpServletRequest ๋ ์์ฒญํ ๋ ๊ฐ์ง๊ณ ๋ค์ด์จ ๋ค์ํ ์ ๋ณด๋ค์ ๋ด๊ณ ์๋ ๊ฐ์ฒด์ ๋๋ค.
- HttpServletResponse ๋ ํด๋ผ์ด์ธํธ์๊ฒ ์ ์กํ๊ธฐ ์ํ ์๋ต์ ๋ณด๋ฅผ ๋ด๊ธฐ ์ํ ๊ฐ์ฒด์ ๋๋ค.
๋ ๊ฐ์ฒด๋ฅผ ์์ฒญ ์ ๋ณด์ ์๋ path๋ก ๋งคํ๋ ์๋ธ๋ฆฟ์๊ฒ ์ ๋ฌ์ ํ๊ฒ ๋๋ฉด ์ ๋ฌํ ๊ฐ์ฒด๋ service(), doGet(), doPost() ์ ๊ฐ์ ๋ฉ์๋์ ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌ๋์ด ์ฌ์ฉ๋ฉ๋๋ค.
HttpServletRequest
- ํค๋, ํ๋ผ๋ฏธํฐ, ์ฟ ํค, URI, URL ๋ฑ ์์ฒญํ ๋ ๊ฐ์ง๊ณ ์๋ ์ ๋ณด๋ค์ ๋ชจ๋ ๋ฉ์๋๋ก ๋ด๋๋ค.
ํค๋๋ด์ฉ ์ฐธ๊ณ ๋งํฌ - Body์ Stream์ ์ฝ์ด ๋ค์ด๋ ๋ฉ์๋๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
HttpServletResponse
- WAS๋ ์ด๋ค ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญ์ ๋ณด๋๋์ง ์๊ณ ์๊ณ , ํด๋น ํด๋ผ์ด์ธํธ์๊ฒ ์๋ต์ ๋ณด๋ด๊ธฐ ์ํ HttpServletResponse๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ ์๋ธ๋ฆฟ์๊ฒ ์ ๋ฌํ๋ค.
- ์๋ธ๋ฆฟ์ ํด๋น ๊ฐ์ฒด๋ฅผ ์ด์ฉํ์ฌ content type, ์๋ต ์ฝ๋, ์๋ต ๋ฉ์์ง ๋ฑ์ ์ ์กํ๋ค.
์ถ๊ฐ๋ก URI, URN, URL ์ด๋?
URI ๋ ์์ ์๋ณ์, URN์ ์์ ์ด๋ฆ, URL์ ์์ ์์น
- URI์๋ URL,URN์ด ํฌํจ๋์ด ์๋ค. URL์ URI์ด์ง๋ง, URI๋ URL์ด ์๋๋ค.
- URL์ ์ธํฐ๋ท ์์ ์์ ์์น๋ฅผ ๋ํ๋
- URI๋ ์ธํฐ๋ท ์์ ์์์ ์๋ณํ๊ธฐ ์ํ ๋ฌธ์์ด์ ๊ตฌ์ฑ
์)
- http://test.com/test.pdf?docid=111 ์ด๋ผ๋ ์ฃผ์๋ URI์ด์ง๋ง URL์ ์๋๋ค.
- http://test.com/test.pdf ๊น์ง๋ง URL์(์ฃผ์์ ์์น)
- docid=111์ด๋ผ๋ ์ฟผ๋ฆฌ์คํธ๋ง์ ๊ฐ์ ๋ฐ๋ผ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง๊ฒ๋จ, ๋ฐ๋ผ์ ์๋ณ์ ์ญํ ์ ํ๊ณ ์์
- http://test.com/test.pdf?docid=111 ,http://test.com/test.pdf?docid=112๋ ๊ฐ์ URL์ ๊ฐ์ง๊ณ ๋ค๋ฅธ URI๋ฅผ ๊ฐ์ง
- blog.com/page.html ์ URN
- http://blog.com/pahe.html ์ URL
์ด๋ ๊ฒ ๋ถ์คํธ์ฝ์ค ์น ํ๋ก๊ทธ๋๋ฐ ์ฝ์ค ์ค Servlet์ ๋ํด์ ์์๋ณด์์ต๋๋ค.
๋๊ธ