

1. 서블릿이란?
자바 서블릿(Java Servlet)은 자바를 사용하여 웹페이지를 동적으로 생성하는 서버측 프로그램 혹은 그 사양을 말하며, 흔히 "서블릿"이라 불린다. 자바 서블릿은 웹 서버의 성능을 향상하기 위해 사용되는 자바 클래스의 일종이다. 서블릿은 JSP와 비슷한 점이 있지만, JSP가 HTML 문서 안에 Java 코드를 포함하고 있는 반면, 서블릿은 자바 코드 안에 HTML을 포함하고 있다는 차이점이 있다.
JSP - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. -->
ko.wikipedia.org
2. JSP란?
JSP 란 JavaServer Pages 의 약자이며
HTML 코드에 JAVA 코드를 넣어 동적웹페이지를 생성하는 웹어플리케이션 도구이다.
JSP 가 실행되면 자바 서블릿(Servlet) 으로 변환되며 웹 어플리케이션 서버에서 동작되면서 필요한 기능을 수행하고
그렇게 생성된 데이터를 웹페이지와 함께 클라이언트로 응답한다.
3. 서블릿과 JSP
JSP = 서블릿 (거의 비슷)
서블릿을 발전시킨 것이 Spring

두 코드는 같은데,
@Cotroller + @RequestMapping = @WebServlet
웹서블릿은 HttpServlet을 상속받아야한다.
자바는 단일 상속만 받아야하므로,
스프링에서 컨트롤러로 개선이 되었다.
서블릿은 클래스에 URL 매핑을 하므로 여러 개의 클래스를 만들어야한다.
컨트롤러는 메소드에 URL 매핑을 할 수 있으므로 한 개의 클래스에 여러 개의 매핑을 할 수 있다
4. 서블릿의 생명 주기

<java />
@WebServlet("/hello")
public class HelloServlet extends HttpServlet{
//init 메소드란 서블릿이 초기화될 때 자동 호출되는 메소드
//1. 서블릿의 초기화 작업 담당
//2. 처음에 한번만 호출
@Override
public void init() throws ServletException {
System.out.println("[HelloServlet] init() is called");
}
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1.입력
//2.처리
//3.출력
System.out.println("[HelloServlet] service() is called");
}
//서블릿이 갱신되어서 리로딩 될 때
//서블릿이 메모리에서 내려올 때
@Override
public void destroy() {
System.out.println("[HelloServlet] destroy() is called");
}
}


5. 서블릿의 요청과 응답 과정

서블릿 콘텍스트 안에는
children이라는 멤버가 있다
MAP 형태로 되어있으며
서블릿들이 다 등록되어있다.
요청이 왔을 때 서블릿 객체가 존재하는지 children 멤버를 확인한다.
6. 서블릿의 패턴
기본적으로 싱글톤 패턴이다.
1개의 인스턴스만 만들어지기 때문!
인스턴스가 있는지 확인하고 있으면 그것을 계속 재활용하기 때문에
기본적으로 싱글톤 패턴이다.
7. JSP(Java Server Page)
JSP로 작성을 하면 서블릿으로 자동으로 변환된다.
HTML안에 자바 코드를 넣는 것을 JSP라고 한다.

JSP의 경로는 src/main/webapp
twoDice.jsp
<java />
<%@ page contentType="text/html;charset=utf-8"%>
<%@ page import="java.util.Random" %>
<%-- <%! 클래스 영역 %> --%>
<%!
int getRandomInt(int range){
return new Random().nextInt(range)+1;
}
%>
<%-- <% 메서드 영역 - service()의 내부 %> --%>
<%
int idx1 = getRandomInt(6);
int idx2 = getRandomInt(6);
%>
<html>
<head>
<title>twoDice.jsp</title>
</head>
<body>
<img src='resources/img/dice<%=idx1%>.jpg'>
<img src='resources/img/dice<%=idx2%>.jpg'>
</body>
</html>
jsp페이지는 웹서블릿을 사용해서 매핑할 필요가 없다.
자동으로 매핑되기 때문에
우리는 jsp페이지를 호출하기만 하면 된다.


8. JSP의 호출 과정

요청이 들어오면
JspServlet이 무조건 받고, 객체 존재하는지 확인
없으면 서블릿 소스파일로 변환 후 컴파일한 뒤 클래스 파일을 만든다
객체를 생성하고 _jspService()를 호출 후 응답
만약 서블릿 인스턴스가 존재한다면
바로 서블릿 인스턴스를 응답시킨다
jsp파일이 변경되면 다시 변환-컴파일 과정을 거치고 객체를 다시 만든다.
jsp와 servlet은
처음부터 객체를 만들지 않고
첫번째 호출할 때 객체를 만든다.(요청할 때 응답 시간이 오래 걸린다)
9. 서블릿과 Spring의 차이
서블릿은 lazy-init(늦은 초기화) 가 기본이다.
Spring은 early-init을 기본으로 한다.
하지만 둘 다 싱글톤 패턴이고,
초기화 과정만 다를 뿐이다.
10. JSP에서 서블릿으로 변환되는 과정
(twoDice.jsp -> twoDice_jsp.java(서블릿))
11. JSP의 기본 객체와 그 종류
생성 없이 사용할 수 있는 객체가 있다.


본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
패스트캠퍼스 [직장인 실무교육]
프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.
fastcampus.co.kr
'패캠 챌린지' 카테고리의 다른 글
패스트캠퍼스 챌린지 - 10일차 [스프링의 정석:남궁성과 끝까지 간다] (0) | 2023.03.01 |
---|---|
패스트캠퍼스 챌린지 - 9일차 [스프링의 정석:남궁성과 끝까지 간다] (0) | 2023.02.28 |
패스트캠퍼스 챌린지 - 7일차 [스프링의 정석:남궁성과 끝까지 간다] (0) | 2023.02.26 |
패스트캠퍼스 챌린지 - 6일차 [스프링의 정석:남궁성과 끝까지 간다] (0) | 2023.02.25 |
패스트캠퍼스 챌린지 - 5일차 [스프링의 정석:남궁성과 끝까지 간다] (0) | 2023.02.24 |