본문 바로가기
JAVA

[Java] Servlet과 JSP 에 대해 '공부' 해보자 + MVC Architecture

by five-sun 2022. 6. 23.
728x90

Servlet과 JSP를 알아보기 이전에 Web Service의 기본적인 동작 과정을 알아보자.

 

- Web Service의 기본적이 동작 과정

HTML Form -> Servlet -> HTML Page

  1. 사용자가 웹페이지 form(HTML Form)을 통해 자신의 정보를 입력한다.
  2. Servlet의 doGet() 또는 doPost() 메서드는 입력한 form data에 맞게 DB 또는 다른 소스에서 관련된 정보를 검색한다.
  3. 이 정보를 이용하여 사용자의 요청에 맞는 적절한 동적 컨텐츠(HTML Page)를 만들어서 제공한다.

HTML Form : input elements가 포함된 웹페이지의 한 부분(section) = 주소창

 

Servlet이란 무엇이고 어떻게 동작할까

 

- Servlet이란?

웹 기반의 요청에 대한 동적인 처리가 가능한 Server Side에서 돌아가는 Java Program

Java 코드 안에 HTML 코드 (하나의 클래스)

웹 개발을 위해 만든 표준

 

- Servlet Program의 기본적인 동작 과정

1) Web Server는 HTTP request를 Web Container(Servlet Container)에게 위임한다.

  1. web.xml에서 어떤 URL과 매핑되어 있는지 확인
  2. 클라이언트의 요청 URL을 보고 적절한 Servlet을 실행

2) Web Container는 service()메서드를 호출하기 전에 Servlet 객체를 메모리에 올린다.

  1. Web Container는 적절한 Servlet 파일을 컴파일한다.
  2. .class 파일을 메모리에 올려 Servlet 객체를 만든다.
  3. 메모리에 로드될 떄 Servlet 객체를 초기화하는 init() 메서드가 실행된다.

 

3) Web Container는 Request가 올 때마다 thread를 생성하여 처리한다.

  1. 각 thread는 Servlet의 단일 객체에 대한 service() 메서드를 실행한다.

 

- Servlet Life Cycle: 

init() -> service() -> destroy()

 

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

  1. 요청할 때 가지고 있는 정보를 HttpServletRequest 객체를 생성하여 저장한다.
  2. 웹 브라우저에게 응답을 보낼 때 사용하기 위하여 HttpServletResponse객체를 생성한다.
  3. 생성된 HttpServletRequest, HttpServletResponse 객체를 Servlet에게 전달한다.

 

다음 JSP란 무엇일까

 

- JSP(Java Server Page)란

1) Java 언어를 기반으로 하는 Sever Side 스크립트 언어

  • HTML 코드에 Java코드를 넣어 동적인 웹 페이지를 생성하는 웹 어플리케이션 도구, JSP를 통해 정적인 HTML 과 동적으로 생성된 Contents 를 혼합하여 사용할 수 있다.

2) Servlet 기술의 확장

  • Servlet를 보완한 스크립트 방식 표준
  • Servlet의 모든 기능 + 추가적인 기능 등

- JSP의 내부적인 동작 과정

JSP 문서는 백그라운드에서 Servlet으로 자동으로 변환된다.

1) JSP가 실행되면 WAS는 내부적으로 JSP 파일을 Java Servlet(.java)으로 변환한다.

2) WAS는 이 변환한 Servlet을 동작하여 필요한 기능을 수행한다.

3)수행 완료 후 생성된 데이터를 웹 페이지와 함께 클라이언트로 응답한다.

 

- JSP의 특징

스크립트 언어이기 때문에 자바 기능을 그대로 사용할 수 있다.

Tomcat(WAS)이 이미 만들어 놓은 객체를 사용한다.(예시: request, response, session 등)

사용자 정의 태그를 사용하여, 보다 효율적인 웹 사이트를 구성할 수 있다.(JSTL을 사용)

HTML 코드 안에 Java 코드가 있기 때문에 HTML 코드를 작성하기 쉽다.

Servlet과 다르게 JSP는 수정된 경우 재 배포할 필요 없이 Tomcat(WAS)이 알아서 처리한다.

 

- JSP 문법

1. JSP Expression

<%= expression %>
  • JSP Expression element는 String으로 변환되어 Servlet의 출력에 삽인된다.
  • 동적인 페이지를 생성한다.
  • 세미클론(;)을 붙이지 않는다.

2. JSP Scriptlet

<% code fragment %>
  • JSP 2.0의 주요 구성 요소 중 하나
  • EL을 사용하면 Java Beans 구성 요소에 저장된 응용 프로그램 데이터에 쉽게 접근할 수 있다.

