Web

JSP 라이프싸이클

똥태 2021. 11. 13. 16:18

WAS는 웹브라우저로부터 JSP에 대한 요청을 받게되면 JSP코드 -> 서블릿 코드로 변환 후 컴파일하여 실행한다.

 

JSP의 라이프싸이클은 JSP 코드를 서블릿으로 변환하는 첫 단계를 시작으로 이후 단계는 서블릿의 라이프 싸이클과 같다.

 

JSP 실행순서

  1. 브라우저가 웹서버에 JSP에 대한 요청 정보를 전달한다.
  2. 만약 브라우저가 요청한 JSP가 최초로 요청된 경우라면
    1. 웹 컨테이너(톰캣 등)는 jsp 코드를 서블릿 코드로 (.java) 변환한다.
    2. 서블릿 코드를 컴파일하여 클래스파일을 만든다.(.class)
    3. 서블릿 클래스를 로딩하고 인스턴스를 생성한다.
    4. jspInit() 메소드를 호출하여 초기화한다.
  3. 서블릿이 실행되어 요청을 처리하고 응답정보를 생성한다.

 

웹컨테이너는 jsp코드를 서블릿코드(.java)로 변환한다음 이를 .class 파일로 컴파일한다.

 

 


실제 코드를 살펴보자

 

 

exam01.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
	int total = 0;

	for(int i=1; i<=10; i++){
		total += i;
	}
%>

<h1>1부터 10까지의 합은 <%=total%> </h1>

</body>
</html>

 

 

서버를 실행하게되면 java파일과 class파일이 만들어진 것을 볼 수 있다.

<java파일과 class파일이 만들어진것을 볼 수 있다.>

 

 

exam01_jsp.java 파일

  public void _jspInit() {
  }

  public void _jspDestroy() {
  }

  public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
      throws java.io.IOException, javax.servlet.ServletException {

    final java.lang.String _jspx_method = request.getMethod();
    if (!"GET".equals(_jspx_method) && !"POST".equals(_jspx_method) && !"HEAD".equals(_jspx_method) && !javax.servlet.DispatcherType.ERROR.equals(request.getDispatcherType())) {
      response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, "JSP들은 오직 GET, POST 또는 HEAD 메소드만을 허용합니다. Jasper는 OPTIONS 메소드 또한 허용합니다.");
      return;
    }

    final javax.servlet.jsp.PageContext pageContext;
    javax.servlet.http.HttpSession session = null;
    final javax.servlet.ServletContext application;
    final javax.servlet.ServletConfig config;
    javax.servlet.jsp.JspWriter out = null;
    final java.lang.Object page = this;
    javax.servlet.jsp.JspWriter _jspx_out = null;
    javax.servlet.jsp.PageContext _jspx_page_context = null;


    try {
      response.setContentType("text/html; charset=UTF-8");
      pageContext = _jspxFactory.getPageContext(this, request, response,
      			null, true, 8192, true);
      _jspx_page_context = pageContext;
      application = pageContext.getServletContext();
      config = pageContext.getServletConfig();
      session = pageContext.getSession();
      out = pageContext.getOut();
      _jspx_out = out;

      out.write("\r\n");
      out.write("<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\r\n");
      out.write("<html>\r\n");
      out.write("<head>\r\n");
      out.write("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\r\n");
      out.write("<title>Insert title here</title>\r\n");
      out.write("</head>\r\n");
      out.write("<body>\r\n");
      out.print(request.getSession().getServletContext().getRealPath("/"));
      out.write('\r');
      out.write('\n');

	int total = 0;

	for(int i=1; i<=10; i++){
		total += i;
	}

      out.write("\r\n");
      out.write("\r\n");
      out.write("<h1>1부터 10까지의 합은 ");
      out.print(total);
      out.write(" </h1>\r\n");
      out.write("\r\n");
      out.write("</body>\r\n");
      out.write("</html>");

 

_jspService() 안에 jsp에서 작성한 코드들이 들어있는 것을 확인 할 수 있다.

 

 


jsp에서 _jspService() 가 아닌 곳에 코드를 작성하게 하고 싶다면 선언식을 이용한다 <%! %>

 

exam01.jsp

<body>
<%
	int total = 0;

	for(int i=1; i<=10; i++){
		total += i;
	}
%>

<h1>1부터 10까지의 합은 <%=total%> </h1>


<%! 
public void jspInit() {
	System.out.println("jspInit()!");
}


public void jspDestroy() {
	System.out.println("jspDestroy()");
}
%>
</body>

 

 

 

exam01_jsp.java 

public void jspInit() {
	System.out.println("jspInit()!");
}

	
public void jspDestroy() {
	System.out.println("jspDestroy()");
}

jsp에서 추가한 메소드가 생성된 것을 볼 수 있다.

'Web' 카테고리의 다른 글

폼 데이터 입력 후 한글 깨짐 현상  (0) 2021.12.15
폼 데이터 입력 후 한글 깨짐 현상  (0) 2021.12.09
redirect와 forward  (0) 2021.11.15
JSP 문법  (0) 2021.11.13
Servlet  (0) 2021.11.10