Frog is cry
JSP(DAY1) 본문
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 |