seoyoung.dev

JSP/JSP의LifeCycle/JSP 내장객체 본문

WEB/JSP

JSP/JSP의LifeCycle/JSP 내장객체

seo-0 2019. 10. 6. 18:02

JSP 는 JSP 자체로 동작하는 것이 아니라, 모든 JSP 는 서블릿으로 바뀌어서 동작한다. 

-> 바뀐 서블릿이 실행되는 것이다. 

-> 페이지 지시문을 사용해서 알려줄 수 있게 한다. 

<body>
	<% //scriptlet: 자바 코드를 입력할 수 있는 부분
		int total =0;
          for(int i=1;i<=10;i++){
              total +=i;
          }
	%>
	
	1부터 10까지의 합 : <%=total %> 
    //out.print(total);  -> <%= %>
</body>

[ sublet 에서 자바코드를 넣어주더라고, response 의 out.println에 넣어주지 않으면, 실제 응답으로는 들어가지 않는다. 

JSP 에서, 응답으로 반드시 넣어주고싶은 자바 코드는 <%=  %> 태그 안에 넣어준다 

 

* jsp 의 라이프싸이클

' sum10_jsp.java' 파일의 _jspService() 메소드 안에 jsp 파일의 내용이 변환되어 들어가게 된다. 

jsp 파일이 서블릿 소스로 컴파일되어 실행돼서 브라우저에 보여지게 된다. 

 

< jsp의 실행 순서>

 - 브라우저가 웹서버에 JSP 에 대한 요청 정보를 전달

      -> 웹서버는 해당 JSP 에 대한 서블릿의 존재여부를 확인하여, 존재한다면 서블릿 엔진이 요청을 서블릿 라이프사            이클대로 실행하게 되고, 최초 요청이면 JSP 엔진이 알맞는 서블릿 만들고, 컴파일 수행 

- 최초로 요청했을 경우에만, JSP 코드가 서블릿 코드로 변환한다. (***_jsp.java 생성)

- 서블릿 코드를 컴파일해서, 실행가능한 bytecode 로 변환 (class 파일을 생성)

- 서블릿 클래스를 로딩, 인스턴스 생성 By JSP 엔진

- 서블릿 실행 -> 요청 처리, 응답 정보 생성 

 

* 서블릿의 라이프 사이클 (init, service, destroy)

  - 최초 요청시에는 Init, Service

 -  수정되거나 다시was가 갱신되는 경우 Destroy, Init, Service 

 

* JSP 의 라이프 사이클 (_jspInit() , _jspDestroy(), _jspService() )

-> 그냥 쓰던, SCRIPTLET 에 쓰던, 다 service 메소드에 들어와있다. 

: 응답에 포함되는건 service 밖에 없고, 매번 호출되는건 service 밖에 없기 때문이다.

-> <%!  %> 선언식

: 어떤 특정한 메소드를 서비스 메소드가 아니라, 다른 메소드나 필드로 지정하고 싶을 때 사용 


* JSP 문법 

-선언문: <%!  %> : 멤버 변수 및 메소드 선언에 사용 -> java 파일 내 service 메소드 말고 클래스 바디쪽에 쓰여진다.  

 

-Scriptlet: <%  %>: 프로그래밍 코드 기술에 사용 , service 메소드 안의 지역변수 선언 

 

-표현식: <%=  %>: 응답 결과에 포함할 내용을 넣을 때 사용, -> java 파일의 service 메소드 내에 포함 

	id = <%=getId() %>  //표현식
    
	<%! //선언문
    
	String id = "u001"; //멤버변수
	public String getId(){ //메소드 선언
		return id; 
	}
	%>
      <body>
      <%
          for(int i=1;i<=5;i++){		
      %>

      <h<%=i %>> 아름다운 한글 </h<%=i %>>

      <%
      } //반복문 끝나는 부분 사이에 html 태그 넣기 위해서 분리 
      %>

      </body>

+ 주석 

- html 주석 <!-- html주석 -->  : html 주석은 다 바뀌고, 응답에까지도 들어간다. 

- jsp 주석 <%-- jsp 주석 --%> :java 파일에서 보이지 않는다. 

- java 주석 //java 주석            :  jsp 에서 java로는 바뀌지만, java 실행시킬때의 주석이므로 실행이 안된다. 


* JSP 내장객체 

JSP 에 입력한 코드는 생성되는 서블릿 소스의 _jspservice() 메소드 안에 삽입되는 코드로 생성된다. 

-> Service 메소드에 미리 선언된 객체들을 jsp 에서 사용 가능 하다.

-> request, response, application, session, out 과 같은 내장 객체들 

<%
	StringBuffer url = request.getRequestURL();
    //내장객체 request 사용 
	out.println("url:"+ url.toString());
    //내장객체 out 사용 
	out.print("<br>");
%>

+) JSP 선언문에서 내장객체를 사용할 수 있을까?

-> JSP 선언문은 _jspService() 메소드 이외의 클래스 바디 공간에 쓰여지는데, 내장 객체는 service 메소드에 기본적으로 내장되어있어서 해당 service 메소드 내에서 사용할 수 있으므로, 메소드 밖에서는 사용할 수 없다.