4. 4.1.1 JSP의 동작 과정
Web Server
Servlet Container
hello.jsp
hello.java
hello.class
hello.jsp 검색
hello.java
파일로
변환
컴파일하여
서블릿 객체
생성
서블릿 컨테이너에
로딩
hello.jsp 요청
hello.jsp 응답
JSP가 요청되면 해
당 JSP 파일이 자동
으로 자바 코드(.java)
로 변환되고 컴파일
(.class)이 동적으로
이루어 진다.
5. 4.1.2 JSP의 생명 주기
▣ JSP의 생명 주기
◈ jspInit(), _jspService(),
jspDestroy() 메소드로 구성
▣ JSP의 생명 주기 메소드
◈ jspInit()
– JSP에 대한 첫 요청이 올 경우
서블릿으로 변환된 후 jspInit()
메소드가 호출
– 서블릿의 초기화 및 서비스를
시작하기 위한 준비
– _jspService() 메소드 호출
◈ _jspService()
– 클라이언트의 요청을 처리하는
메소드
◈ jspDestroy()
– 서블릿 객체가 메모리에서 제거
될 때 호출되는 메소드
jspInit( )
_jspService( )
jspDestroy( )
init event
Request
Response
destroy event
6. 4.1.3 JSP의 동작 시 생성되는 파일
▣ JSP 실행 후 생성되는 파일
◈ 자바(.java) 파일
– JSP 파일을 서블릿을 위한 자바 코드로 변경(translation)
◈ 클래스(.class) 파일
– 자바 코드를 서블릿 클래스로 컴파일(compile)
▣ 자바 파일과 클래스 파일이 생성되는 곳
◈ %CATALINA_HOME%workCatalinalocalhost
JSP 파일이 자동으로
변환된 자바 파일과
클래스 파일은
workCatalinalocalhost
디렉터리에 위치한다.
7. 4.1.4 간단한 JSP 파일 작성
▣ 지시문(Directive) 작성
◈ JSP 페이지에 대한 설정 정보를 지정하기 위해 사용
◈ page 지시문
– JSP 페이지의 MIME 타입과 인코딩 정보를 지정
▣ 스크립트릿(Scriptlet) 작성
◈ "<%" 기호로 시작하여 "%>"로 끝나는 부분으로써, 자바 코드를 작성하는
부분
▣ 표현식(Expression) 작성
◈ 데이터를 출력하는 부분
<%@ page contentType = "text/html; charset=euc-kr" %>
현재 문서의 타입과 인코딩 정보 지정
<%
String name = "소설같은 JSP";
String author = "이명진";
%>
<%= name %>의 저자는 <%= author %> 입니다.
8. 4.1.5 자동 생성된 자바 파일 분석 (1)
▣ 패키지 선언 및 클래스 임포트
▣ basicTest_jsp 클래스
▣ _jspService() 메소드
◈ 클라이언트의 요청에 따라 수행되는 메소드
▣ 내장 객체 선언
◈ 선언하지 않아도 JSP에서 기본적으로 제공되는 객체
▣ 내장 객체 초기화
package org.apache.jsp;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
public final class basicTest_jsp extends HttpJspBase implements JspSourceDependent {
public void _jspService(HttpServletRequest request, HttpServletResponse response) throws ... {
JspFactory _jspxFactory = null;
PageContext pageContext = null;
... 기타 내장객체 선언 ...
jspxFactory = JspFactory.getDefaultFactory();
pageContext = _jspxFactory.getPageContext(this, request, response, null, true, 8192, true);
... 기타 내장 객체 초기화 ...
JSP 코드는 실행시
다음과 같은 서블
릿 코드로 변환되
어 실행된다.
내장객체란 JSP 코드에
서 선언하지 않아도 사
용할 수 있도록 미리 선
언되어 있는 객체를 말
한다.
9. JSP 코드
4.1.6 자동 생성된 자바 파일 분석 (2)
▣ 지시문 코드
▣ HTML 시작 코드
▣ 스크립트릿 코드
▣ 표현식 코드
▣ HTML 종료 코드
out.write("<html>rn");
out.write("t<head>rn");
out.write("tt<title>jsp 페이지 구성</title>rn");
out.write("t</head>rn");
out.write("t<body>rn");
String name = "소설같은 JSP";
String author = "이명진";
response.setContentType("text/html; charset=euc-kr");
<%
String name = "소설같은 JSP";
String author = "이명진";
%>
<%@ page contentType = "text/html; charset=euc-kr" %>
<html>
<head>
<title>jsp 페이지 구성</title>
</head>
<body>
out.print( name );
out.write("의 저자는 ");
out.print( author );
out.write(" 입니다.rn");
<%= name %>의 저자는 <%= author %> 입니다.
out.write("t</body>rn");
out.write("</html>");
</body>
</html>
11. 4.2.1 지시문(Directive)이란?
▣ 지시문(Directive)
◈ 클라이언트의 요청에 의해 JSP 페이지가 실행될 때 필요한 정보를
기술하기 위해 사용
– 페이지 인코딩 정보
– 클래스 임포트 정보 등
◈ 지시문은 <%@ ~ %> 기호를 사용한다.
▣ 지시문의 종류
◈ page 지시문
◈ include 지시문
◈ taglib 지시문
지시문(Directive)은
JSP 페이지를 실행하
는데 필요한 부가 정
보를 기술하기 위해
사용된다.
<%@ 지시문_이름 속성_이름="속성_값" 속성_이름="속성_값" ... %>
12. 4.2.2 page 지시문
▣ page 지시문
◈ JSP 페이지에 대한 정보를 지정하는 데 사용된다.
◈ 문서 타입, 클래스 임포트 정보, 에러 페이지 등
▣ page 지시문의 사용
◈ page 지시문은 JSP 페이지를 실행하는데 필요한 기본 정보를 지정
하기 때문에 가장 윗줄에 사용된다.
<%@ page 속성_이름="속성_값" 속성_이름="속성_값" ... %>
page 지시문은 일
반적으로 가장 첫
줄에 사용한다.
13. 4.2.3 page 지시문의 contentType 속성
▣ page 지시문의 contentType 속성
◈ JSP 페이지의 MIME 타입과 문자 인코딩 정보를 기술
▣ contentType 속성의 값
◈ 기본 값은 "text/html;charset=ISO-8859-1"이다.
◈ MIME 타입
– 현재 문서의 컨텐츠를 나타내며, 텍스트 형태의 HTML 문서이기 때문
에 text/html로 기술한다.
◈ charset
– 문자 인코딩 정보를 기술
– 한글을 사용하고자 한다면 euc-kr을 사용한다.
<%@ page contentType="MIME_타입;charset=인코딩_정보"%>
14. 4.2.4 contentType 속성의 사용
▣ 잘못된 contentType 속성 ▣ 제대로 작성한 contentType 속성
<%@ page contentType="image/gif; charset=iso-8859-1"%>
<html>
<head>
<title>잘못된 한글 인코딩</title>
</head>
<body>
<h2>한글이 안보여요.</h2>
</body>
</html>
<%@ page contentType="text/html; charset=euc-kr"%>
<html>
<head>
<title>제대로 작성한 한글 인코딩</title>
</head>
<body>
<h2>한글이 너무 잘 보여요.</h2>
</body>
</html>
wrong_encoding.jsp right_encoding.jsp
15. 4.2.5 page 지시문의 import 속성
▣ page 지시문의 import 속성
◈ JSP 코드 내에서 사용할 자바 패키지를 지정하기 위한 속성
▣ import 속성의 사용
<%@ page import="사용할 패키지, 사용할 패키지, ..."%>
<%@ page contentType="text/html; charset=euc-kr"%>
<%@ page import="java.util.*"%>
<html>
<head>
<title>page 지시문의 import 속성</title>
</head>
<body>
<%
String str = "Hello JSP~~~!";
Vector vector = new Vector();
vector.addElement(str);
out.println("<h2>" + vector.elementAt(0) + "</h2>");
%>
</body>
</html>
좌측의 코드에서 만약
패키지를 임포트하지
않았다면,
java.util.Vector
라고 기술해야 한다.
16. 4.2.6 include 지시문
▣ include 지시문
◈ 현재 페이지에 포함될 파일을 텍스트 형태 그대로 원래 페이지에 삽입 후
처리하기 위한 구문
▣ include 지시문의 사용 방법
▣ include 지시문의 처리 과정
<%@ include file="include될 파일의 URL"%>
------------------------
------------------------
<%@include file="included.jsp"%>
------------------------
------------------------
staticInclude.jsp
included.jsp
-------------
-------------
-------------
-------------
포함
------------------------
------------------------
------------------------
------------------------
staticInclude.jsp
included.jsp의 코드
1 2 3
18. 4.3.1 JSP의 스크립트(Script) 요소들
▣ 스크립트(Script) 요소란?
◈ 스크립트 요소란 JSP 프로그래밍에서 사용되는 자바 코드의 표현
형태이다.
◈ 서블릿 코드로 자동 변환되는 성질을 가지고 있다.
▣ JSP의 스크립트(Script) 요소들
◈ 스크립트릿(Scriptlet)
– JSP의 자바 코드를 작성하는 부분
– <% ~ %>
◈ 선언문(Declaration)
– 페이지 전체에서 참조될 멤버 변수나 멤버 메소드를 선언
– <%! ~ %>
◈ 표현식(Expression)
– HTML에 출력될 자바 변수의 내용을 표현하기 위해 사용
– <%= ~ %>
스크립트 요소
의 내용들은 서
블릿 코드 생성
시 반영된다.
19. 4.3.2 스크립트 요소와 서블릿의 관계
1. <%@ page contentType="text/html; charset=euc-kr" %>
2. <html><body>
3. <%!
4. String name = "jsp";
5. int a = 5;
6. int b = 15;
7. public int sum(){
8. return a + b;
9. }
10. %>
11. <%= sum() %><p>
12. <%
13. int i;
14. for(i=0; i<2; i++) {
15. %>
16. <%=name%><p>
17. <% } %>
18. </body></html>
지시문
선언문
표현식
스크립트릿
표현식
스크립트릿
public final class script_005fservlet_jsp extends ... implements ... {
String name = "jsp";
int a = 5;
int b = 15;
public int sum(){
return a + b;
}
public void _jspService(...) throws ... {
try {
response.setContentType("text/html; charset=euc-kr");
out.write("<html><body> rn");
out.print( sum() );
int i;
for(i=0; i<2; i++) {
out.print(name);
}
out.write("</body></html>");
} catch (Throwable t) {
} finally {
}
}
}
실행 결과
<html><body>
20<p>
jsp<p>
jsp<p>
</body></html>
20. 4.3.3 스크립트 요소 정리
▣ 선언문(Declaration)
◈ JSP에서 사용할 멤버 변수나 멤버 메소드를 선언하기 위한 영역
◈ 서블릿 파일로 변경될 때 해당 클래스의 멤버 변수와 멤버 메소드로 선언된
다.
▣ 스크립트릿(Scriptlet)
◈ JSP 페이지에서 자바 코드를 작성하기 위한 구문
◈ 서블릿(.java) 파일이 생성될 때 스크립트릿의 코드는 _jspService() 메소드
내부에 선언된다.
▣ 표현식(Expression)
◈ 선언한 변수나 메소드의 리턴 값을 출력하는데 사용한다.
◈ out.print의 축약 구문이다.
◈ 표현식에서는 ;를 붙이지 않는다.
<%!
멤버 변수 및 멤버 메소드 선언
%>
<%
자바 코드 선언
%>
<%=출력값%>
<%
out.print(출력값);
%>동일 구문이다.
<%!~%>의 내용은
해당 클래스의 멤
버 변수와 멤버 메
소드로 선언된다.
변수값을 출력하기
위해 표현식을 쓰
던 스크립트릿 형
태로 작성하던 결
과는 동일하다.