๐ฅ [Spring] Web Architecture & Servlet
Web Architecture
Client์์ ์๋ฒ์ ์๋น์ค๋ฅผ ์์ฒญServer์์ ๋ชจ๋ ์์ฒญ์ ๋ฐ๋๋ฐSDDD๋ฅผ ํ๋ณ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>




