Network/Http

[Network/Http]03. Servlet, HTTP Protocol

양승길 2016. 7. 4. 19:52

[Network/Http]03. Servlet, HTTP Protocol


- Servlet 생명주기(JDBC, C/S는 JavaEE)

   * Client(Browser)는 Server(WAS)에게 정보를 요청한다.   


   * 요청받은 WAS는 그에 대한 Thread가 생성된다.

     (=>Client 요청한 수 만큼이나 Thread가 생성되고 그 요청이 끝나면 Thread는 죽는다.)


   * WAS가 생성한 Thread에는 Servlet Bean이 Instance로 생성되어 있다.

     이 Bean에는 init()라는 Method로 생성자의 역할을 하며,

     요청에 대한 처리를 service()라는 Method로 처리하여 Client에게 HTML로 Reponse한다.

     (이 Instance는 매번 요청할때마다 init로 초기화 하지 않고 보관해두었다가 service만 호출되어 재사용된다.)


   * Intance의 해당 내용이 변경되어 Compile하면 기존에 있던 service가 destory에 의해 죽고 재생성된다.

     (Tomcat 환경파일에 reloadable을 true로 변경했을 때)


- HTTP Protocol

   - 정의 : 인터넷상에서 데이터를 주고 받기 위한 C/S 모델을 따르는 규약

   - 작동 방식 : 클라이언트에서 요청(request)를 보내면 서버는 요청을 처리해서 응답(response)한다.

                 Client : URI를 이용해서 서버에 접속하고, 데이터를 요청할 수 있다.

                 Server : Client의 요청을 받아서, 요청을 해석하고 응답을 한다.

   - 요청 방식

     Server에게 전달하는 정보를 Message에 담아 보내는것에 대하여 대표적으로 2가지로 분류된다.

     Message는 Head와 Body로 구성되어 있다.(Head에는 Client가 요청한 정보가 보여진다)

     

     * GET : Default(?)에 의한 방식. URL뒤에 CSV와 더불어 관련 정보를 전송한다.

             Message Header에는 GET이라는 방식과 요청한 URL의 모든 글자가 보이며

             한글과 같은 문자들 경우 16진수로 암호화 된다.

             static contents(HTML, CSS) : Request must be limited. Header is fixed size.


     * POST : Client의 Data를 보내는데 사용되는 방식이다.

              Message Header에는 POST이라는 방식이 보이고

              Body에는 요청한 URI의 모든 글자가 보이며 한글과 같은 문자들 경우 16진수로 암호화 된다.

              크기가 제한된 용량의 파일들이나 가시적 보안을 위해 사용된다.

              Dynamic contents(JSP, ASP, PHP) : Request doesn't need to be limited. Header is not fixed size.

 

     (HTTPS : POST가 보안에 한계가 있으므로 사용되는 HTTP 규약. Client측에서 자체적으로 암호화하여,

              Server에게 전달하고 전달받은 Server가 규약에 맞게 복호화 작업하여 진행한다.)


 - Tier Application (Tire는 Layer라 부르기도 한다.)

   * 3 - Tier Application

     Client - Server - DataBase의 구조

     => Thin Client(Browser. depends heavily on another computer (its server) to fulfill its computational roles.), 

        Fat Server(WAS)


   * 2 - Tier Application

     Client - DataBase

     => Fat Client(provides rich functionality independent of the central server)



 - Servlet의 위계도

