Servlet(1일차)

지환·2023년 11월 30일
0

Jsp & Servlet

목록 보기
3/21
post-thumbnail

서블릿

  • 서버쪽에서 실행되면서 클라이언트의 요청에 따라 동적으로 서비스를 제공하는 서버클래스이다.

  • 서블릿이 되기위한 조건은 HttpServlet을 상속받는 것이다.

  • 서블릿 라이프 사이클을 갖는다. - 관리 - Tomcat(WebApplication Server - jsp - api,jar, Servlet -api.jar)

  • 서블릿 생명주기 : init()-service() - destory()

  • main이 없어도 되는 이유는 브라우저에서 호출해준다.(@WebServlet)

    • 스프링으로 따지면 , (@WebServlet-서블릿)@Controller + @RequestMapping(스프링)

    • 두개 차이점은 스프링은 @Controller + @RequestMapping을 메소드 앞에 쓴다. = 메소드마다 url을 갖는다.

    • @WebServlet은 클래스 앞에온다.

  • 서버쪽에서 요청,http 프로토콜을 사용한다.

    • http(Stateless) : 비상태프로토콜 - 요청하기 - 처리하기 - 응답하기
      • 요청방식 : get / post (RestFul Api)
  • 서블릿은 화면을 처리하지않고(할 수는 있지만 생산성이 떨어진다) 컨트롤 계층의 역할을 한다.

  • JSP는 화면은 담당한다. (View 계층이다)

  • JSP는 서블릿의 부분집합이다.

정리하면, 자바 > 서블릿 > JSP(html+css+js+java+orcle)

  • JSP는 서버사이드이다. (장애 발생의 원인 - 시점문제 - lazy init(jsp) || early init(스프링-서블릿)
    • 왜 jsp는 lazy init을 발생했을까?
      • 요청이 일어나면 그때 생성할게
    • 스프링은 왜 early init을 했을까?
      • 요청이 일어나지 않았는데 쥐고 있다.
      • 스프링(둘 다 지원 / BeanFactory-게으른 , ApplicationContext-이른)
      • BeanFactory는 Spring-beans.jar (게으른-Servlet)
      • ApplicationContext - context.jar(이른)
    • jsp는 왜 게으른인가?
      • jsp -> (jsp-api.jar)XXX_jsp.java -> (Servlet-api.jar)XXX_jsp.class
  • JSP ( Init() - service() - destory() - jsp 수정 - service() - destory() - 수정 없어)
    • F5누르면 service가 호출된다.
package com.ch5;

import java.io.IOException;

import jakarta.servlet.ServletException;
import jakarta.servlet.ServletRequest;
import jakarta.servlet.ServletResponse;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;

/**
 * 서블릿이 되기위한 조건은 HttpServlet을 상속받는 것이다.
 * 자바 > 서블릿
 * 서블릿 라이프 사이클을 갖는다. - 관리 - Tomcat(WebApplication Server - jsp - api,jar, Servlet -api.jar)
 * init()-service() - destory()
 * 
 */
@WebServlet("/hello")
public class HelloServlet extends HttpServlet{

	/**
	 * 시리얼번호는 가상번호가 쓰는 번호이다.
	 */
	private static final long serialVersionUID = 1L;
	

	@Override
	public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
		System.out.println("service 호출 ");
	
	}


	@Override
	public void destroy() {
		System.out.println("service호출");
	}


	@Override
	public void init() throws ServletException {
		System.out.println("init호출");
		
	}


	

}

서블릿동작과정

업로드중..

  • 클라이언트가 웹 서버에 요청하면 웹 서버는 그 요청을 톰캣과 같은 웹어플리케이션 서버에 위임한다. -> 그러면 WAS는 각 요청에 해당하는 서블릿을 실행한다.

    서블릿의 특징은

    • 서버쪽에서 실행되면서 기능을 수행한다.
    • 정적인 웹 프로그램의 문제점을 보완하여 동적인 여러가지 기능을 제공한다.
    • 스레드 방식으로 실행된다.
    • 웹 브라우저에서 요청 시 기능 수행한다.
  • 서블릿이(DELECT/GET/HEAD/POST) request를 수행하기 위해 Service()를 통해서 호출한다.

  • 클라이언트 요청 시 public service() 메소드를 먼저 호출한 후 다시 protected Service() 호출한다. 그런 다음 다시 request 종류에 따라 doxxx() 메소드를 호출하는 과정으로 실행된다.

	package com.example.demo.ch5;

import java.io.IOException;
import jakarta.servlet.ServletException;
import jakarta.servlet.ServletRequest;
import jakarta.servlet.ServletResponse;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;

@WebServlet("/hello")
public class HelloServlet extends HttpServlet{
  	/**
	 * 시리얼번호는 가상번호가 쓰는 번호이다.
	 */
	private static final long serialVersionUID = 1L;
	

	@Override
	public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException {
		System.out.println("service 호출 ");
	
	}


	@Override
	public void destroy() {
		System.out.println("service호출");
	}


	@Override
	public void init() throws ServletException {
		System.out.println("init호출");
		
	}

  
}

업로드중..

  • 최초의 한 번은 init이 실행되지만, 새로고침을 하면 service만 호출된다.

    • 서블릿 초기화 : 서블릿이 생성 또는 리로딩때 단 한번만 수행된다.

    • 서블릿이 초기화 될 때 자동 호출되는 메소드 (개발자가 신경쓰지 않아도 된다.)

    • Service 브라우저 새로고침 누르면 service메소드만 호출되고 처리된다.

      • 호출될 때마다 반복적으로 수행된다.
    • destory

      • 서블릿이 제거될 때 단 한번만 실행된다.
      • 서블릿이 메모리에서 내려올 때
      • 어플리케이션 종료
      • 주석이라고 수정 후 저장하면 리로딩한다.

index.jsp

demo!!!
<br>
hello

별다른 init이나 service 호출이 없다.

서블릿 계층구조

업로드중..

  • Servelt , ServletConfig 인터페이스를 구현해 제공하며, GenericServlet 추상 클래스가 이 두 인터페이스의 추상 메소드를 제공한다.

  • GenericServlet을 HttpServlet이 상속받는다.

profile
아는만큼보인다.

0개의 댓글