670 likes | 946 Views
3. JSP 의 기초. 학습목표 JSP 기술에서는 웹 애플리케이션을 JSP 페이지 형태로 구현하며 , 이 장에서는 JSP 페이지를 작성하는데 필요한 여러 가지 기초 지식을 배워보자 . 내용 JSP 페이지란 ? JSP 의 기초 문법 JSP 페이지의 내장 변수 파일 입출력 다른 JSP 페이지 호출하기. 1. JSP 페이지란 ?. JSP 기술에서 웹 애플리케이션을 구연할 때 작성하는 코드를 JSP 페이지라고 한다 .
E N D
3 JSP의 기초
학습목표 • JSP기술에서는 웹 애플리케이션을 JSP페이지 형태로 구현하며, 이 장에서는 JSP페이지를 작성하는데 필요한 여러 가지 기초 지식을 배워보자. • 내용 • JSP페이지란? • JSP의 기초 문법 • JSP페이지의 내장 변수 • 파일 입출력 • 다른 JSP페이지 호출하기
1. JSP 페이지란? • JSP기술에서 웹 애플리케이션을 구연할 때 작성하는 코드를 JSP페이지라고 한다. • JSP페이지는 HTML문서의 사이에 JSP문법의 코드가 삽입되는 형태로 작성된다. • JSP페이지에 있는 HTML코드는 웹 브라우저로 그대로 전송되지만, JSP문법의 코드는 웹 컨테이너 쪽에서 실행되고 그 결과만 웹 브라우저로 전송된다. HTML 문서의 사이사이에 JSP 문법의 코드가 삽입됩니다 [그림 3-1] JSP 페이지의 형태
1. JSP 페이지란? • 웹 컨테이너는 JSP페이지 전체를 서블릿 클래스의 소스 코드로 변환하고, 다음에 소스 코드를 컴파일 후 결과를 가지고 서블릿 객체를 만들고 서블릿 객체를 초기화해서 서블릿을 만든다. • 웹 브라우저로부터 URL이 왔을 때 실행되는 것은 서블릿이다. 변 환 컴파일 인스턴스화 초기화 [그림 3-2] JSP페이지가 실행되기까지의 과정
2. JSP의 기초 문법(스크립팅 요소, 지시자, 주석) • JSP의 다양한 문법 • JSP의 문법에는 세가지 형태가 있다. • <%로 시작해서 %>로 끝나는 형태 • ${로시작해서}로 끝나는 형태 • <jsp:forward> 나 <C:if>와 같은 XML태그 형태 • <%로시작해서 %>로끝나는 문법은 지시자와스크립팅 요소로 나눠진다. 지시자(directive) 스크립틀릿(scriptlet) 익스프레션(expression) [그림 3-3] JSP의 문법 – 지시자와스크립팅 요소
2. JSP의 기초 문법(스크립팅 요소, 지시자, 주석) • JSP의 다양한 문법 • 자바를 대신할 새로운 언어 : 익스프레션 언어(expression language) • 익스프레션 언어의 코드는 ${로 시작해서} 로 끝나고, 그 안에 데이터 이름이나 간단한 식을 쓸 수 있다. • JSP의 문법 중에는 XML태그 형태로 기술되는 액션(action)이 있다. • 문법에는 자바의 if문, for 문, switch문에 해당하는 태그 들이 있다.
2. JSP의 기초 문법(스크립팅 요소, 지시자, 주석) • JSP의 다양한 문법 복잡한 데이터 처리 로직 익스프레션 언어(expression language) [그림 3-4] JSP문법 – 익스프레션 언어
2. JSP의 기초 문법(스크립팅 요소, 지시자, 주석) • JSP의 다양한 문법 복잡한 데이터 처리 로직 액션(action)
2. JSP의 기초 문법(스크립팅 요소, 지시자, 주석) • 스크립팅요소의 문법 • 스크립팅 요소(scripting elements)란 다음 세가지 문법을 말한다. • 스크립틀릿(scriptlet) • 익스프레션(expression) • 선언부(declaration) • 스크립틀릿(scriptlet)은 <%로시작해서 %> 로 끝나고, 그 사이 자바 명령문이 들어 갈 수 있으며, 명령문은 웹 브라우저로 전송되는 것이 아니라 웹 서버 쪽에 실행 된다. 자바 명령문들
2. JSP의 기초 문법(스크립팅 요소, 지시자, 주석) • 스크립팅요소의 문법 • 익스프레션(expression)은 <%=로시작해서 %>로끝나고 그 사이에 자바 식이 들어가면 식은 상수나 변수 이름 하나로 구성될 수도 있고, 연산자를 포함한 식이 될 수도 있으며 리턴값이 있는 메서드 호출식이 될 수도 있다. • 웹 서버 쪽에서 실행되고 그 결과만 웹 브라우저로 전송된다. 자바 식 자바 식 자바 식
2. JSP의 기초 문법(스크립팅 요소, 지시자, 주석) • 스크립팅요소의 문법 스크립틀릿 안에 있던 자바 명령문 익스프레션 안에 있던 자바 식 [그림 3-6] JSP페이지의 코드가 서블릿 클래스의 코드로 변환되는 방법
2. JSP의 기초 문법(스크립팅 요소, 지시자, 주석) • 스크립팅요소의 문법 [그림 3-7] JSP페이지로부터 변환된 서블릿 클래스의 소스 코드
2. JSP의 기초 문법(스크립팅 요소, 지시자, 주석) • 스크립팅요소의 문법 • JSP페이지의 스크립틀릿은_jspService메서드 안에 들어가는 명령문이 되므로 한 스크립틀릿 안에서 선언한 변수를 뒤에 나오는 다른 스크립틀릿 안에 사용하는 것이 가능하다. 변수를 선언합니다 변수를 선언합니다
2. JSP의 기초 문법(스크립팅 요소, 지시자, 주석) • 스크립팅요소의 문법 • JSP페이지를 설치해서 실행은 다음과 같다. • 다음 웹 브라우저를 열고 예제를 실행하면 결과는 다음과 같다. ① brain03라는 이름의 웹 애플리케이션 디렉터리를 만드세요. ②[예제 3-1]을 그 디렉터리에 저장하세요 [그림 3-8] 예제 3-1의 설치 방법 [그림 3-9] 예제 3-1의 실행 결과
2. JSP의 기초 문법(스크립팅 요소, 지시자, 주석) • 스크립팅요소의 문법 • 선언부(declaration)는 <%!로 시작해서 %>로 끝나고, 그 사이에 변수 선언이나 메서드 선언을 쓸 수 있다. • 변수와 메서드는JSP페이지로부터 변환된 서블릿 클래스의 멤버가 되기 때문에 final, public, private, protected, static 등의 키워드를 붙이는 것도 가능하다. • 선언부 안에 변수를 선언할 때 주의해야 할 점은 JSP페이지로부터 변환된 서블릿 클래스는 기본적으로 멀티 – 스래드 모델로 작동하는데 멀티-스레드 모델로 작동하는 서블릿 클래스에는 인스턴스 변수를 선언하면 안 된다. 변수 선언 매서드 선언
2. JSP의 기초 문법(스크립팅 요소, 지시자, 주석) • 스크립팅요소의 문법 • 선언부의 사용 예를 보여주는 JSP페이지를 작성해 본다. 선언부
2. JSP의 기초 문법(스크립팅 요소, 지시자, 주석) • 스크립팅요소의 문법 • 생성된 서블릿 클래스의 소스 코드를 찾아서 살펴 보자.
2. JSP의 기초 문법(스크립팅 요소, 지시자, 주석) • 지시자의 문법 • 지시자(directive)는 JSP의 다른 문법들(스크립팅 요소, 익스프레션 언어, 액선)과는 다른 목적으로 사용되는 문법이다. • 웹 브라우저로부터의 요청을 처리하기 위해서가 아닌 웹 컨테이너가 JSP페이지를 서블릿 클래스로 변환할 때 필요한 정보들을 기술하기 위해 사용하는 문법이다. • JSP페이지에서 사용할 수 있는 지시자는 다음 세 가지가 있다. • Page지시자 • include지시자 • Taglib지시자
2. JSP의 기초 문법(스크립팅 요소, 지시자, 주석) • 지시자의 문법 • 세 가지 지시자는 모두 <%@으로 시작하고 %>로 끝나야 한다. • <%@ 바로 다음에는 지시자 이름이 와야하고, 지시자 이름 다음에는 여러 가지 애트리뷰트가 올 수 있다. • Page지시자는JSP페이지 전체에 적용되는 정보를 기술하기 위해 사용된다. 지시자 이름
2. JSP의 기초 문법(스크립팅 요소, 지시자, 주석) • 지시자의 문법
2. JSP의 기초 문법(스크립팅 요소, 지시자, 주석) • 지시자의 문법 • contenType애트리뷰트는JSP페이지가 생성하는 문서의 종류와 그 문서를 웹 브라우저로 전송할 때 사용할 인코딩 방식을 지정하기 위해 사용한다. • 두 값은 세미콜론(;)으로 구분해서 써야 한다. • JSP페이지를 이용하면 HTML문서뿐만 아니라 XML문서도 생성할 수 있으며, 이럴 때는 contentType애트리뷰트에 문서의 종류를 text/xml로 써야 한다. 한글이 포함된 JSP 페이지일 경우 ASCII 코드로만 구성된 JSP 페이지일 경우 ‘text/html’은 contentType애트리뷰트의 디폴트 값이므로,이 page 지시자는 생략할 수도 있습니다
2. JSP의 기초 문법(스크립팅 요소, 지시자, 주석) • 지시자의 문법 • JSP페이지가 서블릿 클래스로 변환될 때 contentType애트리뷰트 값은 seContentType메서드의파라미터가 된다.
2. JSP의 기초 문법(스크립팅 요소, 지시자, 주석) • 지시자의 문법 • Page 지시자의 import애트리뷰트의애트리뷰트는 자바의 import문과 마찬가지로 다른 패키지에 속하는 클래스나 인터페이스를 임포트하고자 할 때 사용한다. java.util패키지의 GregorianCalendar클래스를 임포트합니다. java.util패키지의 모든 클래스와 인터페이스를 임포트합니다 java.util.ArrayList클래스와 java.io 패키지의 모든 클래스, 인터페이스를 임포트합니다
2. JSP의 기초 문법(스크립팅 요소, 지시자, 주석) • 지시자의 문법 • 다음은 import애트리뷰트의 사용 예를 보여주는 JSP페이지이다.
2. JSP의 기초 문법(스크립팅 요소, 지시자, 주석) • 지시자의 문법 • Page지시자에 여러 종류의 애트리뷰트를 함께 쓸 수도 있다. • Include지시자는 다른 JSP페이지나 HTML문서를 불러다가 현재 JSP페이지의 일부로 만들기 위해 사용한다. • 불러온 대상은 file이라는 애트리뷰트를 이용해서 지정할 수 있으며, 애트리뷰트의 값은 지시자가 속하는 JSP페이지를 기준으로 상대적인 URL로 해석된다. 여러 종류의 애트리뷰트를 함께 쓸 수 있습니다 현재 디렉터리에 있는 Today.jsp를 include합니다 sub1 디렉터리에 있는 Today.jsp를 include합니다
2. JSP의 기초 문법(스크립팅 요소, 지시자, 주석) • 지시자의 문법 • Include지시자의 사용 예를 보여주는 예제는 다음과 같다. Today.jsp를 include합니다
2. JSP의 기초 문법(스크립팅 요소, 지시자, 주석) • 지시자의 문법 • Taglib지사자는JSP문법 중 하나인 액션(action)을 사용할 때 필요하다. • Taglib지시자는 액션이 속한 라이브러리를 설치해야만 사용할 수 있다. 액션이 속하는 라이브러리를 지정하는 지시자
2. JSP의 기초 문법(스크립팅 요소, 지시자, 주석) • 주석을 기술하는 방법 • JSP페이지에 주석을 다는 방법은 JSP에서 사용할 수 있는 문법 만큼 다양하다. • JSP페이지에 있는 HTML코드 부분에는 <!—로 시작해서 로 끝나는 HTML주석을 쓸 수 있다. • JSP페이지의 스크립팅 요소 안에는 자바 문법을 따르는 주석을 쓸 수 있다. • JSP고유의 주석을 사용할 수 있다. 시작 표시 끝 표시 시작 표시 끝 표시 시작 표시 끝 표시 시작 표시
2. JSP의 기초 문법(스크립팅 요소, 지시자, 주석) • 주석을 기술하는 방법 • 여러 가지 주석의 사용 예를 보여주는 JSP페이지 다음과 같다. HTML 주석 JAVA 주석
3. JSP 페이지의 내장 변수 • JSP페이지의 내장 변수(implicit variable)는 선언하지 않고도 사용할 수 있는 변수 이다 • request내장 변수는 서블릿 클래스에 있는 doGet, doPost메서드의 첫 번째 파라미터와 동일한 역할을 한다. • out내장 변수는 서블릿 클래스 안에서 getWriter메서드를 호출해서 얻은 PrintWriter객체 같은 역할을 한다. 내장 변수 내장 변수 [그림 3-15] JSP페이지의 내장 변수의 예
3. JSP 페이지의 내장 변수 • JSP페이지에서 내장 변수를 사용할 수 있는 이유는 웹 컨테이너가 JSP페이지를 서블릿 클래스로 변환할 때 자동으로 선언해 주기 때문이다. • JSP페이지에서 사용할 수 있는 내장 변수들의 기능과 역할을 정리해 높은 표
3. JSP 페이지의 내장 변수 • request내장 변수 • Request내장 변수는 서블릿 클래스에 있는 doGet, doPost메서드의 첫 번째 파라미터와 동일한 역할을 하고, 타입도 동일하게 javax.serlet.http.HttpServletRequest이다. • 웹 브라우저를 통해 입력된 데이터를 가져다가 처리하는 애플리케이션을 작성해 본다. 데이터 이름 [그림 3-17] 인사말을출력하는 웹 애플리케이션의 화면 설계
3. JSP 페이지의 내장 변수 • request내장 변수 • 둘 이상의 화면으로 구성된 애플리케이션은 먼저 URL을 정한 뒤 URL에 해당하는 HTML문서를 작성한다. [그림3-17] 왼쪽 화면 URL [그림3-17] 오른쪽 화면 URL
3. JSP 페이지의 내장 변수 • request내장 변수 [그림 3-18] 예제 3-6, 예제 3-7의 실행 결과
3. JSP 페이지의 내장 변수 • out내장 변수 • JSP페이지에서는 HTML코드와 익스프레션만 가지고도 원하는 HTML문서를 만들 수 있어 서블릿 클래스의 경우처럼 println, print, prinft메서드를 호출해야 할 필요가 있다. [그림 3-19] 1부터 10까지의 정수를 순서대로 출력하는 웹 페이지
3. JSP 페이지의 내장 변수 • out내장 변수 • Out내장 변수는 서블릿 클래스에서 getWriter메서드를 호출해서 얻은 PrintWriter객체와 비슷한 역할을 한다. 데이터 이름 데이터 이름
3. JSP 페이지의 내장 변수 • out내장 변수 • JSPWriter나 PrintWriter처럼 스트림 형태로 데이터를 출력하는 클래스는 송신측과수신측 사이에 가상의 통로를 만든다. • JSP페이지에서 PrintWriter객체를 새로 만들면 기존의 out내장 변수가 관리하던 통로와 더불어 두 개의 통로가 공존하게 된다. [그림 3-20] response,getWriter메서드를 호출하면 안 되는 이유
3. JSP 페이지의 내장 변수 • out내장 변수 • JSP페이지에서 출력하는 데이터는 out.print, out.println메서드를 호출할 경우뿐만 아니라, HTML코드나 익스프레션을 통해 출력할 경우에도 모두 out내장 변수를 통해 출력된다. • Page지시자의 buffer애트리뷰트를 이용해서 버퍼의 크기를 바꿀 수 있으며, 애트리뷰트에는 버퍼의 크기를 킬로바이트 단위의 정수로 쓸 수 있으며, 그 수 뒤에는 kb라는 단위 표시를 붙여 써야 한다. • 버퍼의 실제 크기를 알고 싶을 때 out 내장 변수에 대해 getBufferSize라는 메서드를 호출 하면 된다. 출력 버퍼의 크기 출력 버퍼의 크기를 바이트 단위로 리턴하는메서드
3. JSP 페이지의 내장 변수 • out내장 변수 • Page지시자를 이용하면 out 내장 변수를 통해 출력되는 내용이 버퍼를 거치지 않고 웹 브라우저로 바로 전송되도록 만들 수 있는데, buffer애트리뷰트에none이라는 값을 지정하면 된다. 출력 버퍼를 사용하지 않겠다는 표시 [그림 3-21] 예제 3-10의 실행 결과
3. JSP 페이지의 내장 변수 • response내장 변수 • Response내장 변수는 서블릿 클래스에 있는 doGet, doPost메서드의 두 번째 파라미터의 역할을 한다. • 변수는 javax.servlet.http.HttpServletResponse타입이기 때문에 인터페이스의 여러 가지 메서드들을 호출 할 수 있다. • 메서드를 호출할 때 주의해야 할 점은 메서드 호출 전과 호출 후에 웹 브라우저로 데이터를 출력하면 안된다. 호출할 웹 자원의 URL
3. JSP 페이지의 내장 변수 • response내장 변수
3. JSP 페이지의 내장 변수 • response내장 변수 • sendRedirect메서드는파라미터로 지정한 URL을 직접 호출하는 것이 아니라 단지 메시지를 웹 브라우저로 보낼 뿐이다. [그림 3-23] sendRedirect메서드의 작동 원리
3. JSP 페이지의 내장 변수 • Application내장 변수 • Application내장 변수는 웹 애플리케이션에 관련된 여러 가지 기능을 제공한다. • Application내장 변수에 대해 호출할 수 있는 getContextPath메서드는 웹 애플리케이션의 URL경로명을 리턴하는메서드이다. • Application내장 변수에 대해 호출할 수 있는 다른 메서드인getRealPath는 웹 애플리케이션 내에서의 파일 경로명을 파일시스템 전체에서의 절대 경로명으로 바꾸는 메서드이다. 웹 애플리케이션의 URL 경로명을 리턴하는메서드 웹 애플리케이션 내에서의 파일의 경로명
3. JSP 페이지의 내장 변수 • Application내장 변수 [그림 3-24] 예제 3-12의 실행 결과
4. 파일 입출력 • 파일로부터 데이터를 읽는 방법 • JSP페이지에서 파일을 읽기 위해서는 자바 프로그램처럼 java.io.FileReader클래스나 java.io.FileInputStream클래스를 이용하면 된다. • 다음 예제는 input.txt라는 이름의 파일을 읽어서 모니터로 출력하는 스탠드 언론 프로그램이다. 파일을 엽니다 파일을 닫습니다 한 행의 텍스트 데이터를 읽습니다 읽은 데이터를 모니터로 출력합니다
4. 파일 입출력 • 파일로부터 데이터를 읽는 방법 • JSP페이지는 스탠드얼론 프로그램과 달리 웹 서버의 일부가 되어서 실행된다. • WEB-INF디렉터리에 파일을 저장하는 이유는 웹 브라우저를 이용해서 직접 호출할 수 없도록 만들기 위해서 이다. [그림 3-25] 텍스트 파일을 읽어서 출력하는 웹 애플리케이션의 구성도
4. 파일 입출력 • 파일로부터 데이터를 읽는 방법 • JSP페이지 안에서 파일을 읽기 위해서는 절대 경로를 사용하거나 톰캣의 설치 디렉터리로부터 상대 경로명을 사용해야 한다. [그림 3-26] 지금부터 작성할 JSP 페이지가 사용할 파일을 저장하는 방법 웹 애플리케이션 디렉터리 내에서의 파일의 경로명
4. 파일 입출력 • 파일로부터 데이터를 읽는 방법
4. 파일 입출력 • 파일에 데이터를 쓰는 방법 • JSP페이지에서 파일로 데이터를 출력하기 위해서는 자바 프로그램처럼 java.io.FileWriter, java.io.PrintWriter, java.io.FileOutputStream등의 클래스를 사용하면 된다. [그림 3-28] 게시판 글쓰기 기능을 구현하는 웹 애플리케이션의 구성도
4. 파일 입출력 • 파일에 데이터를 쓰는 방법 • 두 화면의 URL을 정하고, URL에 해당하는 HTML문서를 작성한다. [그림3-29] 위쪽 화면 URL [그림3-29] 아래쪽 화면 URL