ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [부스트코스] Servlet -BE
    부스트코스 코딩일지/웹 프로그래밍 기초 2020. 2. 14. 01:45

    JDK와 eclipse ee 그리고 WAS 종류의 하나인 Tomcat까지 설치하여

    본격적으로 웹 애플리케이션을 동작할 준비를 마치었습니다.

     

    웹 어플리케이션은 정적인 콘텐츠와 동적인 콘텐츠로 나누어 볼 수 있는데요.

    프로그램을 수행해서 페이지를 동적으로 만들어 주는 것이 바로 서블릿입니다.

     

    서블릿의 역할과 작성 방법에 대해 알아보도록 하겠습니다!

     

     

    Servlet 이란?

     

    자바 웹 애플리케이션의 구성요소 중 동적인 처리를 하는 프로그램입니다.

    서블릿은 WAS에 동작하는 JAVA 클래스인데요,

    HttpServlet 클래스를 상속받아 동작합니다.

     

    웹페이지의 화면 자체를 JSP로 표현한다면, 그 안에서 이뤄지는 복잡한 프로그래밍은 서블릿으로 구현하는 것입니다.

     

    서블릿은 요청이 들어오면 그때 코드가 실행되어 응답 결과를 만들어 내는 것입니다.

     

    [출처: https://www.edwith.org/boostcourse-web/lecture/16686/]

     

     

    작성 방법

    >>응답받고 싶은 부분을 코딩

     

    1. Servlet 3.0 이상에서 사용하는 방법

    • web.xml 파일을 사용하지 않음
    • 자바 어노테이션(annotation)을 사용함
    • 간결한 것이 특징

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        response.setContentType("text/html;charset=utf-8");   //응답하는 결과에 대한 타입을 설명

        PrintWriter out = response.getWriter();  // getWriter: 응답 결과를 보내줄 통로 PrintWriter을 반환한다

        out.print("<h1>1부터 10까지 출력합니다. <h1>");)  // 출력 내용을 작성한다.

        for(int i = 1; i <=10; i++) {

              out.print(i+"<br>");

        }

        out.close(); // 모두 끝나면 통로를 닫는다

    }

     

    2. Servlet 3.0 미만에서 사용하는 방법

    • servlet을 등록할 때 web.xml 파일에 등록

    web.xml 위치

    버전 3.0과 다르게 서블릿이 하나 만들어질 때마다 web.xml에 해당 서블릿을 등록해 주어야만 실행시킬 수 있습니다.

    코드 부분은 같습니다.

     

    [출처 : https://www.edwith.org/boostcourse-web/lecture/16687/]

     

     

    라이프 사이클

     

    실습을 통해 실제 서블릿이 실행될 때 어떤 순서로 함수가 실행되는지 확인해 보았습니다.

     

     public LifestyleServlet() {
         System.out.println("LifestyleServlet 생성!!");
        }

    public void init(ServletConfig config) throws ServletException {
    System.out.println("init 호출");
    }

    public void destroy() {
    System.out.println("destroy 호출");
    }

     

    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    System.out.println("service 호출"); 
    }

     

    실행결과는 다음과 같습니다.

     

    생성자 => init() => service() 순으로 호출되고 있는 것을 알 수 있습니다.

     

    브라우저에서 새로고침을 했을 때, service()만 호출되는 것을 알 수 있는데요

    바로 요청이 들어올 때마다 요청된 객체를 확인하여 이미 요청이 들어온 객체라면 새롭게 메모리를 할당하지 않고

    service 메서드만 호출하게 되는 것입니다.

     

    따라서 응답에 대한 내용은 service 메서드에 구현해야 하는 것을 알 수 있습니다!

     

    destroy 메서드는 서블릿을 수정하는 경우, 바로 기존 메모리에 있던 부분을 내리고 새롭게 올리는 경우에 destroy 메서드가 실행되고 다시 생성자 init 메서드 순으로 실행되는 것을 알 수 있습니다.

     

     

     

    이어서 service 메서드에 대해 자세히 알아보겠습니다.

     

    service(request, response) 메서드

    HttpServlet의 service메서드는 템플릿 메소드 패턴으로 구현합니다.

    • 클라이언트의 요청이 GET일 경우에는 자신이 가지고 있는 doGet(request, response) 메서드를 호출
    • 클라이언트의 요청이 Post일 경우에는 자신이 가지고 있는 doPost(request, response)를 호출

     

    [출처 : https://www.edwith.org/boostcourse-web/lecture/16688/]

     

     

     

    Request, Response 객체

     

    WAS가 웹 브라우저로부터 Servlet 요청을 받으면 두 가지 객체를 생성하게 됩니다.

    바로 HttpServletRequest와 HttpServletResponse입니다.

     

    HttpServletRequest

    : 웹 브라우저가 Servlet에 요청할 때(Request) 주는 정보를 담고 있습니다.

    • http프로토콜의 request정보를 서블릿에게 전달하기 위한 목적으로 사용합니다.
    • 헤더 정보, 파라미터, 쿠키, URI, URL 등의 정보를 읽어 들이는 메서드를 가지고 있습니다.
    • Body의 Stream을 읽어 들이는 메소드를 가지고 있습니다.

    HttpServletResponse

    : 요청을 받은 클라이언트에게 보낼 응답에 대한 정보를 담고 있습니다.

    • WAS는 어떤 클라이언트가 요청을 보냈는지 알고 있고, 해당 클라이언트에게 응답을 보내기 위한 HttpServleResponse객체를 생성하여 서블릿에게 전달합니다.
    • 서블릿은 해당 객체를 이용하여 content type, 응답 코드, 응답 메시지 등을 전송합니다.

    [출처 : https://www.edwith.org/boostcourse-web/lecture/16689/]

     

     

    '부스트코스 코딩일지 > 웹 프로그래밍 기초' 카테고리의 다른 글

    [부스트코스] CSS layout  (0) 2020.02.02
    [부스트코스] CSS -FE  (0) 2020.02.02
    [부스트코스] HTML -FE  (1) 2020.02.02
    [부스트코스] WAS  (0) 2020.01.19
    [부스트코스] 웹 서버  (0) 2020.01.19

    댓글

Designed by Tistory.