개발새발

3. [DB 연결 웹 앱] JSP - BE 본문

[부스트코스] 웹프로그래밍/DB 연결 웹 앱

3. [DB 연결 웹 앱] JSP - BE

재래김유진 2019. 11. 21. 19:55
728x90
반응형

 

1) JSP란?

마이크로소프트의 ASP(Active Server Pages)와 같은 스크립트 형태의 개발 방법이 인기를 얻게 되면서, 

자바 진영에서도 대항하기 위해서 JSP를 발표하게 된다.!

JSP = 스크립트 언어

 

<%@ %> = page import 또는 include 이런거 할때

<% %> = 자바코드가 들어가는 부분 

<%= %> = 표현식 (=out.print)

<%! %> = 선언식 //이 클래스에 메서드를 선언한다던가 필드를 선언할때 만들어주면 메서드 바깥쪽에 코드를 만들어지게

 

[생각해보기] 

1. 1부터 10까지의 합을 구하는 서블릿과 JSP를 비교해봤을 때 JSP가 어떤 부분에서 편리한거 같나요? 

서블릿은 브라우저에 출력할려면 out.print("<br>"+total+"</br>"); 이렇게 일일이 써줘야함 

JSP는 scriptlet을 써서 쉽게 표현 할수 있다.

 

 

2) JSP 라이프싸이클

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

jsp 라이프사이클
1-10까지 출력하는 JSP으로 만들었는데 서블릿으로 바껴있다. 

jsp 파일에 Scriptlet을 썼든 표현식을 썼든 Service라는 메서드에 해당부분 코드가 추가 된다.

init 이나 destroy가 존재하지만 뭘 쓰든간에 Service 메서드 안에만 

-> 응답에 포함 되는건 Sevice밖에 없기때문 (매번 호출되는게 Service밖에 없다.)

but, <%! %> 선언식을 쓰면 Service 내에 만들어지는게 아니라 바깥쪽에 만들어지게 할수 있다.

like this,,

 

 

[JSP로 요청이 들어왔을때 ]

서버 : JSP에 해당되는 서블릿이 존재해? (요청이 첨인지 아닌지 체크)

    if( 존재) {

           서블릿엔진이 요청받아서 서블릿 라이프 사이클대로 실행

       }else(존재하지 않는다){ 

           JSP엔진이 그것을 받아서 알맞는 서블릿으로 만들고 컴파일하고 서블릿 객체 생성

       }

 

 

[JSP의 실행순서]

  1. 브라우저가 웹서버에 JSP에 대한 요청 정보를 전달한다.
  2. 브라우저가 요청한 JSP가 최초로 요청했을 경우만 JSP로 작성된 코드가 서블릿으로 코드로 변환한다. (java 파일 생성)
  3. 서블릿 코드를 컴파일해서 실행가능한 bytecode로 변환한다. (class 파일 생성)
  4. 서블릿 클래스를 로딩하고 인스턴스를 생성한다.
  5. 서블릿이 실행되어 요청을 처리하고 응답 정보를 생성한다.

[생각해보기]

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

JSP 라이프 사이클 = _jspinit(), _jspservice(), _jspdestroy()

 

 

3) JSP 문법 

https://www.edwith.org/boostcourse-web

[선언문] : <%! %>

jsp에서 메서드 선언 

 

선언문 (위치가 바뀜)

 

표현식 부분 Service()안에 

 

[스크립트릿] : <% %>

많이씀 

프로그래밍 로직을 기술할때 사용

스크립트릿에서 선언된 변수는 지역변수

스크립트릿안에서 선언된 변수는 다 Service라는 메서드 안에 선언되는 변수일 거다.

 

스크립트릿으로 반복문 실행

 

서블릿으로 바뀌면 이렇게 

 

[주석 (Commnet) ]

1. HTML : <!-- -->

2. JSP : <%-- --%>

3. JAVA : /* */

 

 

4) JSP 내장객체

: JSP에서는 개발자가 선언하지 않아도, 사용할 수 있는 미리 선언된 변수가 존재한다 -> 내장객체

 

  • JSP를 실행하면 서블릿 소스가 생성되고 실행된다.
  • JSP에 입력한 대부분의 코드는 생성되는 서블릿 소스의 _jspService() 메소드 안에 삽입되는 코드로 생성된다.
  • _jspService()에 삽입된 코드의 윗부분에 미리 선언된 객체들이 있는데, 해당 객체들은 jsp에서도 사용 가능하다.
  • response, request, application, session, out과 같은 변수를 내장객체라고 한다.

요기요기! 내장객체!

객체들을 따로 선언하거나 생성해주지 않았는데 오류가 나지 않는다.

왜? 내장객체잖아~.~ (필요에 따라 가따 쓸수있음.)

 

* jsp는 그냥 실행되는게 아니라 서블릿으로 바껴서 실행된다!

 

[생각해보기]

1. 내장객체를 JSP 선언문에서 사용할 수 있을까요? 사용할 수 없다면 왜 그럴까요?

선언문 이외의 표현식은 _jspService 메서드 안에 코드가 작성됨.

 

_jspService 메서드에는 출력(out), 세션(out), 요청(request), 응답(response) 등을 담당하는 내장객체가 있는데 

내장객체는 _jspService 메서드 안에서 사용 가능하다 -> 지역변수라고 함.

지역변수는 해당 메서드 '안'에서 사용되고 '밖'에서는 사용할 수 없다.

728x90
반응형
Comments