서블릿 생명주기 (Servlet Life Cycle) 2

JOY·2022년 1월 11일
0

[Java] Servlet

목록 보기
5/9
post-thumbnail

📌서블릿 생명주기 (Servlet Life Cycle) 2


1. 서블릿 생명주기 (Servlet Life Cycle)

init() 👉 service() 👉 destroy()

  • WAS는 서블릿 요청을 받으면 해당 서블릿이 메모리에 있는지 확인
if ( 메모리에 없음 ) {    해당 서블릿 클래스를 메모리에 올림    init() 메소드를 실행 }    service() 메소드를 실행
  • WAS가 종료되거나, 웹 어플리케이션이 새롭게 갱신될 경우,
    destroy() 메소드가 실행 됨

2. service(request, response) 메소드

 service(request, response)

  • HttpServlet의 service 메소드는 템플릿 메소드 패턴으로 구현
    • 클라이언트 요청 - GET 👉 doGet(request, response) 메소드 호출
    • 클라이언트 요청 - POST 👉 doPost(request, response) 메소드 호출

3. LifecycleServlet 수정

  1. service(request, response) 메소드 주석처리
  2. HttpServlet의 doGet(request, response) 메소드 오버라이딩
  3. HttpServlet의 doPost(request, response) 메소드 오버라이딩

 




@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 test 호출!!");
	}
    
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
    					throws ServletException, IOException {
		resp.setContentType("text/html");
		PrintWriter out = resp.getWriter();
		
		//html을 응답으로 보내줌
		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 req, HttpServletResponse resp) 
    					throws ServletException, IOException {
		resp.setContentType("text/html");
		PrintWriter out = resp.getWriter();
		
		//요청결과 name값을 응답결과로 출력
		String name = req.getParameter("name");
		out.println("<h1> hello " + name + "</h1>");
		out.close();
	}

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

📍 실행 하기

  • 클라이언트 요청 - GET 👉 doGet(request, response) 메소드 호출
    해당 서블릿에 URL 주소를 직접 입력, 링크 클릭

  • out.println 에 문자열로 넣어주었던 코드들이 그대로 응답 결과로 출력된 것을 확인

<html>
<head><title>form</title></head>
<body>
<form method='post' action='/firstweb/LifecycleServlet'>
name : <input type='text' name='name'><br>
<input type='submit' value='ok'><br>
</form>
</body>
</html>
  • form 태그 속성 알고가기

    속성명속성값설명
    methodGET, POST폼을 서버에 전송할 http 메소드 지정
    actionURL폼 데이터를 전송할 서버 스크립트 파일 지정
    • URL에서 직접 요청했을 때 method 값은 GET


  • 클라이언트 요청 - POST 👉 doPost(request, response) 메소드 호출

    submit을 클릭하면 action의 속성값 URL로 요청

    request 객체로부터 name 파라미터 값을 가져와 출력

profile
Just Do IT ------- 🏃‍♀️

0개의 댓글