티스토리 뷰

JSP, Servlet

Servlet

JeongHyeon 2018. 5. 19. 22:25

자바 웹 어플리케이션(Java Web Application)

  • WAS에 설치(deploy)되어 동작하는 어플리케이션
  • 자바 웹 어플리케이션에는 HTML, CSS, 이미지, 자바로 작성된 클래스(Servlet, package, 인터페이스 등), 각종 설정 파일 등이 포함됩니다

자바 웹 어플리케이션의 폴더 구조

이클립스에서 실행된 Dynamic Web Project

  • 이클립스에서 Dynamic Web Project의 Servlet을 실행하면, 해당 프로젝트가 이클립스가 관리하는 .metadata 폴더 아래에 자바 웹 어플리케이션 폴더 구조로 만들어져 실행됩니다.

Servlet 이란

웹프로그래밍에서 클라이언트의 요청을 처리하고 그 결과를 다시 클라이언트에게 전송하는 Servlet 클래스의 구현 규칙을 지킨 자바 프로그래밍 기술

  • 자바 웹 어플리케이션의 구성요소 중 동적인 처리를 하는 프로그램의 역할
  • 서블릿을 정의 해보면

    서블릿(servlet)은 WAS에서 동작하는 Java 클래스입니다.
    서블릿은 HttpServlet 클래스를 상속받아야 합니다.
    서블릿과 JSP로부터 최상의 결과를 얻으려면, 웹 페이지를 개발할 때 JSP, 서블릿을 조화롭게 사용해야 합니다.

    예 : 웹 페이지를 구성하는 화면(HTML)은 JSP로 표현하고, 복잡한 프로그래밍은 서블릿으로 구현

Servlet 특징

  • 클라이언트의 요청에 대해 동적으로 작동하는 웹 어플리케이션 컴포넌트
  • html을 사용하여 요청에 응답합니다
  • Java Thread를 이용하여 동작합니다
  • MVC 패턴에서 Controller로 이용됩니다
  • HTTP 프로토콜 서비스를 지원하는 javax.servlet.http.HttpServlet 클래스를 상속받습니다. UDP보다 속도가 느립니다
  • HTML 변경 시 Servlet을 재컴파일해야 하는 단점이 있습니다

일반적으로 웹서버는 정적인 페이지만을 제공합니다. 그렇기데 동적인 페이지를 제공하기 위해서는 웹서버는 다른 곳에 도움을 요청하여 동적인 페이지를 작성해야 합니다. 동적인 페이지로는 임의의 이미지만을 보여주는 페이지와 같이 사용자가 요청한 시점에 페이지를 생성해서 전달해 주는 것을 의미합니다. 여기서 웹서버가 동적인 페이지를 제공할 수 있도록 도와주는 어플리케이션이 서블릿이며, 동적인 페이지를 생성하는 어플리케이션이 CGI입니다

CGI(Common User Interface)란 ?

CGI는 웹서버와 프로그램을 연결시주는 일종의 프로토콜입니다. 웹 서버의 일부분으로 서버측에서 수행되는 다른 응용프로그램과 통신할 수 있는 기능을 제공합니다. 또한, CGI는 C, Java 등의 언어로 사용하여 작성하게 되는데 자바 CGI의 성능을 개선한 방법을 Servlet이라고 합니다.

Servlet 작성방법

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

    web.xml 파일을 사용하지 않습니다.
    자바 어노테이션(annontation)을 사용합니다
    앞에서 실습했던 firstweb에서 사용

@WebServlet("/ten")
public class TenServlet extends HttpServlet {}
  1. Servlet 3.0 spec 미만에서 사용하는 방법

    Servlet을 등록할 때 web.xml 파일에 등록

<servlet>
    <description></description>
    <display-name>TenServlet</display-name>
    <servlet-name>TenServlet</servlet-name>
    <servlet-class>exam.TenServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>TenServlet</servlet-name>
    <url-pattern>/ten</url-pattern>
</servlet-mapping>

Servlet 생명주기

  • WAS는 서블릿 요청을 받으면 해당 서블릿이 메모리에 있는지 확인합니다.
  • if(메모리에 없음){
    -해당 서블릿 클래스를 메모리에 올림(생성자 호출)
    -init() 메소드를 실행
    }
    -service() 메소드를 실행
  • was가 종료되거나, 웹 어플리케이션이 새롭게 갱신될 경우 destroy() 메소드가 실행됩니다.

service(request, response) 메소드

HttpServlet의 service메소드는 템플릿 메소드 패턴으로 구현

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

요청과 응답

WAS는 웹 브라우저로부터 Servlet 요청을 받으면

  • 요청할 때 가지고 있는 정보를 HttpServletRequest 객체를 생성하여 저장합니다
  • 웹 브라우저에게 응답을 보낼 때 사용하기 위하여 HttpServletResponse 객체를 생성합니다
  • 생성된 HttpServletRequest, HttpServletResponse 객체를 서블릿에게 전달합니다

HttpServletRequest

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

HttpServletResponse

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

출처

위의 내용은 부스트코스의 ‘Full-Stack Web Developer’ 과정을 공부한 내용입니다.

출처 : http://www.edwith.org/boostcourse-web/joinLectures/12952

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
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
글 보관함