관리 메뉴

Frog is cry

JSP(DAY1) 본문

JSP/개념정리

JSP(DAY1)

Frog is cry 2020. 10. 23. 22:57

1. JSP(Java Server Page) 개요

 

Servlet

> Java Source 기반으로 작성

> HTML은 문자열로 만들어 출력

 

JSP

> HTML 기반으로 작성

> 동적 처리를 담당하는 JSP코드(java 문법사용)를 특정 태그들을 이용해 작성

> JSP는 Servlet으로 변환되어 실행된다.

> 변환은 Web container가 담당한다.

> JSP는 Servlet으로 보내는 html을 좀 더 효율적으로 보내기 위해서 사용한다.

> JSP로 작성된 소스는 바로 실행되는 것이 아니라 JSP Engine에 의해 JAVA Source(Servlet)으로 변환되어 실행된다.

 

Servlet을 이용한 호출은 개발자가 직접 out.write / out.print 등을 이용해서 코드를 작성하여야 하지만

JSP를 이용하면 Html 소스만을 작성하고 JSP Engine이 자동으로 Java source를 생성해줌! 

 

JSP 실행 원리

1. /jsp/hello.jsp 작성

2. 웹 브라우저에 JSP 요청

3. JSP 엔진이 hello.jsp를 가지고 hello_jsp.java 생성

4. 컴파일된 클래스 파일을 실행

 

2. JSP LifeCycle

1. JSP 파일을 Servlet 파일로 변환(.jsp -> .java)

2. 변환된 Servlet을 컴파일(.java -> .class)

3. Servlet 클래스 로딩

4. Servlet 클래스 객체 생성

5. jspInit() 호출 : Servlet의 init() 역할. Servlet이 처음 호출되었을때 한 번 일한다.

6. jspService() 호출 : Servlet의 service() 역할. 클라이언트의 요청에 응답한다.

7. jspDestroy() 호출 : Servlet의 destroy()역할. 객체가 사라지기 직전에 호출된다.

* jsp를 만들었을때 jsp가 실행 되는게 아니라 servlet으로 바뀌어서 실행되는것! (웹 컨테이너가 바꿔줌)

 

3. 내장 객체(Inplicit Variable)

> JSP 내에서 기본적으로 제공하는 객체

> 생성이나 참조 코드 없이 바로 사용할 수 있다.

> JSP가 Servlet으로 변환할 때 container가 작성

 

* page

> this. JSP가 서블릿으로 변환 되었을때 그 Servlet 객체 자신

> 실제타입 : javax.servlet.jsp.HttpJspPage

> 기능설명 :  jsp페이지가 서블릿으로 변환된 객체

 

* request

> HttpServletRequest

> 실제타입 : javax.servlet.http.HttpServletRequest

> 기능설명 :

    > 클라이언트의 요청 정보를 저장(헤더정보, 파라미터 등)

    > 서블릿 doGet, doPost메서드의 파라미터

    > 저장공간(속성추가)

> 자주 사용하는 메서드 :

    > getParameter()

    > getParameterValues()

    > getCookies()

    > setCharacterEncoding()

    > setAttribute()

    > getAttribute()

 

* response

> HttpServletRestponse

> 실제 타입 : javax.servlet.http.HttpServletResponse

> 기능설명 :

    > 요청에 대한 응답정보를 저장(헤더설정,화면이동)

    > 서블릿 doGet, doPost메서드의 파라미터

> 자주 사용하는 메서드

    > sendRedirect()

    > setHeader()

 

* session

> HttpSession

> 실제 타입 : javax.servlet.http.HttpSession

> 기능설명 :

    > 클라이언트의 세션정보

    > 저장공간(속성추가)

> 자주 사용하는 메서드

    > invalidate()

    > setMaxlnactiveInterval()

    > getId()

    > setAttribute()

    > getAttribute()

    > removeAttribute()

 

* application

> ServletContext

> 실제 타입 : javax.servlet.ServletContext

> 기능 설명 : 

    > jsp페이지의 웹어플리케이션 정보

    > 저장공간(속성추가)

> 자주 사용하는 메서드

    > getInitParameter()

    > log()

    > setAttribute()

    > getAttribute()

 

* out

> JspWriter - Srvlet에서 PrintWriter와 같은 역할

> 실제 타입 : javax.servlet.JspWriter

> 기능설명 : jsp페이지 출력 스트림(html 코드를 출력)

> 자주 사용하는 메서드 : print()

 

* config

> ServletConfig

> 실제 타입 : javax.servlet.ServletConfig

> 기능설명 : jsp페이지의 설정정보

 

* pageContext

> Servlet에는 없는 것으로 다른 내장객체를 생성할 수 있다.

> 실제 타입 : javax.servlet.jsp.PageContext 

> 기능설명 :

    > jsp페이지 실행에 필요한 컨텍스트 정보

    > include/forward

> 자주 사용하는 메서드

    > include()

    > forward()

 

* exception

> Throwable. JSP가 page 지시자 태그의 isErrorPage=true일 경우만 생성됨

> 실제 타입 : java.lang.Throwable

> 기능설명 : 예외 처리를 위한 객체

 

4. JSP Tag

 

1. 스크립트 태그(script tag) :

