Java web Programming

Download Report

Transcript Java web Programming

Java web Programming
목차
1일차 :개발환경구축 / 기본구성요소 / 내장객체
2일차 : 쿠키와 세션 / 자바 빈 활용
3일차 : JDBC와 방명록
4일차 : 서블릿 과 MVC 패턴
5일차 : 커스텀 태그 / EL / JSTL
JSP 2.0 Programming
2
웹 어플리케이션이란 무엇인가?
• 웹을 기반으로 실행되는 어플리케이션
• 웹 브라우저를 사용해서 어플리케이션 실행
• 즉, 웹 어플리케이션은
• 누구나
• 운영체제(OS) 또는 플랫폼에 상관없이
• 웹 브라우저만 설치되어 있으면
• 실행할 수 있는 프로그램이다.
[웹 어플리케이션이 생성한 화면]
JSP 2.0 Programming
3
웹
어플리케이션의
구성
오늘날 전형적인 웹 어플리케이션의 구성도
웹브라우저가 웹서버에
필요한 정보를 요청함
웹 서버
웹브라우저
구성요소
웹서버는 결과를
웹브라우저에 보냄
어플리케이션
서버
역할
데이터베이스
종류
웹 브라우저
사용자에게 화면(즉, 유저 인터페이스; UI)을 제공한다.
IE, Netscape
웹 서버
웹 브라우저의 요청을 받아서 알맞은 결과를 웹 브라우저에
전송한다. 만약 프로그램 처리가 필요하다면 어플리케이션 서
버를 사용하거나 프로그램을 직접 호출하여 결과를 생성한다.
Apache, IIS
어플리케이션 서버
게시판의 글 목록, 로그인 처리와 같은 기능을 처리하고 그 결
과를 웹 서버에 전달한다.
Tomcat, Resin,
WebLogic
데이터베이스
사이트의 정보를 저장한다. 예를 들어, 회원정보, 게시판 글
데이터 등을 저장한다.
Oracle,
Sql Server
JSP 2.0 Programming
4
웹 어플리케이션의 처리 순서
① 웹 브라우저는
웹 서버에 어떤 기능을
원하는 지 요청한다.
요청
웹 서버
응답
처리
웹 어플리케이션
② 웹 서버는 웹 어플리케이션을
실행하여 웹 브라우저가 요청한
기능을 수행한후, 결과를
웹 브라우저에 응답한다.
③ 웹 브라우저는
웹 서버로부터의
응답 결과를 출력한다.
JSP 2.0 Programming
5
두가지 처리 방식: CGI vs 어플리케
CGI 방식
이션서버 어플리케이션 서버 방식
실행방식
직접 실행
어플리케이션 서버 사용
요청
펄 프로그램
요청
웹 서버
웹 서버
프로그램
어플리케이션
서버
C 프로그램
로딩되는
실행파일
매 요청마다 로딩
A프로그램 실행
프로그램
한번만 로딩해서 모든 요청을 처리
A프로그램 실행
웹 서버
프로그램
웹 서버
A프로그램 실행
어플리케이션
서버
A프로그램 실행
A프로그램 실행
JSP 2.0 Programming
A 프로그램 실행
처리량
높음!
6
두가지 코드 방식: 실행코드 vs 스
크립트 코드
실행코드
스크립트 코드
코드형태
컴파일된 실행 프로그램
컴파일되지 않은 스크립트 코드
실행방식
컴파일된 기계어 코드 직접 실행
스크립트 코드를 해석한 뒤 실행
코드변경
소스 코드를 다시 컴파일해야 함
스크립트 코드만 고치면 됨
종류
대부분의 CGI 프로그램
JSP, ASP, PHP
개발의
편리함
실행 코드 방식의 경우
실행방식의
차이
웹 브라우저
요청 전송
웹 서버
요청 받음
프로그램
실행
스크립트 방식의 경우
웹 브라우저
요청 전송
웹 서버
요청 받음
스크립트코드
번역
JSP 2.0 Programming
번역된
코드실행
7
JSP란 무엇인가?
• JavaServer Pages의 약자
• 자바 언어를 기반으로 하는 스크립트 언어
• 자바의 장점을 그대로 활용 가능
• HTML, XML 등 웹 서비스와 관련된 문서를 생성
• 서블릿/EJB 등 엔터프라이즈 기술과 잘 융합됨
• 표현언어, 표현식, 스크립트릿 등을 이용한 쉽게
웹 어플리케이션 개발 가능
JSP 2.0 Programming
8
J2EE와 JSP
• JSP는 J2EE 1.4의 한 부분
• 엔터프라이즈 어플리케이션의
UI 부분을 담당
JSP
EJB
XML
Java
Mail
J2EE
JMS
Servlet
JNDI
JSP 2.0 Programming
9
JSP를 선택하는 이유!!
플랫폼
독립적
배우기
쉬움
빠른
개발
JSP
EJB와
완벽한
조화
자바 &
객체지향
JSP 2.0 Programming
10
웹 콘테이너(Web Container)
• 웹 어플리케이션을 실행할 수 있는 서버 프로그램
• 자바의 웹 콘테이너: JSP와 Servlet을 지원
웹 콘테이너
JSP
콘테이너
JSP 2.0 Programming
서블릿
콘테이너
11
JSP 실행 환경 구축
• 자바 가상 머신 - JDK 1.4
• 웹 콘테이너 - Tomcat, Resin, WebLogic
JSP 2.0 Programming
12
Example JSP
JSP 예제
<%@ page contentType="text/html; charset=euc-kr" %>
<%@ page import="java.util.Date" %>
page 디렉티브
JSP 페이지의 특성 지정
<%
Date nowTime = new Date();
%>
<html>
<head><title>리스트1.1</title></head>
<body>
현재 시간은 <%= nowTime %> 입니다.
</body>
</html>
스크립트릿(scriptlet)
웹브라우저 요청 처리에
필요한 자바 코드 실행
표현식(expression)
값을 출력
JSP 2.0 Programming
13
JSP Code
JSP의 기본 코드 구성
<%@ page contentType = "text/html; charset=euc-kr" %>
<html>
<head>
<title>HTML 문서의 제목</title>
</head>
<body>
<%
String bookTitle = "JSP 기초";
String author = "최범균";
%>
<b><%= bookTitle %></b>(<%= author %>)입니다.
</body>
</html>
디렉티브
스크립트요소
텍스트
JSP 페이지에 대한 정보를 표시
HTML 문서를 생성하는 데 필요한 데이터를 생성 및 출력하는데 사용
일반 HTML 문서
JSP 2.0 Programming
14
JSP의 구성 요소
• 디렉티브 (Directive)
• 스크립트 (Script):
– 표현식(Expression),스크립트릿(Scriptlet), 선언부(Declaration)
•
•
•
•
•
표현 언어 (Expression Language)
기본 객체 (implicit object)
정적인 데이터 (텍스트 HTML 코드)
액션 태그 (Action Tag)
커스텀 태그 (Custom Tag)
JSP 2.0 Programming
15
디렉티브 (Directive)
"디렉티브는 JSP 페이지에 대한 설정 정보를 지정할 때 주로 사용"
Syntax
<%@ 디렉티브이름 속성1="값1" 속성2="값2" ... %>
Example
<%@ page contentType = "text/html; charset=euc-kr" %>
JSP 2.0 Programming
16
디렉티브 종류
디렉티브
설명
page
JSP 페이지에 대한 정보를 지정한다. JSP가 생성하는 문서의 타
입, 출력 버퍼의 크기, 에러 페이지 등 JSP 페이지에서 필요로 하
는 정보를 입력한다.
taglib
JSP 페이지에서 사용할 태그 라이브러리를 지정한다.
include
JSP 페이지의 특정 영역에 다른 문서를 포함시킨다.
* JSP 1.1 버전부터 호환
* JSP 2.0에는 태그 파일에서 사용할 수 있는 디렉티브 추가
JSP 2.0 Programming
17
스크립트 요소
"JSP에서 실시간으로 문서의 내용을 생성하기 위
해 사용되는 것이 스크립트 요소"
• 표현식(Expression) - 값을 출력한다.
• 스크립트릿(Scriptlet) - 자바 코드를 실행한다.
• 선언부(Declaration) - 자바 메소드(함수)를 만든다.
• JSP를 스크립트 언어라고 부르는 이유가 바로 막강한
스크립트 기능을 제공해주기 때문이다.
JSP 2.0 Programming
18
기본 객체 (Implicit Object)
• 웹 어플리케이션 프로그래밍을 하는 데 필
요한 기본적인 기능을 제공
• request, response, session, application,
page 등 다수의 기본 객체가 존재
• request 기본 객체, session 기본 객체,
response 기본 객체를 주로 사용
JSP 2.0 Programming
19
표현 언어 (Expression Language)
• JSP 2.0에 새롭게 추가된 기능으로서
• 스크립트 요소를 사용하는 데 따른 JSP 코
드의 복잡함을 없애주며
• 자바 언어가 아닌 보다 쉽고 간단한 언어
를 사용하기 때문에 배우기가 용이하다.
JSP 2.0 Programming
20
액션 태그와 커스텀 태그
• 액션 태그
– JSP가 제공하는 고유 태그
– <jsp:include>와 같이 <jsp:태그이름>의 형태
• 커스텀 태그
– 개발자가 직접 개발한 태그
– <prefix:태그이름>의 형태
– JSP 2.0의 태그 파일을 사용함으로써 커스텀
태그의 개발이 쉬워졌음.
• 태그는 스크립트 요소의 복잡함을 없앰
JSP 2.0 Programming
21
page 디렉티브
"page 디렉티브는 JSP 페이지에 대한 정보를 지정"
Syntax
<%@ page 속성1="값1" 속성2="값2" ... %>
Example
<%@ page contentType = "text/html; charset=euc-kr" %>
JSP 2.0 Programming
22
page 디렉티브의 속성 (1)
속성
설명
기본값
language
JSP 스크립트 코드에서 사용되는 프로그래밍 언어를
지정한다. JSP 2.0 버전까지는 스크립트 언어로서 자
바만을 지원하고 있다.
"java"
contentType
JSP가 생성할 문서의 타입을 지정한다.
"text/html"
import
JSP 페이지에서 사용할 자바 클래스를 지정한다.
session
JSP 페이지가 세션을 사용할지의 여부를 지정한다.
"true"일 경우 세션을 사용하고 "false"일 경우 세션을
사용하지 않는다.
"true"
buffer
JSP 페이지의 출력 버퍼 크기를 지정한다. ”none"일
경우 출력 버퍼를 사용하지 않으며, "8kb”라고 입력
한 경우 8킬로바이트 크기의 출력 버퍼를 사용한다.
최소 8kb
autoFlush
출력 버퍼가 다 찼을 경우 자동으로 버퍼에 있는 데이 "true"
터를 출력 스트림에 보내고 비울지의 여부를 나타낸
다. "true"일 경우 버퍼의 내용을 웹 브라우저에 보낸
후 버퍼를 비우며, "false"일 경우 에러를 발생시킨다.
JSP 2.0 Programming
23
page 디렉티브의 속성 (2)
속성
설명
info
JSP 페이지에 대한 설명을 입력한다.
errorPage
JSP 페이지를 실행하는 도중에 에러가 발생할 때 보
여줄 페이지를 지정한다.
isErrorPage
현재 페이지가 에러가 발생할 때 보여지는 페이지인
지의 여부를 지정한다. "true"일 경우 에러 페이지이
며, "false"일 경우 에러 페이지가 아니다.
pageEncoding
JSP 페이지 자체의 캐릭터 인코딩을 지정한다.
isELIgnored
"true"일 경우 표현언어를 지원하며, "false"일 경우
표현언어를 지원하지 않는다.
JSP 2.0 Programming
기본값
"false"
기본값은 web.xml
파일이 사용하는
JSP 버전 및 설정
에 따라 다르다.
24
contentType 속성과 캐릭터셋
(1) 속성은 JSP 페이지가
"page 디렉티브의 contentType
생성할 문서의 타입을 지정한다"
contentType 속성의 값의 구성
컨텐츠타입[; charset=캐릭터셋]
Example
<%@ page contentType = "text/html; charset=euc-kr" %>
<%@ page contentType = "text/xml" %>
• charset을 생략하면 iso-8859-1을 캐릭터셋으로 사용
• 일반적으로 한글을 사용할 경우 charset을 euc-kr로 지정
• 다국어를 지원하고 싶은 경우 UTF-8을 사용하는 것이 좋음
JSP 2.0 Programming
25
contentType 속성과 캐릭터셋
(2)
잘못된
캐릭터셋
<%@ page contentType="text/html; charset=iso-8859-1" %>
<html>
<head>
<title>캐릭터셋 잘못지정</title>
</head>
<body>
오늘의 목표: JSP 기초 마스터하기
</body>
</html>
올바른
캐릭터셋
<%@ page contentType="text/html; charset=euc-kr" %>
<html>
<head>
<title>캐릭터셋 올바르게 지정</title>
</head>
<body>
오늘의 목표: JSP 기초 마스터하기
</body>
</html>
JSP 2.0 Programming
26
import 속성
"page 디렉티브의 import 속성은 JSP 페이지에서
어떤 자바 클래스를 사용할 것인지 미리 지정"
import 속성의 값의 구성
<%@ page import = "클래스명[,클래스명,클래스명]" %>
( '클래스명' 대신에 '패키지명.*' 의 형태도 가능)
Example
<%@ page import = "java.util.Calendar, java.util.Date" %>
<%@ page import = "java.util.Calendar" %>
<%@ page import = "java.util.Date" %>
<%@ page import = "java.util.*" %>
JSP 2.0 Programming
27
import 속성 사용 예
<%@ page contentType = "text/html; charset=euc-kr" %>
<%@ page import = "java.util.Calendar" %>
<html>
<head><title>Calendar 클래스 사용</title></head>
<body>
<%
Calendar cal = Calendar.getInstance();
import 속성을 사용함으로
%>
써 소스 코드를 보다 간결
오늘은
<%= cal.get(Calendar.YEAR) %>년
하게 작성할 수 있다!
<%= cal.get(Calendar.MONTH) + 1 %>월
<%= cal.get(Calendar.DATE) %>일
<%@ page contentType = "text/html; charset=euc-kr" %>
<html>
입니다.
<head><title>Calendar 클래스 사용</title></head>
</body>
<body>
</html>
<%
java.util.Calendar cal = java.util.Calendar.getInstance();
%>
오늘은
<%= cal.get(java.util.Calendar.YEAR) %>년
<%= cal.get(java.util.Calendar.MONTH) + 1 %>월
<%= cal.get(java.util.Calendar.DATE) %>일
입니다.
</body>
</html>
JSP 2.0 Programming
28
스크립트 요소
•
•
•
•
•
스크립트릿(scriplet) - 실행 코드
표현식(expression) - 값의 출력
선언부(Declaration) - 함수
JSP 프로그래밍의 핵심 부분
스크립트 코드를 사용해서 프로그램이 수
행해야 하는 기능을 수행
JSP 2.0 Programming
29
스크립트 요소 - 스크립트릿
"자바 코드를 실행할
때 사용되는 코드의 블럭"
(scriptlet)
Syntax
<%
실행코드1;
실행코드2;
...
실행코드n;
%>
<% 와 %> 사이에 실행할
자바 코드를 삽입한다.
Example
<%@ page contentType = "text/html; charset=euc-kr" %>
<html>
<head><title>1-10까지의 합</title></head>
<body>
<%
int sum = 0;
for (int i = 1 ; i <= 10 ; i++) {
sum = sum + i;
}
%>
1 부터 10까지의 합은 <%= sum %> 입니다.
</body>
</html>
JSP 2.0 Programming
30
스크립트 요소 - 표현식
"값을 출력한다."
(expression)
Syntax
<%= 출력할값 %>
Example
<%@ page contentType = "text/html; charset=euc-kr" %>
<html>
<head><title>1-10까지의 합:표현식만 사용</title></head>
<body>
1 부터 10까지의 합은
<%= 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 %>
입니다.
</body>
</html>
JSP 2.0 Programming
31
스크립트 요소 - 선언부
"스크립트릿이나 표현식에서 사용할 수 있는 함수를 작성할 때 사용"
(declaration)
Syntax
<%!
public 리턴타입 메소드이름(파라미터목록) {
자바코드1;
...
자바코드n;
return 값;
}
%>
요소
설명
리턴타입
메소드의 실행 결과 값의 타입을 지정한다.
메소드이름
메소드의 이름을 의미
파라미터목록
콤마로 구분된 파라미터의 목록을 지정한다. 파라미터는 메소드 내에서 사용될 변수
자바코드1-n
메소드 내에서 실행할 자바 코드
값
메소드의 실행 결과로 사용될 값
JSP 2.0 Programming
32
Example
스크립트 요소 - 선언부
(declaration) 예제
<%@ page contentType = "text/html; charset=euc-kr" %>
<%!
public int multiply(int a , int b) {
int c = a * b;
return c;
}
%>
<html>
<head><title>선언부를 사용한 두 정수값의 곱</title></head>
<body>
10 * 25 = <%= multiply(10, 25) %>
</body>
</html>
JSP 2.0 Programming
33
request 기본 객체
클라이언트 관련 정보를
request 기본객체에 저장
파라미터, 헤더, 쿠키 등 전송
request
기본객체
JSP
웹 서버
request 기본 객체가 제공하는 기능
•
•
•
•
•
•
클라이언트(웹 브라우저)와 관련된 정보 읽기 기능
서버와 관련된 정보 읽기 기능
클라이언트가 전송한 요청 파라미터 읽기 기능
클라이언트가 전송한 요청 헤더 읽기 기능
클라이언트가 전송한 쿠키 읽기 기능
속성 처리 기능
JSP 2.0 Programming
34
HTML 폼과 전송 방식
폼에 입력한 데이터는
파라미터로 전달됨
파라미터 목록
(폼 데이터)
웹 서버
[데이터 전송 방식]
항목
GET
POST
POST (multipart)
방식
요청 URI 사용해서 전송
스트림
스트림
길이제한
CGI의 경우 환경변수의 길이
제한과 동일
없음
없음
인코딩
application/x-www-form-urlencoded
multipart/formdata
Request 호환
request 기본 객체로 파라미터 읽기 가능
request 기본 객체로 파라미터를 읽을 수
없음.
JSP 2.0 Programming
35
Code
요청 파라미터의 한글 처리
<%@ page contentType="text/html; charset=euc-kr" %>
<%@ page import="java.util.Enumeration" %>
<%@ page import="java.util.Map" %>
<%
request.setCharacterEncoding("euc-kr");
%>
<html>
...
• 각 웹콘테이너마다 인코딩과 관련된 추가적인 옵션을 제공
• 모든 콘테이너에서 같은 방식으로 동작하기 위해서는 위와
같이 request의 인코딩을 지정해주는 것이 좋음
JSP 2.0 Programming
36
response 기본 객체
클라이언트에 전송할 정보를
response 기본객체에 저장
헤더, 쿠키 등 전송
response
기본객체
JSP
웹 서버
response 기본 객체가 제공하는 기능
• 헤더 정보 전달
• 쿠키 전달
• 리다이렉트 지정
* 이외에 몇가지 기능이 더 있지만 거의 사용되지 않는다.
JSP 2.0 Programming
37
response 기본 객체를 이용한 리다
이렉트
"웹 브라우저에게 다른 페이지로
이동하라고 지시하는 것을
리다이렉트(redirect)라고 한다"
1. 요청 보냄
a.jsp
2. b.jsp로 리다이렉트
하라고 지정함
a.jsp
웹브라우저는 리다이렉트를 결
과로 받은 경우 곧바로 지정한
페이지로 요청을 전송한다.
3. b.jsp를 요청함
b.jsp
JSP 2.0 Programming
38
response.sendRedirec()
Code
<%@ page contentType="text/html; charset=euc-kr" %>
<%
response.sendRedirect("/chap02/index.jsp");
%>
일반적인 코딩법
<%@ page contentType="text/html; charset=euc-kr" %>
<%
if ( 조건 ) {
response.sendRedirect("이동할 페이지");
} else {
조건에 맞으면
이동한다
}
%>
JSP 2.0 Programming
39
기본 데이터 타입 (primitive type)
[자바에서 기본적으로 제공하는 데이터 타입 ]
타입
설명
값의 범위
char
문자형
자바 언어가 지원하는 모든 유니코드
byte
정수형
-128 ~ 127
short
정수형
-32768 ~ 32767
int
정수형
-2147483648 ~ 2147483647
long
정수형
-9223372036854775808 ~
9223372036854775807
float
실수형
32비트
double
실수형
64비트
boolean
참/거짓
true, false
* 실수값의 표현 방식은 IEEE 754 표준을 따르고 있다.
JSP 2.0 Programming
40
문자 타입과 값
"문자 타입인 char 타입의 값은 작은 따옴표를 사용하여 표시"
Example
'가'
'최'
'1'
'\ucd08'(초)
'\uae30'(기)
'\ud654'(화)
Code
<%@ page contentType="text/html; charset=euc-kr" %>
<html>
<head><title>char 타입 사용 예</title></head>
<body>
<%
char ch = '한';
%>
변수에 저장해서 사용: <%= ch %>
<br>
표현식에서 직접 사용: <%= '\ucd08' %> <%= '\uae30' %> <%= '\ud654' %>
</body>
</html>
JSP 2.0 Programming
41
특수문자 (escape character)
특수문자
표현방법
\
\\
Tab
\t
New Line
\n
Carriage Return
\r
작은 따옴표(')
\'
큰 따옴표(")
\"
Example
'\\'
'\t'
'\''
JSP 2.0 Programming
42
정수 타입과 값
"소수점을 포함하지 않은 숫자를 표현한다.
byte, short, int, long 타입이 정수 타입에 해당한다."
•
•
•
•
소수점이 없는 정수는 int 타입
뒤에 'l' 이나 'L'을 붙이면 long 타입의 정수
값 앞에 (byte)를 붙이면 byte 타입의 정수로 처리
값 앞에 (short)를 붙이면 short 타입의 정수로 처리
Example
10 -2578 809
1234567890L 124l
(short)10
(byte)-200
JSP 2.0 Programming
43
실수 타입과 값
"소수점을 포함한 숫자를 표현한다.
float, double 타입이 실수 타입에 해당한다."
• 소수점이 있는 실수는 double 타입
• 뒤에 'f' 나 'F'를 붙이면 float 타입의 실수
• 지수 형태로 표현할 수도 있다.
Example
32.125f
32.125
32.0f
32.0
32.f
32.
0.8f
0.8
.8f
.8
320.9 → 3.209e2,
320.9f → 3.209e2f
JSP 2.0 Programming
44
boolean 타입과 값
"참과 거짓을 나타낼 때 boolean 타입을 사용한다."
• 참을 나타낼 때는 true 를 값으로 사용
• 거짓을 나타낼 때는 false 를 값으로 사용
• 이 두 값은 조건문이나 반복문에 주로 사용된다.
JSP 2.0 Programming
45
배열
"값의 모음을 표현할 때 사용"
Syntax
type[] variableName = new type[length]
Example
int[] intArray = new int[10];
double[] doubleArray = new double[25];
Code Usage
int[] intArray = new int[10];
intArray[8] = 10;
int arry = intArray[1] * 3;
배열의 9번째 요소의 값을 사용
배열의 2번째 요소의 값을 사용
JSP 2.0 Programming
46
변수(variable)와 레퍼런스
(reference)
변수 - 기본 데이터
타입의 값을 저장할 때 사용
•
• 레퍼런스 - 클래스의 객체를 참조할 때 사용
• 메모리에 변수와 레퍼런스를 위한 공간이 생성
메모리
코드실행 순서
i
int i = 10;
10
i
i = 3;
3
i
j
3
21
int j = i * 7;
JSP 2.0 Programming
47
형변환
(type
casting)
• 자바는 타입을 엄격하게 적용하는 언어이다.
• 자동형변환 - 서로 다른 두 타입을 사용할 때 자동으로 타입을 변환
• 직접형변환 - 직접 타입을 변환하는 것
타입의 엄격한 적용
int value = 3.2098e3;
타입 변환 에러 발생
직접 형변환 코드
int val = (int) 10L;
int val = (int) 100.8;
short val = 45000;
// long 타입을 int로 변환
// double 타입을 int로 변환
// int 타입을 short로 변환
JSP 2.0 Programming
48
데이터 타입
자동 형변환
자동변환 가능 데이터 타입
byte
short, int, long, float, double
short
int, long, float, double
char
int, long, float, double
int
long, float, double
long
float, double
float
double
* 자동 형변환은 범위가 작은 타입을 범위가 큰 타입에 저장할 때에만 가능
JSP 2.0 Programming
49
연산자
연산자 - 수치 연산자
설명
+
두 값을 더한다.
-
한 값에서 다른 값을 뺀다.
*
두 값을 곱한다.
/
한 값에 다른 값을 나눈다.
%
한 값을 다른 값으로 나눈 나머지를 구한다.
Code
<%@ page contentType="text/html; charset=euc-kr" %>
<html><head><title>수치 연산자 사용 예</title></head>
<body>
<%
int operand1 = 10;
int operand2 = 3;
%>
10 + 3 = <%= operand1 + operand2 %> <br>
10 - 3 = <%= operand1 - operand2 %> <br>
10 * 3 = <%= operand1 * operand2 %> <br>
10 / 3 = <%= operand1 / operand2 %> <br>
10 % 3 = <%= operand1 % operand2 %> <br>
</body></html>
JSP 2.0 Programming
50
연산자
증감/감소
연산자
연산자
설명
++ operand
operand의 값을 1 증가시킨 후, operand를 사용한다.
-- operand
operand의 값을 1 감소시킨 후, operand를 사용한다.
operand ++
operand를 사용한 후, operand의 값을 1 증가시킨다.
operand --
operand를 사용한 후, operand의 값을 1 감소시킨다.
Code
<%@ page contentType = "text/html; charset=euc-kr" %>
<%
int i = 0;
i++;
%>
<html>
<head><title>++ 연산자 사용</title></head>
<body>
첫번째 i 값 = <%= i %> <br>
두번째 i 값 = <%= ++i %> <br>
세번째 i 값 = <%= i++ %> <br>
네번째 i 값 = <%= i %>
</body>
</html>
JSP 2.0 Programming
51
연산자 - 비교설명 연산자
연산자
a == b
a와 b가 같을 경우 true, 다를 경우 false
a != b
a와 b가 다를 경우 true, 그렇지 않을 경우 false
a>b
a가 b보다 클 경우 true, 그렇지 않을 경우 false
a >= b
a<b
a <= b
a가 b보다 크거나 같은 경우 true, 그렇지 않을 경우 false
a가 b보다 작을 경우 true, 그렇지 않을 경우 false
a가 b보다 작거나 같은 경우 true, 그렇지 않을 경우 false
Code
true : 3 > 1
false : 3 < 2.5
10.3 != 1
4 <= 4
10 == 7
4 >= 6
JSP 2.0 Programming
52
연산자
연산자 - 논리 연산자
설명
b1 && b2
b1과 b2가 모두 true이면 true, 그렇지 않을 경우 false
b1 || b2
b1과 b2 중 하나라도 true이면 true, 둘다 false인 경우에만 false
! b1
b1이 true이면 false, false이면 true
Code
a >= 1 && a <= 10 : a가 1보다 크다 그리고 10보다 작다
a < 1 || a > 10 : a가 10보다 작다 또는 a가 10보다 크다
JSP 2.0 Programming
53
연산자
연산자 -설명할당 연산자동일한 표현방법
op1 += op2
op1에 op2를 더한 후 그 결과를 op1에 저장한다.
op1 = op1 + op2
op1 -= op2
op1에서 op2를 뺀 후 결과를 op1에 저장한다.
op1 = op1 - op2
op1 *= op2
op1과 op2를 곱한 결과를 op1에 저장한다.
op1 = op1 * op2
op1 /= op2
op1을 op2로 나눈 결과를 op1에 저장한다.
op1 = op1 / op2
op1 %= op2
op1을 op2로 나눈 나머지를 op1에 저장한다.
op1 = op1 % op2
* 할당 연산자를 사용하면 조금더 간결하게 식을 표현할 수 있게 된다.
JSP 2.0 Programming
54
코드 블럭(block)
"하나의 코드가 실행되는 집합으로서 '{'로 시작해서 '}'로 끝난다"
Syntax
{ // 블럭의 시작
....
.... 코드 실행
....
} // 블럭의 끝
Example
<%@ page contentType = "text/html; charset=euc-kr" %>
<html><head><title>영역 테스트</title></head>
<body>
<%
{
int i = 20;
i ++;
%>
첫번째 블럭 내에서 i 값: <%= i %> <br>
<%
}
%>
<%
{
int i = 30;
i ++;
%>
두번째 블럭 내에서 i 값: <%= i %>
<%
}
%>
</body></html>
JSP 2.0 Programming
55
블럭의 특징
• 서로 다른 블럭에서는 같은 이름의 변수를 사용할 수 있다.
• 블럭 안에서 선언한 변수는 블럭 밖에서 사용할 수 없다.
•Example
블럭 밖에서 선언한 변수를 블럭 안에서 다시 선언할 수 없다.
{
int var = 10;
var ++;
}
var = 20;
int var = 20;
...
{
int var = 10;
블럭안에서 중복선언
var ++;
}
허용하지
않음
블럭안에서 선언한 변수 사용
JSP 2.0 Programming
56
조건에
따른
처리:
if
else
Syntax
if ( 조건 ) {
// 자바 코드
} else {
// 자바 코드
}
if ( 조건1 ) {
조건이 true이면 실행
// 자바 코드
} else if ( 조건2 ) {
// 자바 코드
조건이 false이면 실행
} else {
// 자바 코드
모든 조건이 false이면 실행
}
Example
if ( mark >= 90 ) {
grade = "A";
}
if ( mark >= 90 ) {
grade = "A";
} else if (mark >= 80) {
grade = "B";
} else if (mark >= 70) {
grade = "C";
} else if (mark >= 60) {
grade = "D";
} else {
grade = "F";
}
JSP 2.0 Programming
57
Syntax
}
반복 처리: for
for ( 초기값 ; 반복조건 ; 증감처리 ) {
자바 코드
자바 코드
반복조건이 true이면
계속해서 실행
Example
<%@ page contentType="text/html; charset=euc-kr" %>
<html>
<head><title>for 구문 사용 예</title></head>
<body>
<%
<%
int sum = 0;
sum = 0;
for (int i = 1 ; i <= 100 ; i++) {
for (int i = 2 ; i <= 100 ; i += 2) {
sum += i;
sum += i;
}
}
%>
%>
1부터 100까지의 합 = <%= sum %> <br>
1부터 100까지의 짝수의 합 = <%= sum %>
</body>
</html>
JSP 2.0 Programming
58
Syntax
while( 반복조건 ) {
자바코드
자바코드
}
반복처리: while
반복조건이 true이면
계속해서 실행
* 반복조건을 false로 만들어주는 코드가 존재해야 함.
* 그렇지 않을 경우 while은 무한히 실행.
Example
<%@ page contentType="text/html; charset=euc-kr" %>
<html><head><title>while 구문 사용 예</title></head>
<body>
<%
int sum = 0;
int i = 1;
while ( i <= 100 ) {
sum += i;
i++;
반복조건 ( i <= 100 )이 false가 될 수 있도록 만들어주는 코드
}
%>
1부터 100까지의 합 = <%= sum %> <br>
</body></html>
JSP 2.0 Programming
59
Syntax
반복처리: do - while
do {
자바코드
자바코드
} while (반복조건);
반복조건이 true이면
계속해서 실행
* 반복조건을 false로 만들어주는 코드가 존재해야 함.
* 그렇지 않을 경우 while은 무한히 실행.
Example
int i = 1;
int sum = 0;
do {
sum += i;
i ++;
} while ( i <= 100 );
반복조건 ( i <= 100 )이 false가 될 수 있도록 만들어주는 코드
JSP 2.0 Programming
60
반복문의 주된 사용방법
반복문
사용법
for
반복할 회수가 정해진 경우에 주로 사용된다. 예를 들어, 배열
의 각 요소를 반복해서 처리한다거나, 지정한 회수만큼 처리
가 필요한 경우에 사용된다.
while
반복할 회수가 정해져 있지 않은 경우에 주로 사용된다.
경우에 따라서 한번도 실행되지 않을 수가 있다.
do-while
반복할 회수가 정해져 있지 않은 경우에 주로 사용된다.
최소한 한번은 실행된다.
JSP 2.0 Programming
61
문자열과 String
• 문자열은 String 클래스를 사용해서 표현
• 문자열은 큰 따옴표로 둘러 싸서 표현
• 문자열의 인덱스는 0부터 시작한다.
Example
"문자열입니다."
String str = "문자열입니다."
인덱스 번호
"표현할 문장, ab"
표
현
할
0
1
2
3
JSP 2.0 Programming
문
장
,
4
5
6
7
a
b
8
9
62
String 클래스의 주요 메소드
메소드
리턴타입
설명
length()
int
문자열의 길이를 구한다.
charAt(int index)
char
지정한 인덱스에 위치한 문자를 리턴한다.
indexOf(String str)
int
str이 포함되어 있는 첫번째 인덱스를 구한다. str
이 포함되어 있지 않을 경우 -1을 리턴한다.
indexOf(String str, int fromIndex)
int
fromIndex 이후에 str이 포함되어 있는 첫번째 인
덱스를 구한다. str이 포함되어 있지 않을 경우 -1
을 리턴한다.
indeOf(char ch)
int
문자 ch의 첫번째 인덱스를 구한다. 문자 ch가 존
재하지 않을 경우 -1을 리턴한다.
indeOf(char ch, int fromIndex)
int
fromIndex 이후에 문자 ch의 첫번째 인덱스를 구
한다. 문자 ch가 존재하지 않을 경우 -1을 리턴한
다.
substring(int i)
String
인덱스 i부터 나머지 문자열을 구한다.
substring(int i1, int i2)
String
i1부터 i2-1 까지의 문자열을 구한다.
equals(String str)
boolean
현재 문자열이 str과 같은 경우 true를 리턴한다.
compareTo(String str)
int
현재 문자열이 str과 같은 경우 0을 리턴한다. 유니
코드상으로 현재 문자열이 앞에 위치한 경우 음수
를, str이 앞에 위치한 경우 양수를 리턴한다.
JSP 2.0 Programming
63
JSP의 처리 1.1과정
0. 클라이언트
요청
웹콘테이너
3. 클라이언트
응답
2.2
처리결과
전송
JSP와 관련된
서블릿 클래스가
없는 경우
2.1
서블릿에
요청 전달
서블릿
클래스
JSP 2.0 Programming
JSP
페이지
1.2
JSP로부터
자바 코드 생성
1.3
자바 코드 컴파일
자바
소스
코드
64
출력 버퍼
클라이언트 요청
웹 콘테이너
JSP
출력 결과
를
버퍼에 먼
저
저장
출력버퍼
버퍼에 저장된 내용을
클라이언트에 전송
버퍼의 장점
• 출력 성능의 향상
• 중간에 버퍼를 비우고 새로운
내용을 출력할 수 있음
• 버퍼가 다 차기 전까지 헤더를
변경할 수 있다.
JSP 2.0 Programming
65
출력
버퍼의
기본
동작
방식
출력버퍼
1. 버퍼에 저장
JSP
페이지
2. 버퍼에 데이터가
JSP
다 찼음
출력버퍼
3. 버퍼에 쌓인
JSP
데이터를 전송하고
페이지
버퍼를 비움
출력버퍼
4. 계속해서 버퍼에
JSP
데이터 적재함 페이지
출력버퍼
페이지
JSP 2.0 Programming
버퍼가 다 차면
데이터를 클라이언
트에
전송한다
66
출력 버퍼의 설정: buffer 속성과
buffer 속성
autoFlush 속성
<%@ page buffer = "nnnkb" %> - 버퍼의 크기를 nnn kb로 지정
<%@ page buffer = "none" %> - 버퍼를 사용하지 않도록 지정
autoFlush 속성
<%@ page autoFlush = "true|false" %>
* true - 버퍼가 다 찼을 경우 버퍼를 플러시하고 계속해서 작업을 진행 (기본값)
* false - 버퍼가 다 찼을 경우 예외를 발생시키고 작업을 중지
JSP 2.0 Programming
67
웹
어플리케이션의
폴더
구조
[전형적인 웹 어플리케이션의 폴더 구조]
폴더 및 파일
설명
WEB-INF\
웹 어플리케이션을 실행하는 데 필요한 클래스 파일 및 설정 파일
등이 저장되는 폴더
WEB-INF\web.xml
웹 어플리케이션에 대한 전반적인 설정 정보를 저장하고 있는 파일
WEB-INF\classes
웹 어플리케이션에서 사용하는 클래스 파일이 위치
WEB-INF\lib
웹 어플리케이션에서 사용하는 Jar 파일이 위치
WEB-INF\tld
태그라이브러리 관련 설정 파일은 보통 tld 폴더에 저장
JSP 2.0 Programming
68
웹 어플리케이션 폴더와 요청 URL
의 관계
* 기본적으로 웹 어플리케이션 폴더의 이름은 요청 URL의 첫번째 폴더와 동일하다.
* 웹 어플리케이션의 경로는 '/폴더'의 형태를 갖는다.
http://localhost:8080/chap01
http://localhost:8080/chap02
http://localhost:8080/chap03
http://localhost:8080/chap04
http://localhost:8080/
webapps 폴더에 웹 어플리케이션을 위치시킬 경우
기본적으로 폴더와 웹 어플리케이션 경로가
동일한 이름을 갖게 된다.
JSP 2.0 Programming
69
JSP의 9가지 기본 객체
기본객체명
실제 타입
설명
request
javax.servlet.http.HttpServletRequest 또는
javax.servlet.ServletRequest
클라이언트의 요청 정보를 저장한다.
response
javax.servlet.http.HttpServletResponse 또는
javax.servlet.ServletResponse
응답 정보를 저장한다.
pageContext
javax.servlet.jsp.PageContext
JSP 페이지에 대한 정보를 저장한
다.
session
javax.servlet.http.HttpSession
HTTP 세션 정보를 저장한다.
application
javax.servlet.ServletContext
웹 어플리케이션에 대한 정보를 저
장한다.
out
javax.servlet.jsp.JspWriter
JSP 페이지가 생성하는 결과를 출력
할 때 사용되는 출력 스트림이다.
config
javax.servlet.ServletConfig
JSP 페이지에 대한 설정 정보를 저
장한다.
page
java.lang.Object
JSP 페이지를 구현한 자바 클래스
인스턴스이다.
exception
java.lang.Throwable
예외 객체. 에러 페이지에서만 사용
된다.
JSP 2.0 Programming
70
out 기본 객체
"JSP 페이지가 생성하는 모든 내용은 out 기본 객체를 통해서 전송된다"
<html>
<head>
<title>제목</title>
</head>
<body>
안녕하세요?
<%= someValue %>
out 기본 객체를
통해서 클라이언트
에 내용이 전달됨
out 기본 객체
</body>
</html>
JSP 2.0 Programming
71
out
기본
객체의
출력
메소드
메소드
설명
print(출력값)
값을 출력한다.
println(출력값)
값을 출력한 뒤 마지막에 \r\n(또는 \n)을 출력한다.
newLine()
\r\n(또는 \n)을 출력한다.
Example
<%@ page contentType = "text/html; charset=euc-kr" %>
<html>
<head><title>out 기본 객체 사용</title></head>
<body>
<%
out.println("안녕하세요?");
%>
<br>
out 기본 객체를 사용하여
<%
out.println("출력한 결과입니다.");
%>
</body></html>
JSP 2.0 Programming
72
pageContext 기본 객체의 주요 기
"pageContext는 하나의 JSP 능
페이지와 1대 1로 매핑되는 객체"
•
•
•
•
다른 기본 객체 구하기
속성 처리하기
페이지의 흐름 제어 (7장, 8장)
에러 데이터 구하기 (6장)
JSP 2.0 Programming
73
pageContext 기본 객체: 기본 객체
접근 메소드
메소드
리턴타입
설명
getRequest()
ServletRequest
request 기본 객체를 구한다.
getResponse()
ServletResponse
response 기본 객체를 구한다.
getSession()
HttpSession
session 기본 객체를 구한다.
getServletContext()
ServletContext
application 기본 객체를 구한다.
getServletConfig()
ServletConfig
config 기본 객체를 구한다.
getOut()
JspWriter
out 기본 객체를 구한다.
getException()
Exception
exception 기본 객체를 구한다.
getPage()
Object
page 기본 객체를 구한다.
JSP 2.0 Programming
74
application 기본 객체
• 웹 어플리케이션과 관련된 기본 객체이다.
• 하나의 웹 어플리케이션에 포함된 모든
JSP 페이지는 하나의 application 기본 객
체를 공유
• 웹 어플리케이션 전반에 걸쳐서 사용되는
정보를 저장
JSP 2.0 Programming
75
application 기본 객체: 초기화 파라
[어플리케이션 초기화 파라미터를 읽어올 때 사용되는 메소드]
미터 읽기
메소드
리턴타입
설명
getInitParameter(String name)
String
이름이 name인 웹 어플리케이션 초기화 파
라미터의 값을 읽어온다. 존재하지 않을 경
우 null을 리턴한다.
getInitParameterNames()
Enumeration
웹 어플리케이션 초기화 파라미터의 이름
목록을 리턴한다.
web.xml 파일에서 설정한 어플리
케이션 파라미터를 application 기
본 객체를 통해서 사용한다.
<web.xml ..>
...
<context-param>
<%@ page contentType = "..." %>
<description>설명</description>
...
<param-name>port</param-name>
<%= application.getInitParameter("port") %>
<param-value>2005</param-value> ...
</context-param>
...
</web.xml>
JSP 2.0 Programming
76
application 기본 객체: 서버 정보
[어플리케이션 초기화 파라미터를 읽어올 때 사용되는 메소드]
읽기
메소드
리턴타입
설명
getServerInfo()
String
서버 정보를 구한다.
getMajorVersion()
String
서버가 지원하는 서블릿 규약의 메이저 버전을 리턴한다.
버전의 정수부분을 리턴한다.
getMinorVersion()
String
서버가 지원하는 서블릿 규약의 마이너 버전을 리턴한다.
버전의 소수 부분을 리턴한다.
Example
<%@ page contentType = "text/html; charset=euc-kr" %>
<html>
<head><title>서버 정보 출력</title></head>
<body>
서버정보: <%= application.getServerInfo() %><br>
서블릿 규약 메이저 버전: <%= application.getMajorVersion() %> <br>
서블릿 규약 마이너 버전: <%= application.getMinorVersion() %>
</body></html>
JSP 2.0 Programming
77
JSP의 네 가지 영역
웹 어플리케이션
JSP
JSP
include
forward
JSP
•
•
•
•
JSP
같은
객체
:
:
:
:
pageContext 기본객체
request 기본객체
session 기본객체
application 기본객체
PAGE 영역 - pageContext 기본 객체
REQUEST 영역 - request 기본 객체
SESSION 영역 - session 기본 객체
APPLICATION 영역 - application 기본 객체
JSP 2.0 Programming
78
JSP
기본
객체의
속성
• 기본 객체 pageContext, request, session, application은 속성을 갖는다.
•
•
•
•
속성은 각각의 기본 객체가 존재하는 동안에 사용 가능
JSP 페이지 사이에서 정보를 주고 받거나 공유하기 위한 목적으로 사용
속성은 <속성이름, 값>의 형태를 가짐
서로 다른 이름을 가진 속성을 여러 개 포함할 수 있다.
[네 기본 객체의 속성 관련 메소드]
메소드
리턴타입
설명
setAttribute(String name,
Object value)
void
이름이 name인 속성의 값을 value로
지정한다.
getAttribute(String name)
Object
이름이 name인 속성의 값을 구한다.
지정한 이름의 속성이 존재하지 않을
경우 null을 리턴한다.
removeAttribute(String name)
void
이름이 name인 속성을 삭제한다.
getAttributeNames()
java.util.Enumeration
속성의 이름 목록을 구한다.
(pageContext 기본 객체는 이 메소
드를 제공하지 않는다.)
☞ 속성의 값 타입은 Object이므로 값을 사용할 때에는 알맞은 형변환이 필요
JSP 2.0 Programming
79
속성의
활용
영역
쓰임새
기본 객체
pageContext
PAGE
(한번의 요청을 처리하는) 하나의 JSP 페이지 내에
서 공유될 값을 저장한다. 주로 커스텀 태그에서 새
로운 변수를 추가할 때 사용된다.
request
REQUEST
한번의 요청을 처리하는 데 사용되는 모든 JSP 페이
지에서 공유될 값을 저장한다. 주로 하나의 요청을
처리하는 데 사용되는 JSP 페이지 사이에서 정보를
전달하기 위해 사용된다.
session
SESSION
한 사용자와 관련된 정보를 JSP 들이 공유하기 위해
서 사용된다. 사용자의 로그인 정보와 같은 것들을
저장한다.
application
APPLICATION
모든 사용자와 관련해서 공유할 정보를 저장한다.
임시 디렉토리 경로와 같은 웹 어플리케이션의 설정
정보를 주로 저장한다.
JSP 2.0 Programming
80
에러 페이지 지정하기
Syntax
<%@ page errorPage="에러페이지URI" %>
* 현재 JSP 페이지에서 에러가 발생하면 errorPage 속성에 명시한 페이지를 보여준다.
Example
<%@ page contentType = "text/html; charset=euc-kr" %>
<%@ page errorPage = "/error/viewErrorMessage.jsp" %>
<html>
<head><title>파라미터 출력</title></head>
<body>
에러 페이지 지정
name 파라미터 값: <%= request.getParameter("name").toUpperCase() %>
</body>
</html>
이 코드에서 에러가 발생하므로
viewErrorMessage.jsp를 보여줌
JSP 2.0 Programming
81
에러 페이지 작성하기
Syntax
<%@ page isErrorPage="true" %>
* 현 JSP 페이지를 에러 페이지로 지정하려면 isErrorPage 속성의 값을 true로 지정
Example
<%@ page contentType = "text/html; charset=euc-kr" %>
<%@ page isErrorPage = "true" %>
에러 페이지로 지정되면
<html>
예외 정보를 담고 있는
<head><title>예외 발생</title></head>
exception 기본 객체를
<body>
사용할 수 있게 된다.
요청 처리 과정에서 예외가 발생하였습니다.<br>
빠른 시간내에 문제를 해결하도록 하겠습니다.
<p>
에러 타입: <%= exception.getClass().getName() %> <br>
에러 메시지: <b><%= exception.getMessage() %></b>
</body>
</html>
JSP 2.0 Programming
82
에러 코드 및 타입에 따른 에러 페
이지 지정
Syntax
<?xml version="1.0" encoding="euc-kr"?>
<web-app ... >
...
<error-page>
<error-code>에러코드</error-code>
<location>에러페이지URI</location>
</error-page>
<error-page>
<exception-type>에러타입</exception-type>
<location>에러페이지URI</location>
</error-page>
HTTP 에러코드별
에러 페이지 지정
자바 에러 타입별
에러 페이지 지정
</web-app>
JSP 2.0 Programming
83
에러 페이지의 우선 순위
1.
page 디렉티브의 errorPage 속성에서 지정한 에러 페이지
를 보여준다.
2.
JSP 페이지에서 발생한 예외 타입이 web.xml 파일의
<exception-type>에서 지정한 예외 타입과 동일한 경우
지정한 에러 페이지를 보여준다.
3.
JSP 페이지에서 발생한 에러 코드가 web.xml 파일의
<error-code>에서 지정한 에러 코드와 동일한 경우 지정한
에러 페이지를 보여준다.
4.
아무것도 해당되지 않을 경우 톰캣 엔진이 제공하는 기본
에러 페이지를 보여준다
JSP 2.0 Programming
84
에러 페이지 지정 방법
• 별도의 에러 페이지가 필요한 경우 page 디렉티브
의 errorPage 속성을 사용해서 에러 페이지를 지정
한다.
• 범용적인 에러 코드(404, 500 등)에 대해서 에러 페
이지를 지정한다.
• 별도로 처리해 주어야 하는 예외 타입(심각함을 나
타내는 예외)에 대해서는 web.xml에 <exceptiontype> 태그를 추가해서 따로 에러 페이지를 보여준
다.
JSP 2.0 Programming
85
포워딩이란?
포워딩 실행시점
요청보냄
from.jsp
from.jsp에서 to.jsp로
요청 처리흐름이 이동
응답전송
•
•
•
to.jsp에서 웹브라우저에
전송할 응답 결과를 생성한다.
to.jsp
from.jsp가 아닌 to.jsp가 생성한 응답 결과가 웹 브라우저에 전달된다.
from.jsp에서 사용한 request, response 기본 객체가 to.jsp에 그대로 전달된다.
클라이언트는 to.jsp로 흐름이 이동한 사실을 알지 못한다!!
JSP 2.0 Programming
86
<jsp:forward> 액션 태그
Syntax
<jsp:forward page="이동할 페이지" />
또는
<jsp:forward page="이동할 페이지">
<jsp:param name="파라미터1" value="값1" />
<jsp:param name="파라미터2" value="값2" />
</jsp:forward>
JSP 2.0 Programming
87
<jsp:forward> 액션 태그 예제
Example
<%@ page contentType = "text/html; charset=euc-kr" %>
<%-<jsp:foward> 액션 태그를 실행하면
생성했던 출력 결과는 모두 제거된다.
--%>
<html>
<head><title>from.jsp의 제목</title></head>
<body>
이 페이지는 from.jsp가 생성한 것입니다.
to.jsp의 결과가
웹브라우저에 출력
<jsp:forward
<jsp:forwardpage="/to/to.jsp"
page="/to/to.jsp"/>
/>
</body>
</html>
<%@ page contentType = "text/html; charset=euc-kr" %>
<html>
<head><title>to.jsp의 실행 결과</title></head>
<body>
이 페이지는 to.jsp가 생성한 것입니다.
</body>
</html>
JSP 2.0 Programming
88
<jsp:forward> 액션 태그와 출력버
퍼의 관계
요청보냄
from.jsp
from.jsp
<jsp:forward>
액션태그실행
to.jsp로
흐름 이동
응답보냄
from.jsp
to.jsp
to.jsp
출력버퍼
출력버퍼
출력버퍼
출력버퍼
출력버퍼
JSP 2.0 Programming
from.jsp의
출력결과
버퍼에 저장
출력버퍼
비움
to.jsp의
출력결과
버퍼에 저장
출력버퍼의
내용을 응답
결과로 사용
89
<jsp:forward> 액션 태그의 전형적
Code
인 사용법
<%@ page contentType = "text/html; charset=euc-kr" %>
<%
String forwardPage = null;
// 조건에 따라 이동할 페이지를 지정
if (조건판단1) {
forwardPage = "페이지URI1";
} else if (조건판단2) {
forwardPage = "페이지URI2";
} else if (조건판단3) {
forwardPage = "페이지URI3";
}
%>
<jsp:forward page="<%= forwardPage %>" />
조건에 따라 이동할
페이지를 선택
지정한 페이지로 이동
* 이 코드 형태는 JSP로만 구현하는 모델2 구조 구현 기법으로 연결된다!!
JSP 2.0 Programming
90
이동할 페이지에 값 전달하기
1. 속성을 통한 값의 전달 방법
2. 파라미터를 통한 값의 전달
request.setAttribute(이름1, 값1);
request.setAttribute(이름2, 값2);
from.jsp
<jsp:forward>
to.jsp
<jsp:forward page="moveTo.jsp">
<jsp:param name="first" value="BK" />
<jsp:param name="last" value="Choi" />
</jsp:forward>
request
<이름1, 값1>
<이름2, 값2>
Object value1 = request.getAttribute(이름1);
Object value2 = request.setAttribute(이름2);
JSP 2.0 Programming
91
리다이렉트를 이용한 페이지 이동
처리 과정
1. 요청보냄
from.jsp
2. 리다이렉트
응답보냄
포워딩과 달리 리다이렉트는
클라이언트에 데이터를 전송한다.
3. 이동할페이지로
요청보냄
4. 응답보냄
to.jsp
Code
<%
%>
String paramString = "code=A000&type=C";
response.sendRedirect("/to/move.jsp?"+paramString);
JSP 2.0 Programming
92
<jsp:include> 액션 태그
"<jsp:include> 액션 태그는 지정한 페이지를
태그가 위치한 부분에 포함시킬 때 사용"
동작방식
<jsp:include>가 실행되면 지정한
페이지로 요청 흐름이 이동한다.
요청보냄
main.jsp
1
출력내용 A
2
<jsp:include
page=“sub.jsp”
flush=“false” />
sub.jsp
출력내용 B
3
4
출력내용 C
5
응답전송
지정한 페이지의 실행이 끝나면 요청 흐름이
다시 <jsp:include> 이후 부분으로 돌아온다.
JSP 2.0 Programming
93
<jsp:include> 액션 태그
Syntax
<jsp:include page="이동할 페이지" flush="true"/>
<jsp:include page="이동할 페이지" flush="false"/>
또는
<jsp:include page="이동할 페이지" flush="...">
<jsp:param name="파라미터1" value="값1" />
<jsp:param name="파라미터2" value="값2" />
</jsp:include>
JSP 2.0 Programming
94
<jsp:include> 액션 태그 예
Example
<%@ page contentType = "text/html; charset=euc-kr" %>
<html>
<head><title>main</title></head>
<body>
main.jsp에서 생성한 내용.
<jsp:include page="sub.jsp"
page="sub.jsp" flush="false"
/>/>
<jsp:include
flush="false"
include 이후의 내용.
</body>
</html>
<%@ page contentType = "text/html; charset=euc-kr" %>
<p>
sub.jsp에서 생성한 내용.
</p>
JSP 2.0 Programming
sub.jsp의 결과가
<jsp:include> 위치에 포함됨
95
<jsp:include>와 페이지 모듈화: 일
반적 페이지 구성
상단
좌측
메뉴
중앙
내용
공통부분
변경부분
하단
JSP 2.0 Programming
96
공통UI를 모듈화하지 않은 경우의
문제점!
JSP1
상단코드
...
...
...
하단코드
JSP2
상단코드
...
...
...
하단코드
JSP3
상단코드
...
...
...
하단코드
JSP1
변경상단코드
...
...
...
하단코드
JSP2
변경상단코드
...
...
...
하단코드
JSP3
변경상단코드
...
...
...
하단코드
JSP 2.0 Programming
공통된 부분을 변경하려면
관련된 JSP 페이지를
모두 변경해주어야 한다!!
97
<jsp:include> 액션 태그를 이용한
페이지 모듈화
<jsp:include page=“top.jsp” .. />
...
<jsp:include page=“left.jsp” .. />
...
...
페이지1
...
...
<jsp:include page=“bottom.jsp” .. />
top.jsp
상단코드
left.jsp
좌측메뉴코드
bottom.jsp
하단코드
<jsp:include page=“top.jsp” .. />
...
<jsp:include page=“left.jsp” .. />
...
...
페이지2
...
...
<jsp:include page=“bottom.jsp” .. />
중복되는 UI를
모듈화
•
•
새로운 페이지 제작시 중복된 코드를 재작성할 필요가 없으므로 페이지 작성
시간이 단축된다. (변경되는 부분만 작성하면 된다.)
공통 영역을 변경해야 할 경우, 모듈화한 JSP만 변경하면 되므로 공통 영역의
유지/보수 작업이 간단해진다.
JSP 2.0 Programming
98
공통 영역을 모듈화해도 여전히 남
은 문제는?
전체적으로 레이아웃을 변경해야 할 경우
관련된 모든 JSP 페이지를 변경해주어야 한다!!!
JSP 레이아웃 템플릿으로
이 문제를 해결할 수 있다!
JSP 2.0 Programming
99
JSP 레이아웃 템플릿의 구성
template.jsp는 레이아웃과 관
련된 코드를 갖고 있으며,
useTemplate.jsp가 지정한
JSP를 내용 부분에 포함한다.
useTemplate.jsp
메인페이지지정
useTemplate.jsp는 템플릿 JSP를
구성하는 데 필요한 정보를 지
정한다. 주로 내용 부분에 포함
시킬 JSP를 지정한다.
<jsp:forward>
top.jsp
상단코드
left.jsp
좌측메뉴코드
bottom.jsp
하단코드
template.jsp
<table>
...
<jsp:include page=“top.jsp” .. />
...
<jsp:include page=“left.jsp” .. />
...
...
<jsp:include page=“<%= content %> />
...
...
<jsp:include page=“bottom.jsp” .. />
실제 내용을 출
력하는 JSP
내용페이지
내용코드
UI 모듈
JSP 2.0 Programming
100
JSP 레이아웃 템플릿 예제
Example
<%@ page contentType = "text/html; charset=euc-kr" %>
<%
템플릿을 구성하는데
String pageTitle = (String)request.getAttribute("PAGETITLE");
필요한 정보를 읽어온다.
String contentPage = request.getParameter("CONTENTPAGE");
%>
<html><head><title><%= pageTitle %></title></head><body>
<table width="400" border="1" cellpadding="2" cellspacing="0">
<tr>
<td colspan="2"><jsp:include page="/module/top.jsp" flush="false" /></td>
</tr>
<tr><td width="100" valign="top"><jsp:include page="/module/left.jsp" flush="false" /></td>
<td width="300" valign="top">
<!-- 내용 부분: 시작 -->
내용부분은 이 템플릿 JSP를
<jsp:include page="<%= contentPage %>" flush="false" 사용하는
/>
JSP에서 request의
속성으로 지정한다.
<!-- 내용 부분: 끝 -->
</td>
</tr>
<tr>
<td colspan="2"><jsp:include page="/module/bottom.jsp" flush="false" /></td>
</tr>
</body>
</html>
템플릿은 레이아웃과 관련된 HTML 태그를 포함한다.
JSP 2.0 Programming
101
템플릿을 사용하는 JSP 예제
Example
<%@ page contentType = "text/html; charset=euc-kr" %>
<%
request.setAttribute("PAGETITLE", "정보보기");
%>
<jsp:forward page="/template/template.jsp">
<jsp:param name="CONTENTPAGE" value="/info_view.jsp" />
</jsp:forward>
JSP 2.0 Programming
102
템플릿 사용시 제어 흐름
웹브라우저
요청들어옴
useTemplate.jsp
1. request 기본 객체의 PAGETITLE 속성 값을 지정
2. template.jsp로 흐름 이동.
CONTENTPAGE 파라미터값을 “/some.jsp”로 지정
페이지 이동
template.jsp
3. PAGETITLE 속성값 읽어옴
4. CONTENTPAGE 파라미터 읽어옴
5. 3에서 읽은 값 문서제목으로 출력
top.jsp
6. top.jsp, left.jsp 등 <jsp:include>
left.jsp
7. 4에서 읽은 CONTENTPAGE 파라미터
값을 사용하여 <jsp:include>
8. bottom.jsp <jsp:include>
some.jsp
bottom.jsp
JSP 2.0 Programming
103
일반 방식과 템플릿 방식의 비
일반방식
템플릿방식
교
• 하나의 JSP 페이지에서 모든 것이 처리되는
형태로서 단순하다.
• 레이아웃 정보를 담고 있는 템플릿 JSP 페
이지가 존재한다.
• 실행 과정에서 문제가 발생할 때 하나의
JSP 페이지만 검사하면 된다.
• 하나의 기능을 구현하기 위해서는 레이아웃
정보를 지정해주는 JSP 페이지와 내용 부분
에 출력될 JSP 페이지가 필요하다.
• 각각의 페이지가 레이아웃과 관련된 코드를
중복해서 포함하고 있다.
• 레이아웃 변경시 템플릿 JSP를 변경해주면
된다.
• 레이아웃 변경시 관련된 모든 JSP 페이지를
변경해주어야 한다.
JSP 2.0 Programming
104
include 디렉티브
Syntax
<%@ include file="포함할파일" %>
* JSP의 현재 위치에 file 속성에 명시한 파일의 내용을 삽입한다.
• include 디렉티브는 지정한 파일의 내용을 현재 위치에 포함시켜주는 기능을 제공한다.
• <jsp:include>와 달리 include 디렉티브는 다른 파일의 내용을 현재 위치에 삽입시킨 후에
JSP 파일을 자바 파일로 변환하고 컴파일하는 방식이다.
JSP 2.0 Programming
105
include 디렉티브의 처리 방식
main.jsp
코드1
<%@ page file=“sub.jspf” %>
코드2
sub.jspf
코드sub1
main.jsp의 page 디렉티브 위치에
포함할 페이지의 코드를 삽입시킨 결과를
자바코드로 작성한다.
자바코드
코드1
코드sub1
코드2
include 디렉티브
부분에 file 속성에
명시한 파일이 삽입
자바코드를 서블릿 클래스로 컴파일한다.
서블릿 클래스
...
JSP 2.0 Programming
106
include 디렉티브 예제 - 처리
Example
전
includer.jsp
<%@ page contentType = "text/html; charset=euc-kr" %>
<html>
<head><title>include 디렉티브</title></head>
<body>
<%
int number = 10;
%>
<%@ include file="/includee.jsp" %>
공통변수 DATAFOLDER = "<%= dataFolder %>"
</body>
</html>
includee.jsp
<%@ page contentType = "text/html; charset=euc-kr" %>
includer.jsp에서 지정한 번호: <%= number %>
<p>
<%
String dataFolder = "c:\\data";
%>
JSP 2.0 Programming
107
include 디렉티브 예제 - 처리
Example
결과
<%@ page contentType = "text/html; charset=euc-kr" %>
<html>
<head><title>include 디렉티브</title></head>
<body>
<%@ page contentType = "text/html; charset=euc-kr" %>
<html>
<head><title>include 디렉티브</title></head>
<body>
<%
int number = 10;
%>
<%@ include file="/includee.jsp" %>
<%
int number = 10;
%>
공통변수 DATAFOLDER = "<%= dataFolder %>"
</body>
</html>
<%@ page contentType = "text/html; charset=euc-kr" %>
includer.jsp에서 지정한 번호: <%= number %>
<p>
<%
String dataFolder = "c:\\data";
%>
includer.jsp에서 지정한 번호: <%= number %>
<p>
<%
String dataFolder = "c:\\data";
%>
공통변수 DATAFOLDER = "<%= dataFolder %>"
</body>
</html>
JSP 2.0 Programming
108
코드 조각 자동 포함 기능
Syntax
<?xml version="1.0" encoding="euc-kr"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
...
<jsp-config>
<jsp-property-group>
<url-pattern>/view/*</url-pattern>
<include-prelude>/common/variable.jspf</include-prelude>
<include-coda>/common/footer.jspf</include-coda>
</jsp-property-group>
</jsp-config>
url-pattern에 해당하는 JSP에
앞에는 <include-prelude> 태그에서 지정한 코드 조각을,
</web-app>
뒤에는 <include-coda> 태그에서 지정한 코드 조각을 삽입한다.
JSP 2.0 Programming
109
include 디렉티브의 활용
• 모든 JSP 페이지에서 사용되는 공용 변수
지정
• 저작권 표시와 같은 간단하면서도 모든 페
이지에서 중복되는 문장
Example
commonVariable.jspf <%
String memberID = (String)session.getAttribute("MEMBERID");
File tempFolder = (File)application.getAttribute("TEMPFOLDER");
%>
공통변수를 사용하는 JSP <%@ include file="commonVariable.jspf" %>
...
<%= memberId %>
...
JSP 2.0 Programming
110
<jsp:include> 액션태그와
include 디렉티브
비교항목
처리시간
<jsp:include>
include 디렉티브
요청 시간에 처리
JSP 파일을 자바 소스로 변환할
때 처리
기능
별도의 파일로 요청 처리 흐름을 이동
현재 파일에 삽입시킴
데이터 전달방법
request 기본 객체나 <jsp:param>을
이용한 파라미터 전달
페이지 내의 변수를 선언하 후,
변수에 값 저장
용도
화면의 레이아웃의 일부분을 모듈화할
때 주로 사용된다.
다수의 JSP 페이지에서 공통으
로 사용되는 변수를 지정하는 코
드나 저작권과 같이 공통의 문장
을 포함한다.
JSP 2.0 Programming
111