ݺߣ

ݺߣShare a Scribd company logo
4 ███████████
4
이 명 진, 최 영 관
Powered by http://www.jabook.org
2nd
Edition
소설같은
JSP
4장 JSP의 기본
4.1 JSP의 동작 원리
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)이 동적으로
이루어 진다.
4.1.2 JSP의 생명 주기
▣ JSP의 생명 주기
◈ jspInit(), _jspService(),
jspDestroy() 메소드로 구성
▣ JSP의 생명 주기 메소드
◈ jspInit()
– JSP에 대한 첫 요청이 올 경우
서블릿으로 변환된 후 jspInit()
메소드가 호출
– 서블릿의 초기화 및 서비스를
시작하기 위한 준비
– _jspService() 메소드 호출
◈ _jspService()
– 클라이언트의 요청을 처리하는
메소드
◈ jspDestroy()
– 서블릿 객체가 메모리에서 제거
될 때 호출되는 메소드
jspInit( )
_jspService( )
jspDestroy( )
init event
Request
Response
destroy event
4.1.3 JSP의 동작 시 생성되는 파일
▣ JSP 실행 후 생성되는 파일
◈ 자바(.java) 파일
– JSP 파일을 서블릿을 위한 자바 코드로 변경(translation)
◈ 클래스(.class) 파일
– 자바 코드를 서블릿 클래스로 컴파일(compile)
▣ 자바 파일과 클래스 파일이 생성되는 곳
◈ %CATALINA_HOME%workCatalinalocalhost
JSP 파일이 자동으로
변환된 자바 파일과
클래스 파일은
workCatalinalocalhost
디렉터리에 위치한다.
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 %> 입니다.
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 코드에
서 선언하지 않아도 사
용할 수 있도록 미리 선
언되어 있는 객체를 말
한다.
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>
4.2 지시문
4.2.1 지시문(Directive)이란?
▣ 지시문(Directive)
◈ 클라이언트의 요청에 의해 JSP 페이지가 실행될 때 필요한 정보를
기술하기 위해 사용
– 페이지 인코딩 정보
– 클래스 임포트 정보 등
◈ 지시문은 <%@ ~ %> 기호를 사용한다.
▣ 지시문의 종류
◈ page 지시문
◈ include 지시문
◈ taglib 지시문
지시문(Directive)은
JSP 페이지를 실행하
는데 필요한 부가 정
보를 기술하기 위해
사용된다.
<%@ 지시문_이름 속성_이름="속성_값" 속성_이름="속성_값" ... %>
4.2.2 page 지시문
▣ page 지시문
◈ JSP 페이지에 대한 정보를 지정하는 데 사용된다.
◈ 문서 타입, 클래스 임포트 정보, 에러 페이지 등
▣ page 지시문의 사용
◈ page 지시문은 JSP 페이지를 실행하는데 필요한 기본 정보를 지정
하기 때문에 가장 윗줄에 사용된다.
<%@ page 속성_이름="속성_값" 속성_이름="속성_값" ... %>
page 지시문은 일
반적으로 가장 첫
줄에 사용한다.
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=인코딩_정보"%>
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
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
라고 기술해야 한다.
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
4.3 스크립트 요소
4.3.1 JSP의 스크립트(Script) 요소들
▣ 스크립트(Script) 요소란?
◈ 스크립트 요소란 JSP 프로그래밍에서 사용되는 자바 코드의 표현
형태이다.
◈ 서블릿 코드로 자동 변환되는 성질을 가지고 있다.
▣ JSP의 스크립트(Script) 요소들
◈ 스크립트릿(Scriptlet)
– JSP의 자바 코드를 작성하는 부분
– <% ~ %>
◈ 선언문(Declaration)
– 페이지 전체에서 참조될 멤버 변수나 멤버 메소드를 선언
– <%! ~ %>
◈ 표현식(Expression)
– HTML에 출력될 자바 변수의 내용을 표현하기 위해 사용
– <%= ~ %>
스크립트 요소
의 내용들은 서
블릿 코드 생성
시 반영된다.
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>
4.3.3 스크립트 요소 정리
▣ 선언문(Declaration)
◈ JSP에서 사용할 멤버 변수나 멤버 메소드를 선언하기 위한 영역
◈ 서블릿 파일로 변경될 때 해당 클래스의 멤버 변수와 멤버 메소드로 선언된
다.
▣ 스크립트릿(Scriptlet)
◈ JSP 페이지에서 자바 코드를 작성하기 위한 구문
◈ 서블릿(.java) 파일이 생성될 때 스크립트릿의 코드는 _jspService() 메소드
내부에 선언된다.
▣ 표현식(Expression)
◈ 선언한 변수나 메소드의 리턴 값을 출력하는데 사용한다.
◈ out.print의 축약 구문이다.
◈ 표현식에서는 ;를 붙이지 않는다.
<%!
멤버 변수 및 멤버 메소드 선언
%>
<%
자바 코드 선언
%>
<%=출력값%>
<%
out.print(출력값);
%>동일 구문이다.
<%!~%>의 내용은
해당 클래스의 멤
버 변수와 멤버 메
소드로 선언된다.
변수값을 출력하기
위해 표현식을 쓰
던 스크립트릿 형
태로 작성하던 결
과는 동일하다.
End ███████████
End

More Related Content

JSP 프로그래밍 #04 JSP 의 기본

  • 2. 이 명 진, 최 영 관 Powered by http://www.jabook.org 2nd Edition 소설같은 JSP 4장 JSP의 기본
  • 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(출력값); %>동일 구문이다. <%!~%>의 내용은 해당 클래스의 멤 버 변수와 멤버 메 소드로 선언된다. 변수값을 출력하기 위해 표현식을 쓰 던 스크립트릿 형 태로 작성하던 결 과는 동일하다.