> 클라이언트의 요청에 대해 서비스 하는 동적 코드를 java 실행 구문으로 작성하기 위한태그

    > 1-1. 지시어(Directive Element) : <%@ direvtive {directive attr} %>

        > 1-1-1. page : 페이지의 기능,특징을 지시

        > 1-1-2. include : JSP페이지에 다른 페이지를 포함시키는 것을 지시

        > 1-1-3. taglib : custom tag 사용과 관련된 지시

   

    > 1-2. 스크립팅 원소(Scripting Element)

        > 1-2-1. 선언(Declaration) : <%! .... %>, 클래스(멤버변수,메소드) 정의

            > init(), destroy() 기재, service()는 하지 않음!

            > 최초 실행시 만들고 서버 재시동 전까지는 멤버 객체 유지됨!

        > 1-2-2. 스크립트릿(scriptlet) : <% .... %>, main() 과 유사 _jspService()

        > 1-2-3. 식(Expression) : <%= ....%>, System.out.print()와 유사 -> 브라우저에 출력

 

2. 액션 태그(action tag)

사용목적 :

> java코드를 빼고 싶다(Jsp에서 자바코드를 다 빼버리겠다 -> 태그로 대체하겠다)

> 호출할 클래스를 부르고 메소드를 호출하는 것들을 태그로 만들어 태그를 실행시키면 실행이 되게끔 만든다.

    > (java코드를 따로 분리한다. -> 이 java코드의 클래스와 메소드 태그를 통해 다시 부른다(액션태그))

> 표준 액션 태그

> Custom Tag

 

3. EL(Expression Language)

> 속성값을 출력할때 사용

> tag보다는 언어적인 느낌이 강하다.

   

JSP 주석 : <%--내용%>

> cllient에게 전송되지 않는다. --> 소스보기해도 jsp주석은 보이지 않음.

> <!== --> : html주석으로 하면 소스코드에 주석이 보임.

 

5. 스크립트 태그(script tag)

1. 지시어(Directive Element)

 

지시자 태그

>  컨테이너가 JSP를 Sercvlet으로 변환 할 때 특정 지시를 내리기 위해 사용 되는 태그

 

종류 :

1. page : 페이지의 기능, 특징을 지시

2. inclue : JSP페이지에 다른 페이지를 포함시키는 것을 지시

3. taglib : custom tag 사용과 관련된 지시

 

구문 : 

<%@ 지시어 속성="값" 속성="값" ...%>

 

Page 지시자 태그

> JSP 페이지 관련 기능을 정의 하는 태그

 

주요 속성

1. import

> jsp에서 사용할 패키지들을 import시 사용, 속성들 중 유일하게 한 페이지에 여러번 올 수 있다.

2. contentType 

> jsp가 생성하는 응답의 MIME TYPE을 지정 - Servlet으로 변환 시 response.setContentType()으로 변형됨

3. session

> session 내장 객체의 생성 여부를 결정 - true or fals를 값으로 가진다. true가 default 값

4. errorPage

> JSP페이지가 실행 할 때 오류(Exception)가 발생하면 수행을 옮길 page를 기술한다.(요청디스 패치방식으로 이동)

 

* 지시어는 jsp 파일의 속성을 기술하는 jsp문법으로 컨테이너에게 해당 페이지를 어떻게 처리해야 하는지 전달하기 위한 내용을 담고 있다. (웹컨테이너에게 정보를 전달하는 역할!) 

 

page 지시어 : <%@ page {directive attr} %>

> 현재 jsp 페이지를 컨테이너에서 처리하는데 필요한 각종 속성을 기술하는 부분

> 보통 jsp 페이지 맨앞에 위치하고, 여러줄 나누어 작성하는게 가능함.

 

include 지시어 : <%@ include file="in,.jsp" %>

> 외부 데이터를 jsp 페이지에 다른 데이터(html,jsp문서)를 포함 시키기 위해 사용하는 지시어

> 만들고 있는 jsp파일에 다른 파일을 넣고 싶을 때 사용 할 수 있다.

> 여러개를 중복해서 include하는 것이 가능함.(재사용 용이)

> 인터넷 포털사이트의 화면처럼 여러 정보의 조합으로 한 화면을 구성해야 할 때 유용하게 사용할 수 있다.

 

스크립팅 원소(Scripting Element)

> 선언(Declaration), 식(Expression), 스크립트릿(scriptlet) 총 3가지로 구성된다.

 

1.선언(Declaration) : <%! .... %>

>  jsp 페이지에서 멤버변수나 메소드를 선언할때 사용한다

> 사용자가 선언한 메소드에서는 디폴트 객체를 사용할 수 없다.

 

2.스크립트릿(scriptlet) : <% .... %>

> 자바 코드를 적을 수 있는 공간

> 사용형태 <%스크립트릿 내용%>

> public void _jspService() : 실제로 내가 작성한 내용이 변환되는 메소드 !!

 

3.표현식(Expression) : <%= .... %>

> 간단한 데이터 출력이나 메소드 호출에 사용

> 마지막에 세미콜론을 붙이지 않고, out.println()의 인자로서 적합한 형태를 사용해야한다.

 

 

 

 

 

 

 

 

 

'JSP > 개념정리' 카테고리의 다른 글

리다이렉트와 포워드  (0) 2020.10.26
내장객체  (0) 2020.10.26
JSP 배포  (0) 2020.10.23
Comments