예시:  객체 접근: ${ObjectName}, property에 접근: ${ObjectName.property}

 

3. JSP Declaration

<%! declaration %>
  • JSP Declaration을 사용하면 Servlet 클래스에 삽입되는 메서드나 필드를 정의할 수 있다.

 

4. JSP Comment

<%-- comment --%>
  • 주석의 개념

 

5. JSP Directive

<%@ directive %>
  • JSP 페이지의 전체적인 구조에 영향을 미친다.
  • 전체 구조에 대해 WAS에 지시를 내린다.
  • 지시어에 들어가는 것은 page, include, taglib이 있다.

JSP Directive 예시

1. page: Container에 명령을 제공하는데 사용된다.

2. include: 변환 단계에서 다른 외부 파일의 내용을 현재 JSP에 병합하도록 Container에 지시한다.

3. taglib: JSP API를 사용하면 HTML 또는 XML 태그처럼 보이는 사용자 정의 태그를 정의할 수있다.

 

6. JSP Action

JSP Action XML 구문 안의 구조들을 사용하여 WAS의 동작을 제어한다.

  1. <jsp:forward> action: 다른 리소스로 요청을 전달할 때 사용한다.
  2. <jsp:include> action: 현재 JSP페이지에 다른 리소스를 포함시키는데 사용한다.
  3. <jsp:useBean> action: 해당하는 Bean(자바 객체)이 이미 존재하는지 확인한다, 객체가 없으면 지정된 객체를 생성한다.
  4. <jsp:setProperty> action: Bean의 속성을 설정한다.
  5. <jsp:getProperty> action: 주어진 속성값을 가져오는데 사용되며 이를 문자열로 변환하고 동적인 웹 페이지를 생성하는데 해당 내용을 사용할 수 있다.

JSP Action 예시

JSP도 여기까지 알아보고 Servlet과 JSP의 관계를 알아보자.

 

- Servlet 과 JSP의 관계

JSP만을 이용하는 모델

JSP가 사용자의 요청을 받아 Java Bean(DTO, DAO)을 호출하여 적절한 동적인 페이지를 생성한다.

동작 과정:

  1. JSP로 작성된 프로그램은 내부적으로 WAS에서 Servlet 파일로 변환
  2. JSP 태그를 분해하고 추출하여 다시 순수한 HTML 웹 페이지로 변환
  3. 클라이언트로 응답

특징:

  • 개발 속도가 빠르다.
  • 배우기 쉽다.
  • 프로젠테이션 로직(View)과 비즈니스 로직(Controller)이 혼재한다.
  • JSP 코드가 복잡해져 유지 보수가 어려워진다.

JSP와 Servlet을 모두 이용하는 모델 (MVC 구조)

  • JSP와 Servlet을 모두 사용하여 프레젠테이션 로직(View)과 비즈니스 로직(Controller)을 분리한다.
  • View(보여지는 부분)는 HTML이 중심이 되는 JSP를 사용한다.
  • Controller(다른 자바 클래스에 데이터를 넘겨주는 부분)는 Java 코드가 중심이 되는 Servlet을 사용한다.
  • Model은 Java Beans로, DTO와 DAO를 통해 Mysql과 같은 Data Storage에 접근

MVC 패턴

*MVC 구조란(나온 김에)

Model, View, Controller를 분리한 디자인 패턴

1) Model: 애플리케이션의 상태를 나타낸다. Java Beans

2) View: 디스플레이 데이터 또는 프레젠테이션, JSP

3) Controller: View와 Model 사이의 인터페이스 역할, 사용자 입력 및 명령을 수신하여 그에 따라 적절하게 변경, Servlet

 

동작 과정:

1) 클라이언트는 Servlet으로 요청을 보낸다.

2-1) Servlet은 DB와 연결된 Java Bean 객체를 생성한다.

2-2) Java Bean은 DB에서 적절한 정보를 가져와 저장한다.

2-3) Servlet에서 추가적인 비즈니스 로직 과정을 수행한다.

3) Servlet은 JSP 페이지와 통신한다.

4) JSP 페이지는 Java Bean과 통신한다.

5) JSP 페이지가 클라이언트에 응답한다.

 

*참고자료: [Web] Servlet과 JSP의 차이와 관계 - Heee's Development Blog (gmlwjd9405.github.io)

 

[Web] Servlet과 JSP의 차이와 관계 - Heee's Development Blog

Step by step goes a long way.

gmlwjd9405.github.io

 

728x90