Servlet과 JSP를 알아보기 이전에 Web Service의 기본적인 동작 과정을 알아보자.
- Web Service의 기본적이 동작 과정
HTML Form -> Servlet -> HTML Page
- 사용자가 웹페이지 form(HTML Form)을 통해 자신의 정보를 입력한다.
- Servlet의 doGet() 또는 doPost() 메서드는 입력한 form data에 맞게 DB 또는 다른 소스에서 관련된 정보를 검색한다.
- 이 정보를 이용하여 사용자의 요청에 맞는 적절한 동적 컨텐츠(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)에게 위임한다.
- web.xml에서 어떤 URL과 매핑되어 있는지 확인
- 클라이언트의 요청 URL을 보고 적절한 Servlet을 실행
2) Web Container는 service()메서드를 호출하기 전에 Servlet 객체를 메모리에 올린다.
- Web Container는 적절한 Servlet 파일을 컴파일한다.
- .class 파일을 메모리에 올려 Servlet 객체를 만든다.
- 메모리에 로드될 떄 Servlet 객체를 초기화하는 init() 메서드가 실행된다.
3) Web Container는 Request가 올 때마다 thread를 생성하여 처리한다.
- 각 thread는 Servlet의 단일 객체에 대한 service() 메서드를 실행한다.
- Servlet Life Cycle:
init() -> service() -> destroy()
- WAS는 웹 브라우로부터 요청을 받으면
- 요청할 때 가지고 있는 정보를 HttpServletRequest 객체를 생성하여 저장한다.
- 웹 브라우저에게 응답을 보낼 때 사용하기 위하여 HttpServletResponse객체를 생성한다.
- 생성된 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이 있다.
1. page: Container에 명령을 제공하는데 사용된다.
2. include: 변환 단계에서 다른 외부 파일의 내용을 현재 JSP에 병합하도록 Container에 지시한다.
3. taglib: JSP API를 사용하면 HTML 또는 XML 태그처럼 보이는 사용자 정의 태그를 정의할 수있다.
6. JSP Action
JSP Action XML 구문 안의 구조들을 사용하여 WAS의 동작을 제어한다.
- <jsp:forward> action: 다른 리소스로 요청을 전달할 때 사용한다.
- <jsp:include> action: 현재 JSP페이지에 다른 리소스를 포함시키는데 사용한다.
- <jsp:useBean> action: 해당하는 Bean(자바 객체)이 이미 존재하는지 확인한다, 객체가 없으면 지정된 객체를 생성한다.
- <jsp:setProperty> action: Bean의 속성을 설정한다.
- <jsp:getProperty> action: 주어진 속성값을 가져오는데 사용되며 이를 문자열로 변환하고 동적인 웹 페이지를 생성하는데 해당 내용을 사용할 수 있다.
JSP도 여기까지 알아보고 Servlet과 JSP의 관계를 알아보자.
- Servlet 과 JSP의 관계
JSP만을 이용하는 모델
JSP가 사용자의 요청을 받아 Java Bean(DTO, DAO)을 호출하여 적절한 동적인 페이지를 생성한다.
동작 과정:
- JSP로 작성된 프로그램은 내부적으로 WAS에서 Servlet 파일로 변환
- JSP 태그를 분해하고 추출하여 다시 순수한 HTML 웹 페이지로 변환
- 클라이언트로 응답
특징:
- 개발 속도가 빠르다.
- 배우기 쉽다.
- 프로젠테이션 로직(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 구조란(나온 김에)
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)
'JAVA' 카테고리의 다른 글
[JAVA] JSP 게시판 따라 만들어보고 서버 배포까지 공부해보기(EC2, Docker) (0) | 2022.12.16 |
---|---|
[Java] Spring 프레임워크를 '공부' 해보자 (0) | 2022.06.23 |
[Java] Java와 Core Java의 차이를 '공부' 해보자 (0) | 2022.06.23 |
[Java] 자바 '공부' 해보자(입문) (0) | 2022.06.22 |
[Java] Spring 커리큘럼 (0) | 2022.06.21 |