서블릿의 라이프 사이클

hanahana·2022년 9월 12일
0
post-thumbnail

서블릿생성

  • 서블릿을 생성할때 int destory service를 선택하여 해당메소드를 만든다
@WebServlet("/lifeCycleServlet")
public class lifeCycleServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	public lifeCycleServlet() {
		System.out.println("LifeCycleServlet 생성");
	}

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

	public void destroy() {
		System.out.println("destory호출");
	}

	protected void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		System.out.println("service호출");
	}

}
  • 콘솔창에 출력할 메세지를 생성한다.

서블릿에 접속한다.

첫 접속

  1. /lifeCycleServlet 이 주소에 접속하면 서버는 해당 객체가 있는지 확인한다
  2. 없는것을 확인하면 객체(lifeCycleServlet)를 생성한다
  3. init과 service가 호출되고 destroy는 호출되지 않는다.

새로고침한다.

  • 다른 메소드는 호출되지 않고 service만이 호출된다.

서블릿은 객체를 여러개 생성하지 않는다 요청이 여러번 들어오면 서비스만 호출한다.

서블릿을 수정한다

  • 이때 destroy메소드가 호출된다.
  • 수정했기때문에 현재 객체를 삭제 한것이다.

수정한 상태로 새로고침한다.

  • 그럼 대시 lifecycleServlet객체 생성, init호출 service호출이 이어진다.
  • 객체를 다시 생성한것이다.

기억할것

service는 response request를 담당한다.

init은 리소스를 로드한다

destory는 로드한 리소스를 다시 언로드 한다.

서블릿의 생명주기

  • was는 서블릿의 요청을 받으면 서블릿이 메모리에 있는지 확인
  • 메모리가 없으면 서블릿 클래스를 메모리에 올리고 init메소드를 실행한다
  • 있다면 위의 작업을 하지 않는다,
  • 서비스 메소드를 실행한다
  • was가 종료되거나 웹 어플리케이션이 갱신되면 destroy메소드가 실행된다.

service

  • httpServlet의 service메소드는 템플릿 메소드 패턴으로 구현
  • service가 가지고 있는 get, post의 자식 메소드를 실행함

doGet, doPost 오버라이드 하기

  • 왼쪽키 source - override / implements Method 눌러서 doget과 dopost 선택해서 오버라이드 함
@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html");
		PrintWriter out = response.getWriter();
		out.println("<html>");
		out.println("<head><title>form</title></head>");
		out.println("<body>");
		out.println("<form method='post' action='/firstweb/LifecycleServlet'>");
		out.println("name : <input type='text' name='name'><br>");
		out.println("<input type='submit' value='ok'><br>");                                                 
		out.println("</form>");
		out.println("</body>");
		out.println("</html>");
		out.close();
	}

	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html");
		PrintWriter out = response.getWriter();
		String name = request.getParameter("name");
//get에서 보낸  name값을 request로 받음
		out.println("<h1> hello " + name + "</h1>");
		out.close();
	}
  • get에서 만든 폼을 확인하면 /firstweb/LifecycleServlet에 post방식으로 연결되는걸 확인할수있다.
  • 입력값은 name이라는 name으로 설정돼있으며 입력된 name은 post메소드에 전달되었고 그 전달값을 h1태그를 통해 출력된다.
profile
hello world

0개의 댓글