Servlet vs Controller

 

Servlet 은 class 마다 @WebServlet 을 사용해야 하기 때문에 클래스가 무한정 늘어나는 단점이 있다.

또한 HttpServlet 을 상속 받아야 하고 Service 메서드를 override 받아야 하기 때문에 한계가 명확하다.

파라미터 또한 HttpServletRequest, HttpServletResponse 를 모두 받아야 한다.

 

이런 점에서 Controller 가 더 발전된 형태이다.

 

 

 

Servlet 의 생성주기

package com.fastcampus.app;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/hello")
public class HelloServlet extends HttpServlet{
 
	@Override
	public void init() throws ServletException {
		// 서블릿이 초기화 될 때 자동 호출 되는 메서드
		// 1. 서블릿의 초기화 작업 담당
		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() {
    	// 3. 뒷 정리 - 서블릿이 메모리에서 제거 될 때 Servlet Container에 의해서 자동 호출
		System.out.println("[HelloServlet] destroy() is called.");
	}

	
}

실행 시

[HelloServlet] init() is called.
[HelloServlet] service() is called.

 

 

서블릿 : Singleton, 1개 인스턴스 재활용

 

 

 

JSP(Java Server Pages)란? 

 

서블릿과 비슷하다, 서블릿으로 변환

twoDice.jsp =>변환 twoDice_jsp.java(서블릿 소스 파일) =>(컴파일) twoDice_jsp.class(서블릿 클래스 파일)

<%@ 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>
public final class twoDice_jsp extends org.apache.jasper.runtime.HttpJspBase
	implements org.apache.jasper.runtime.JspSourceDependent, org.apache.jasper.runtime.JspSourceImports {
    
    int getRandomInt(int range) {
    	return new Random().nextInt(range)+1;
	}
    
	public void _jspService(final javax.servlet.http.HttpServletReqeust request,
    						final javax.servlet.http.HttpServletResponse response)
      throws java.io.IOException, javax.servlet.ServletException {
// ...
	int idx1 = getRandomInt(6);
    int idx2 = getRandomInt(6);
    
    	out.write("\t<html>\n");
        out.write("\t<head>\n");
        out.write("\t\t<title>twoDice.jsp<title>\n");
        out.write("\t</head>\n");
        out.write("\t<body>\n");
        out.write("\t<img src='resources/img/dece>");
        out.write(idx1);
        out.write(".jpg'>\n");
 // ...

 

JSP 의 호출 과정

 

초기화

 

서블릿 : lazy-init

스프링 : early-init

 

 

 

 

JSP 의 기본 객체

생성없이 사용할 수 있는 객체

기본 객체 타입  설명
request   요청 정보가 담겨있는 객체
response   요청에 응답을 작성할 때 사용
session   HTTP session 을 구현한 객체, 세션 정보 저장에 사용
application   Web Application 전체에서 공유하는 객체
config   JSP 페이지에 대한 설정 정보가 담긴 객체
page   JSP 페이지 객체 자신
pageContext   JSP 페이지의 context 정보를 제공
out   응답에 포함될 내용을 출력할 때 사용
exception   예외가 발생했을 때 생성되는 예외 객체

 

복사했습니다!