ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Servlet/JSP | Servlet, JSP 란?
    programming/etc. 2020. 6. 16. 23:29

     

     

    Servlet 


    Servlet = Server + Applet 또는 Server + Let의 합성어

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

     

    Servlet은 Java코드 안에 HTML태그가 삽입되며 자바언어로 되어있어 JAVA가 확장자이다.   JAVA(HTML)

    웹 기반의 요청에 대한 동적인 처리나 서버에서 웹페이지 등을 동적으로 생성하거나 데이터 처리를 수행하기 위해

    자바로 작성된 프로그램이다.

     

    Servlet은 자바언어를 웹어플리케이션에서 더 개발하기 쉽도록 만든 API(라이브러리, 클래스 들) 이며 이 규약에 맞는

    라이브러리나 클래스들을 상속 및 구현하여 만든 클래스들을 Servlet서블릿 이라고 한다.

     

     

    특징

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

     

     

    JSP (  Java Server Pages ) 


    HTML 을 코딩하기 너무 어렵고 불편해서 HTML내부에 JAVA 코드를 삽입하는 형식이 JSP 이다. HTML(JAVA)

    다시 말하면 Servlet(서블릿)의 단점을 보완하고자 만든 Servlet 기반의 스크립트 기술이다.

     

    HTML 속에서 자바코드는 <% 소스코드 %> 또는 <%= 소스코드 %> 형태로 사용된다.

    이렇게 자바 소스코드로 작성된 부분은 웹 브라우저로 보내는 것이 아니라 웹 서버에서 실행되는 부분이다.

     

    서블릿만 이용해도 웹프로그래밍을 할 수 있지만 ! 자바에 대한 지식이 필요하며 화면 인터페이스 구현에 너무 많은 코드를 필요로 하는 등 비효율적인 측면들이 있다.

    때문에 서블릿을 작성하지 않고도 간편하게 웹프로그래밍을 구현하게 만든 기술이 JSP 이다.

     

    또한 컴파일과 같은 과정을 할 필요없이 JSP 페이지를 작성하여 웹 서버의 디렉토리에 추가만 하면 사용이 가능하다.

    서블릿의 규칙은 복잡하기 때문에 JSP가 나오게 되었는데 JSP 는 WAS 에 의하여 서블릿 클래스로 변환하여 사용되어 진다.

     

    JSP 는 Java소스를 사용하여 웹페이지에 접근하고 페이지 전환을 통하여 웹브라우저에 전달한다.

     

    MVC 패턴에서 View로 이용된다.

     

     

     

    JSP 동작 구조

     

    웹 서버가 사용자로부터 서블릿에 대한 요청을 받으면 서블릿 컨테이너에 그 요청을 넘긴다.

    요청받은 컨테이너는 HTTP Request와 HTTP Response 객체를 만들어서 서블릿 doPost()나 doGet() 메소드 중 하나를 호출한다.

     

    만약 서블릿만 사용한다면 사용자가 요청한 웹 페이지를 보여주기위해 out객체의 println메소드를 사용하여 HTML문서를 작성해야하는데 이것은 추가/수정이 어렵고 가독성도 떨어지기 때문에 JSP를 사용하여 비지니스 로직과 프레젠테이션 로직을 분리한다.

     

    서블릿은 데이터의 입력,수정 등에 대한 제어를 JSP에게 넘겨 프레젠테이션 로직을 수행한 후 컨테이너에게 Response를 전달한다.

     

    만들어진 결과물은 사용자가 해당 페이지를 요청하면 컴파일이 되어 자바파일을 통해 .class파일이 만들어지고 두 로직이 결합되어 클래스화 하는 것을 확인할 수 있다. 

     

    즉, Servlet으로 out객체의 println메소드를 사용하여 구현해야하는 번거로움을 JSP가 대신 수행해준다는 것을 알 수 있다.

     

     

     

     

     

    Servlet Container (서블릿 컨테이너)


    서버에 서블릿을 만들었다고 해서 스스로 작동하는 것이 아니고 서블릿을 관리해주는 것이 필요하다.

    그 역할을 하는 것이 '서블릿 컨테이너' 이다. 

    예를 들어, 서블릿이 어떠한 역할을 수행하는 정의서라고 보면, 서블릿 컨테이너는 그 정의서를 보고 수행한다고 볼 수 있다. 

    서블릿 컨테이너는 클라이언트의 요청(Request)을 받아 주고 응답(Response)할 수 있게 웹서버와 소켓을 만들어 통신한다. 

    대표적인 서블릿 컨테이너로 톰캣(Tomcat)이 있다.

    톰캣은 실제로 웹서버와 통신하여 JSP와 Servlet이 작동하는 환경을 제공해 준다. 

    * 앞에 포스팅한 WAS 참고

     

     

     

     

    배포서술자(DD, web.xml)


    • servlet, Error page, Listener, Fillter, 보안 설정 등 웹 애플리케이션의 설정 파일이다.
    • URL과 실제 서블릿의 매핑 정보를 가지고 있다.
    • 하나의 웹 애플리케이션에 하나만 존재한다.
    • 보통 web Document Root 에 WEB-INF 디렉터리 아래에 있다.

     

     

     

     

    MVC 패턴의 Servlet과 JSP


     

     

    JSP만을 이용한 개발 방식( Model1 방식 ) 이 유행하다 현재는 유지보수단계에서 많은 단점을 느껴 각각의 역할을 나누어 Servlet과 JSP를 동시에 사용하여 개발하는 방식( Model2 방식 )을 주로 사용하고 있다.

     

    JSP는 HTML태그 사용이 용이하고 자바코드 사용이 불편하기 때문에 웹 애플리케이션에서 사용자에게 결과를 보여주는 View (Client)를 담당하고 

     

    Servlet은 자바코드 작성이 편리하기 때문에 주로 화면과 통신하여 자료를 받아 가공하고 가공한 자료를 다시 화면에 전달하는 Controller 역할을 하고 있다.

     

    프레젠테이션 로직과 비지니스 로직이 분리된 형태이다.

     

    MVC패턴 Model2 기능
    Model 서비스클래스 or
       자바빈
    비지니스 로직을 처리하는 모든 것이 모델에 속한다.
    컨트롤러에서 특정 로직에 대한 처리 요청(게시판 글쓰기, 회원가입 등) 이 들어오면
    이를 수행하고 수행결과를 컨트롤러에 반환한다.

    (Request객체나 Session객체에 저장하기도 함)
    View JSP 페이지 클라이언트에 출력되는 화면을 말한다.
    모델1과 달리 로직처리를 위한 코드가 내포되어있지 않다.
    요청결과의 출력 뿐만 아니라 컨트롤러에 요청을 보내는 용도로 사용된다.
    (Request객체나 Session객체에 저장된 정보를 토대로 화면에 출력)
    Controller Servlet MVC패턴(Model2) 모든 흐름제어를 맡는다.
    브라우저로 요청이 들어오면 어떤 요청이 들어오는지 분석하여
    이 요청을 처리하기 위한 모델을 사용하여 처리한다.

    사용한 모델로부터 처리한 결과를 받으면 추가로 처리하거나 가공해야 할 정보가 있다면 처리 후 Request객체나 Session객체에 저장하고 View(JSP페이지)를 선택하여 Forward나 Redirect하여 클라이언트에 출력한다.

     

     

     

     

     

    참고: https://mangkyu.tistory.com/14,https://sjh836.tistory.com/126, 

    https://m.blog.naver.com/acornedu/221128616501

    'programming > etc.' 카테고리의 다른 글

    개념정리 | Web Server & WAS 의 개념과 차이  (0) 2020.06.12
    개념정리 | MVC 패턴  (0) 2020.05.28
Designed by Tistory.