๐ฅ [Spring] Web Architecture & Servlet
Web Architecture
Client
์์ ์๋ฒ์ ์๋น์ค๋ฅผ ์์ฒญServer
์์ ๋ชจ๋ ์์ฒญ์ ๋ฐ๋๋ฐSD
DD
๋ฅผ ํ๋ณDD
์ผ ๊ฒฝ์ฐhttpd
๋ฅผ ๊ฑฐ์ณ ์์ฒญ์Container(WAS)
๋ก ๋๊นSD
์ผ ๊ฒฝ์ฐServer
๋ด ์ฐพ๋ ํ์ผ์ ์ฐพ์ ์๋ต
SD (Static Document)
์น ํ๋ฉด ex) (html, css, js) ์ ์ ์ธ ํ๋ฉด
DD (Dynamic Document)
JAVA ์์ค์ฝ๋ ๋์ํจ์ (Servlet, JSP) ๋ฑ ์๋น์ค ์์ฑ
๋๊ธฐ ์์ฒญ vs ๋น๋๊ธฐ ์์ฒญ
ServletRequest
, ServletResponse
ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์๋ฒ์์ ์์ฑ๋ ์๋ธ๋ฆฟ ์์ ์ฐ๋ ๋ ๋จ์๋ก ์ํ๋๋ค
์์ฒญ์ ๋ํ ์๋น์ค๋ฅผ ๋ค ์ํํ๋ค๋ฉดโฆservice() { }โฆ ๋ฉ๋ชจ๋ฆฌ์์ ์ฐ๋ ๋ ๋จ์๋ก unbind ๋๋ฉด์
๊ทธ ์์ ๋ก์ปฌ๋ก ์กด์ฌํ๋ ServeltRequest
, ServletResponse
๋ ๋ฉ๋ชจ๋ฆฌ์์ Death๋๋ค
๋๊ธฐ ์์ฒญ์ page
, ๋น๋๊ธฐ ์์ฒญ์ data
๋ฅผ ์๋ตํ๋ค.
๋ฐ๋ผ์ ๋น๋๊ธฐ ์์ฒญ์ Server
์ Client
์ ๋ถ๋ฆฌ๋ฅผ ์๋ฏธํจ
๋๊ธฐ ์์ฒญ
๋น๋๊ธฐ ์์ฒญ
Servlet
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package web.servlet.generic;
import java.io.IOException;
import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
/*
MyGenericServlet ํด๋์ค๋ java ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค์ด์ง ํด๋์ค
java ํด๋์ค๋ --JVM(ํ๋ซํผ)
Servlet ํด๋์ค๋ -- Container(WAS, Engine)
*/
public class MyGenericServlet extends GenericServlet{ //GenericServlet์ ์์๋ฐ์ Servlet์ด ๋จ
@Override
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
}
}
Client
์ Server
๋ก ๋๋๋ฉฐ
client
๊ฐ ํ๋ ๋๋ถ๋ถ์ ์์ฒญ์ Server
๋ก ์์ฒญ์ด ์งํ
์์ฒญ์ ํ๋ฉด 2๊ฐ์ง๊ฐ ์ ์ก๋๋๋ฐ networkstream
์ ํตํด client
์์ ์
๋ ฅํ ๊ฐ์ ์ ์ก
Web-Server(Demon-Server)
๋ ๋ชจ๋ ์์ฒญ์ ๋ฐ๋ ๋ฆฌ์
์
๊ฐ์ ์ญํ ์ ํ๋ค.
๊ทธ ํ ์์ฒญ์ด static(SD)
ํ ์์ฒญ์ธ์ง dynamic(DD)
ํ ์์ฒญ์ธ์ง ํ์ธ ํ ํ
๋ง์ฝ DD
์ด๋ฉด ๋ฐ์ ์์ฒญ์ ๋ณด๋ฅผ container(Server, WAS)
๋ก ๋๊ธด๋ค.
์ด ๋ ์์ฒญ์ ๋๊ธฐ๋ ์๊ฐ container
๋ ์์ฒญ ์ ๋ณด๋ฅผ ServletRequest
๊ฐ์ฒด์ ๋ด๋๋ค. (์ ์ก ์ค๋น)
ํด๋น ๊ฐ์ฒด๋ฅผ unpack
ํ๋ฉด getter
, pack
ํ๋ฉด setter
์ด๋ค.
๋ํ container
๋ ๋์์ response
๊ฐ์ฒด์ thread(Service method)
๋ฅผ ๋ง๋ ๋ค.
์ด ๋ service
ํจ์์ ์ธ์์ (request, response) ๊ฐ์ฒด๊ฐ ๋ค์ด๊ฐ๊ณ request ๊ฐ์ฒด๊ฐ์ ๊ธฐ๋ฐ์ผ๋ก return๊ฐ์ response ์ ๋ด๋๋ค.
์ด ๋ชจ๋ ๊ฒ๋ค์ Servlet
์ด๋ผ๋ ํ๋์ process
์์ ์งํ๋๋ฉฐ ์ด๋์ Servlet
๋ด์์ ๋์ํ๋ ๋ฉ์๋๋ค์ thread
๋ผ๊ณ ์ดํด ํ๋ฉด ๋๋ค.
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 web.servlet.generic;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
/*
MyGenericServlet ํด๋์ค๋ java ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค์ด์ง ํด๋์ค
java ํด๋์ค๋ --JVM(ํ๋ซํผ)
Servlet ํด๋์ค๋ -- Container(WAS, Engine)
::
MyGenericServlet ms = new MyGenericServlet();
ee๋ ๋ฒจ์์๋ ๊ฐ์ฒด์์ฑ์ ์ฃผ์ฒด๊ฐ ๊ฐ๋ฐ์๊ฐ ์๋๋ค.
๋ฐ๋ผ์ new๋ก servlet๊ฐ์ฒด๋ฅผ ๋ง๋ค์ง ์๋๋ค.
๊ฐ์ฒด ์์ฑ์ ์ฃผ์ฒด๋ container์๊ฒ ๋์ด๊ฐ๋ค.
container๊ฐ dd(web.xml) ํ์ผ์ ๋ณด๊ณ ๊ฐ์ฒด ์์ฑ
*/
public class MyGenericServlet extends GenericServlet{ //GenericServlet์ ์์๋ฐ์ Servlet์ด ๋จ
@Override
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
//์น ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ต์ ํ๊ธฐ์ํ ๊ฐ์ฒด...
PrintWriter out = response.getWriter();
out.println("<html><body><h2>");
out.println("Hello Generic Servlet~!!");
out.println("<h2></body></html>");
out.close(); //ํด๋ผ์ด์ธํธ์ ์๋ต์ด ๋๋ฌ๋ค.(thread, request, response ๊ฐ์ฒด๋ ๋ฉ๋ชจ๋ฆฌ์์ ๋ด๋ ค์จ๋ค)
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<servlet>
<!--web.servlet.generic.MyGenericServlet MyGenericServlet = new web.servlet.generic.MyGenericServlet() ์๋ฒ ์ธ๋ถ ๋งคํ -->
<servlet-name>MyGenericServlet</servlet-name>
<servlet-class>web.servlet.generic.MyGenericServlet</servlet-class> <!--์ FQCN๋ฅผ ๋ณด๊ณ ๊ฐ์ฒด๋ฅผ ์์ฑํจ -->
</servlet>
<!--ํด๋ผ์ด์ธํธ ๋งคํ -->
<servlet-mapping>
<servlet-name>MyGenericServlet</servlet-name>
<url-pattern>/My</url-pattern> <!--/My๋ก ์์ฒญ์ด ๋ค์ด์ค๋ฉด MyGenericServlet์ผ๋ก ๋ณด๋ธ๋ค -->
</servlet-mapping>
</web-app>