참고 자료

   java.servlet

   <<interface>>

   Servlet -> Servlet의 Specification정의.

   + destroy() : void

   + init(ServletConfig) : void -> ServletException

   + service(ServletRequest, ServletResponse) : void -> ServletException, IOException



   <<abstract>>

   GenericServlet implements Servlet -> Protocol과 무관한 정의

   + init() : void -> Overrided

   + service(ServletRequest, ServletResponse) : abstract, void

   + destroy() : void -> Overrided


   

   java.servlet.http

   <<abstract>>

   HttpServlet extends GenericServlet

   # doGet(HttpServletRequest, HttpServletResponse) : void -> must override

   # doPost(HttpServletRequest, HttpServletResponse) : void -> must override

   # service(HttpServletRequest, HttpServletResponse) : void -> overrided

   + service(ServletRequest, ServletResponse) : void -> overrided


   


   UserDefindedClass HttpServlet

   init, destroy 불필요


   WAS가 요청받은 Message를 처리하여 보내는 Bean.

   상위에는 GenericServlet이 있고 init와 destroy가 있다. service는 abstract로 되어있고 HttpServlet에서 Override되어 있다.

   HttpServlet에 있는 service는 두 가지로 Overload되어 있다.

   호출하지 않아도 되나, void service(ServletRequest req, ServletResponse res)로 override하도록 한다.



 - ServletRequest 위계도

    interface임에도 불구하고 method를 사용 할 수 있는 이유

     => Servlet Container에서 HttpServletRequest, Response의 Argument에 해당되는 

          HttpServlet Instance를 생성하여 전달.

     => Servlet Container creates HttpServlet Request object and pass it

          as an argument to the servlet's service methods(doGet, doPost, etc)



    javax.servlet

    <<interface>>

    ServletRequest

    + getParameter(String name) : String -> name에 해당되는 값을 Return

    + getParameterNames() : Enumeration<Generic> -> Client에서 받아온 모든 Parameter저장. 정보에 대한 언어 설정.

    + getParameterValues(String name) : String[] -> name에 해당되는 모든 값을 Return

    ( => getParameter는 Client의 모든 정보를 Encapsulation)

    + setCharacterEncoding(String env) : void -> Client에서 받아온 정보에 대한 언어 설정.

    

    (

     Enumeration interface no implements, extends

     + hasMoreElements() : boolean

     + nextElement() : <Generic>

    )

     



    javax.servlet.http


    <<interface>> (확장용)

    HttpServletRequest extends ServletRequest

    (Client가 요청한 모든 정보들이 포함시켜 Server에게 보낸다. 이 정보들은 Encapsulation Hiding되어 있으므로 Getter를 사용하도록 한다.)

    + getQueryString() : String => 요청한 URL의 URI를 보여준다.



 - ServletResponse 위계도(차후 재수정)


    javax.servlet


    <<interface>>

    ServletResponse

    + getWriter() : PrintWriter -> Client에게 보낼 Writer를 Return.

    + setContentType() : void -> Client에게 보낼 Resource의 종류와 언어 설정 CSV는 Semicolon.

    (response.setContentType("text/html;charset=EUC-KR");)




    javax.servlet.http

    HttpServletResponse

    + 

 

 - Relative URI

    Client에서 Server에게 Request할 때, 해당 URI위치가 상대적으로 표기하는 것.

    해당 프로젝트를 옮길 때, URL의 변경으로 인하여 404 Error의 방지를 위함.

    IP에 독립적이다.


    Ex 1 : Root : edu

          Mapping : /PostData

          Package : default

          /edu/PostData => /edu/PostData

   edu/PostData => /edu/edu/PostData 

 /PostData => /PostData

 PostData => /edu/PostData


    Ex 2 : Root : edu

           Mapping : (/edu)/post

           Package : jw02.post


           post => /edu/jw02/post


  /edu/post => /edu/post

           ../post   => /edu/post

           ./../post => /edu/post


           /edu/jw02/post => /edu/jw02/post

           ./post => /edu/jw02/post


  ./jw02/post => /edu/jw02/jw02/post


 - EIS(Enterprise Information System)

    통합에 의한 기업 업무의 기능을 제공하는 정보 체계의 종류.

    크게 복잡한 기업이나 조직을 지원하는 능력과 그만한 큰 데이터를 다룸으로 서비스의 높은 품질을 제공.


 - Back End System

    공급처리, 재고, 주문을 관리하는 시스템처럼 회사를 운영하는데 사용되는 협업시스템.

    백오피스를 지원. 사용자들의 요구나 다른 시스템을 처리하는데 운영.


 - Eclipse Structure(Dynamic Web Project)

    Project - Java Resource - src - JavaPackage

                            - Library - Tomcat, SE, WebApp(Other Bean)


            - Web Content   - Folder

                            - WEB-INF - lib - .jar

                                      - web.xml



 - Web Appliction의 유지관리

    성질이 다른 Bean들을 분리하여 관리를 용이하게 하는 것. (Modularation)

    Clinet, JDBC를 관리하는 Bean들과 Servlet을 담당하는 Bean들을 JavaPackag별로 구분하고

    통합적으로 처리하는 Bean을 만들어둔다.(Modularity, Dependency)


    * JDBC의 유지관리

      - DAO(Data Access Object. DB에 접근하여 가져오는 정보를 모듈로 만든 Bean. 

         조건에 따라 Statement, PreparedStatement를 적절히 사용.)

      - VO(Value Object. 해당 객체의 가치있는 정보를 갖고있는 Bean)


vo 가치있는 정보

'Network > Http' 카테고리의 다른 글

[Network/Http]02. Web, Tomcat  (0) 2016.06.22
[Network/Http]01. CS관계와 자원위치.  (0) 2016.06.22