백엔드

Spring > 서블릿과 jsp 1.서블릿과 컨트롤러 비교

coyojo 2023. 3. 7. 23:58

< 서블릿>  

* @WebServlet은  컨틀롤러에서 @Controller + @RequestMapping을 합친것과 같다.

 

* Controller는 상속을 받지 않지만 Servlet은  HttpServelt을 상속받아야 한다.

 

* public void service(HttpServletRequest request, HttpServletResponse respose) 과 같이 

   service에 HttpServletRequest와 HttpServletResponse를 적어줘야한다.

 

* @ ( annotation)을 클래스에 붙이므로 , 즉 url 맵핑을 클래스 단위로 하기때문에 

   맵핑 하나당 클래스를 만들어 줘야한다.  

 

@WebServlet("/rollDice2")  
public class TwoDiceServlet extends HttpServlet {  //단일상속 
	@Override
	public void service(HttpServletRequest request, HttpServletResponse respose) 
	throws IOExecption {
    
    response.setContentType("text/html");
    response.setCharacterEncoding("utf-8");
    PrintWriter out = response.getWriter();

 

 

< 컨트롤러>  

 * 상속을 안 받는다.

 

 * 매개변수에 필요한 것만 적으면 된다.

 

 * 컨트롤러는 메소드 단위로 맵핑을 하기때문에 하나의 클래스에 또다른 메서드를 만들기만하면 

  또 다른 맵핑을 할 수 있다, 

@Controller
public class TwoDice { 
	@RequestMapping("/rollDice")
    public void main(HttpServletResponse response) throw IOException { 
    
    response.setContentType("text/html");
    response.setCharacterEncoding("utf-8");
    PrintWriter out = response.getWriter();

 

< 서블릿의 생명주기 >

 

@WebServlet("/hello")
public class ServletLifeCycle extends HttpServlet {
	
	// 서블릿 초기화 -  서블릿이 생성 또는 리로딩 때, 단 한번만 수행됨 
	public void init() throws ServletException {
		System.out.println("init()초기화");
	}
	
	public void service(HttpServletRequest request, HttpServletResponse response) {
		//1. 입력
		//2. 처리
		//3. 출력
		System.out.println("service() 호출");
	}
	
	public void destroy() {
		// 뒷정리 작업 - 서블릿이 제거( unload) 될 때, 단 한번만 수행됨 
	}

}

  

요청하는 서블릿 인스턴스가 존재하지 않으면 1)  서블릿 클래스 로딩 & 인스턴스 생성  --> 2) init() 호출 --->3) service()

 

요청하는 서블릿 인스턴스가 존재하면 인스턴스 생성없이 바로 service() 호출부터 진행한다.