Presentation is loading. Please wait.

Presentation is loading. Please wait.

9 표준 액션.

Similar presentations


Presentation on theme: "9 표준 액션."— Presentation transcript:

1 9 표준 액션

2 학습 목표 내 용 JSP에는 액션(action)이라는 문법이 있는데, 이것은 XML 태그 형태로 코 드를 기술하는 문법이다.
액션은 크게 표준 액션과 커스텀 액션으로 나눌 수 있는데, 이번 장에서 는 그 중 하나인 표준 액션(standard action)에 대해서 배워보자. 내 용 표준 액션이란? JSP 페이지의 모듈화에 사용되는 표준 액션 자바빈의 호출에 사용되는 표준 액션 그 밖에 유용한 표준 액션들

3 1. 표준 액션이란? 액션(Action) 이란? 표현 방식
일련의 프로그램 동작(산술연산 및 실행 제어 등)을 태그 형태로 정의한 것 표준 액션(standard action): JSP 페이지에서 바로 사용 가능 커스텀 액션(custom action): 별도의 라이브러리를 설치해야만 사용 가능 표현 방식 XML 태그 형식으로 표현 표준 액션과 커스텀 액션은 태그 안에 사용하는 접두어(prefix)가 다르기 때문에 외 형상으로 쉽게 구분 표준 액션에는 모든 태그의 이름 앞에 jsp라는 접두어 사용, 커스텀 액션에는 그 밖의 접두어를 사용 <jsp:include page= “/brain08/sub.jsp ”/> <c:set var= “cnt ” value= “0 ”/> 표준 액션임을 표시하는 접두어 커스텀 액션 중 하나임을 표시하는 접두어

4 1. 표준 액션이란? 표준 액션(Standard Action) 별도의 라이브러리 없이 JSP 페이지에서 바로 사용 가능한 액션
크게 3 종류의 표준 액션 지원 요청 실행 제어 표준 액션 <jsp:include> <jsp:forward> 자바빈 호출 표준 액션 <jsp:useBean> <jsp:getProperty> <jsp:setProperty> 애플릿 호출 표준 액션 <jsp:plugIn>

5 <jsp:include page= “Copyright.html ”/>
JSP 페이지에서 다른 웹 자원(JSP 페이지, HTML 문서 등)의 실행을 포함시키 고자 할 때 사용 포함할 웹 자원의 URL을 지정하는 page 애트리뷰트를 사용 액션 태그는 XML 문법을 따르므로 단독 태그일 경우에는 ‘/>’로 종료 웹 컨테이너는 JSP 페이지를 처리할 때 이 태그의 위치에 Copryright.html의 내용을 대신 출력한다. <jsp:include page= “Copyright.html ”/> Copyright.html을 include하는 표준 액션

6 2. JSP 페이지의 모듈화 표준 액션 <jsp:include> 표준 액션
contentType= “text/html; charset=euc-kr ”%> <HTML> <HEAD><TITLE>책 소개</TITLE></HEAD> <BODY> <H3>책 소개</H3> 제목: 뇌를 자극하는 Java 프로그래밍 <BR> 저자: 김윤명 <BR> 페이지수: 908 <BR><BR> <jsp:include page= “Copyright.html ”/> </BODY> </HTML> Copyright.html 문서를 include합니다. [그림 8-1] 예제 8-1의 실행 결과

7 2. JSP 페이지의 모듈화 표준 액션 <jsp:include> 표준 액션
포함할 HTML 문서가 다른 디렉터리에 있으면 그에 해당하는 URL 경로명(상 대경로 및 절대경로)을 다음과 같이 쓰면 된다. 다른 JSP 페이지를 포함시키기 위해서도 사용될 수 있다. <jsp:include page= “common/Copyright.html ”/> 상대적인 URL 경로명입니다. <jsp:include page= “/common/Copyright.html ”/> 슬래시(/)로 시작하는 값은 웹 애플리케이션 디렉터리를 기준으로 한 URL 경로명입니다 <jsp:include page= “Date.jsp ”/> 같은 디렉터리에 있는 Date.jsp를 include하는 표준 액션 <jsp:include page= “/util/Date.jsp ”/> 웹 애플리케이션 디렉터리의 util 서브디렉터리에 있는 Date.jsp를 include하는 표준 액션

8 2. JSP 페이지의 모듈화 표준 액션 <jsp:include> 표준 액션
contentType= “text/html; charset=euc-kr ”%> <HTML> <HEAD><TITLE>당첨자 명단</TITLE></HEAD> <BODY> <H3>당첨자 명단</H3> 14553 연흥부 <BR> 63563 심청 <BR> 73992 이몽룡 <BR><BR> <jsp:include page= “Now.jsp ”/> </BODY> </HTML> Now.jsp를 include합니다 contentType=“text/html; charset=euc-kr”%> import=“java.util.*”%> <% GregorianCalendar now = new GregorianCalendar(); String date = String.format(“%TY년 %Tm월 %Td일”, now, now, now); String time = String.format(“%Tp %TR”, now, now); %> [현재 시각] <%= date %> <%= time %> 시스템 시계로부터 현재 시각을 가져다가 YY년 MM월 DD일 포맷의 날짜와 AM/PM hh:mm 포맷의 시각으로 편집합니다.

9 2. JSP 페이지의 모듈화 표준 액션 <jsp:include> 표준 액션 vs. include> 지시자 include include … %>) JSP 페이지의 서블릿 변환 시에 실행이 되는 것으로 단순 파일 내용을 붙이는 작업을 수행한다. include 표준 액션(<jsp:include>) 실행 시에 include 되는 페이지의 응답(response)를 포함하는 동작을 수행한다.

10 2. JSP 페이지의 모듈화 표준 액션 <jsp:include> 표준 액션 vs. include> 지시자 include include … %>) 실행 과정 (1)

11 2. JSP 페이지의 모듈화 표준 액션 <jsp:include> 표준 액션 vs. include> 지시자 include include … %>) 실행 과정 (2)

12 2. JSP 페이지의 모듈화 표준 액션 <jsp:include> 표준 액션 vs. include> 지시자 include 표준 액션 (<jsp:include>) 실행 과정 (1)

13 2. JSP 페이지의 모듈화 표준 액션 <jsp:include> 표준 액션 vs. include> 지시자 include 표준 액션 (<jsp:include>) 실행 과정 (2)

14 <jsp:forward page= “Next.jsp ”/>
JSP 페이지에서 다른 JSP 페이지로 제어를 넘기고자 할 때 사용 <jsp:include>와 마찬가지로 page 애트리뷰트를 이용해서 해당 JSP 페이지의 URL을 지정해야 한다. 주의 사항 현재 JSP 페이지의 출력 스트림을 flush한 후(즉, 이미 출력 스트림을 통해 클라이언 트로 출력된 후)에는 요청 처리 제어을 forwarding할 수 없다. 위의 제약사항을 어길 경우에 예외가 발생 <jsp:forward page= “Next.jsp ”/> Next.jsp로 실행의 제어를 넘기는 표준 액션

15 2. JSP 페이지의 모듈화 표준 액션 <jsp:forward> 표준 액션
<% int sum = 0; for (int cnt = 1; cnt <= 100; cnt++) sum += cnt; request.setAttribute( “RESULT ”, new Integer(sum)); %> <jsp:forward page= “HundredResult.jsp ” /> 실행의 제어를 넘긴다. contentType= “text/html; charset=euc-kr ”%> <HTML> <HEAD><TITLE>1부터 100까지의 합</TITLE></HEAD> <BODY> 1부터 100까지 더한 결과는? ${RESULT} </BODY> </HTML> 앞 장에서 배운 익스프레션 언어를 이용해서 결과를 출력한다

16 3. 자바빈 호출 표준 액션 자바 빈(Java Bean) 컴포넌트 형태로 제작된 자바 모듈
대부분 자바통합개발환경(IDE) 에서 사용 드래그 앤 드롭 을 지원하는 UI 개발 프로그램에서 활용

17 3. 자바빈 호출 표준 액션 JSP 빈(JSP Bean) JSP와의 연동을 위해 만들어진 자바 컴포넌트
데이터베이스 연동이나 뷰 데이터 교환 등에 사용 모델-1 구현에서의 JSP 빈즈 모델-2 구현에서의 JSP 빈즈

18 3. 자바빈 호출 표준 액션 EJB(Enterprise Java Bean)
J2EE(Java2 Enterprise Edition)에서의 컴포넌트 모델 분산 환경을 고려함. J2EE 자체는 스펙으로 여러 회사에서 제품을 구현함. 기업형 애플리케이션 개발에서 비즈니스 로직 및 데이터 처리를 담당함.

19 3. 자바빈 호출 표준 액션 Java Beans 규약 (요약) 반드시 인자가 없는 public 생성자가 있어야 한다
뒷에 동일한 단어가 뒤따라 나오는 접근자(getter)/설정자(setter) 메서드가 있어야 한다(e.g. getFoo(), setFoo()). Boolean 타입인 경우 접근자는 “is”로 시작한다. 프로퍼티(property)는 접근자와 설정자에서 get/set을 제거하고 첫 글자를 소 문자로 바꾼 단어를 이름으로 갖는다. 설정자의 인자의 타입과 접근자의 반환값의 타입이 동일하여야 하며, 이는 프 로퍼티의 타입이 된다. 프로퍼티 이름과 타입은 둘 다 접근자와 설정자에서 유추되는 것이지 클래스 멤버 변수와는 관계없다. 내부 구현이나 멤버 변수에 상관없이 접근자와 설정자의 이름과 타입에서 프로퍼티 의 이름과 타입이 결정된다. JSP 페이지에서 표준 액션을 통해 프로퍼티에 접근하기 위해서는 프로퍼티의 타입이 String이거나 기본형(Primitive Type)이어야 한다.

20 3. 자바빈 호출 표준 액션 get-메서드와 set-메서드는 자바빈의 내부 데이터를 읽고 쓰는 기능을 제공
접근자와 설정자 메서드를 통해 읽고 쓸 수 있는 데이터를 자바빈의 프로퍼티 (property)라고 한다. [예제 8-4] 개인 정보를 표현하는 자바빈 클래스 package mall; public class PersonalInfo { private String name; // 이름 private char gender; // 성별 private int birth_year; // 탄생년도 public void setName(String name) { this.name = name; } public String getName() { return name; public void setGender(char gender) { this.gender = gender; public char getGender() { return gender; [예제 8-4] 개인 정보를 표현하는 자바빈 클래스 public void setAge(int age) { this.birth_year= (new java.util.Date()).getYear() - age; } public int getAge() { return (new java.util.Date()).getYear() – birth_year;

21 3. 자바빈 호출 표준 액션 JSP에서의 자바빈 사용 JSP에는 자바 빈과 관련한 표준 액션을 이용할 수 있다.
자바 빈이 속성(Attribute) 값이 되어야 한다.

22 3. 자바빈 호출 표준 액션 <jsp:useBean> 표준 액션
자바 프로그램에서 클래스를 사용하기 위해서는 클래스의 객체를 만들어야 하 며, 자바빈 클래스의 경우도 동일하다. 자바빈 객체를 선언하고 초기화 자바빈 객체를 지정된 생존범위의 속성에 찾아오거나 새롭게 생성하는 동작을 수행 기본적으로 id와 class라는 두 개의 애트리뷰트를 사용 ProductInfo obj = new ProductInfo(); 변수 이름 클래스 이름 <jsp:useBean id= “obj ” class= “mall.PersonalInfo ” /> 변수 이름 클래스 이름

23 3. 자바빈 호출 표준 액션 <jsp:useBean> 표준 액션

24 <jsp:setProperty name= “obj ” property= “age ” value= “27 ” />
3. 자바빈 호출 표준 액션 <jsp:setProperty> 표준 액션 자바빈 객체를 만든 다음에는 설정자(setter) 메서드를 이용해서 객체의 프로퍼 티 값을 설정할 수 있다. 설정자 메서드 호출을 대신하여 프로퍼티 값을 설정하는 동작을 수행 name, property, value라는 세 개의 애트리뷰트를 사용 name 애트리뷰트 - 자바빈 객체 참조 변수 이름을 지정 property와 value 애트리뷰트 - 각각 프로퍼티의 이름과 값을 지정 obj.setAge( “27 ”); 변수 이름 메서드 이름 프로퍼티 값 <jsp:setProperty name= “obj ” property= “age ” value= “27 ” /> 변수 이름 프로퍼티 이름 프로퍼티 값

25 <jsp:getProperty name= “obj ” property= “age ” />
3. 자바빈 호출 표준 액션 <jsp:getProperty> 표준 액션 자바빈 객체의 프로퍼티 값을 읽어오기 위해서는 접근자(getter) 메서드를 이 용하면 된다. 접근자 메서드 호출을 대신하여 프로퍼티 값을 읽어오는 동작을 수행 name과 property 애트리뷰트 사용 name 애트리뷰트 - 자바빈 객체 참조 변수의 이름을 지정 property 애트리뷰트 – 접근하려는 프로퍼티의 이름을 지정 int age = obj.getAge(); 변수 이름 메서드 이름 <jsp:getProperty name= “obj ” property= “age ” /> 변수 이름 프로퍼티 이름

26 3. 자바빈 호출 표준 액션 자바빈 관련 표준 액션의 사용 예 (1)
자바빈 객체를 생성합니다. [예제 8-5] 표준 액션을 이용해서 자바빈 프로퍼티를 설정하고 가져오는 JSP 페이지 (1) contentType= “text/html; charset=euc-kr ”%> <HTML> <HEAD><TITLE>회원 정보</TITLE></HEAD> <BODY> <jsp:useBean class= “mall.PersonalInfo ” id= “pinfo ” /> <jsp:setProperty name= “pinfo ” property= “name ” value= “김연희 ” /> <jsp:setProperty name= “pinfo ” property= “gender ” value= “여 ” /> <jsp:setProperty name= “pinfo ” property= “age ” value= “29 ” /> 이름: <jsp:getProperty name= “pinfo ” property= “name ” /> <BR> 성별: <jsp:getProperty name= “pinfo ” property= “gender ” /> <BR> 나이: <jsp:getProperty name= “pinfo ” property= “age ” /> </BODY> </HTML> 자바빈 객체에 프로퍼티 값을 설정합니다 자바빈 객체로부터 프로퍼티 값을 가져다가 출력합니다

27 3. 자바빈 호출 표준 액션 자바빈 관련 표준 액션의 사용 예 (2) ③ 컴파일 결과 파일을 mall 디렉터리에 저장하세요
① brain08 웹 애플리케이션 디렉터리 아래에 WEB-INF/classes/mall 디렉터리를 이런 구조로 만드세요. ② [예제 8-4]를 컴파일하세요.

28 3. 자바빈 호출 표준 액션 자바빈 관련 표준 액션의 사용 예 (3)
[예제 8-6] 표준 액션을 이용해서 자바빈 프로퍼티를 설정하고 가져오는 JSP 페이지 (2) contentType= “text/html; charset=euc-kr ”%> <jsp:useBean class= “mall.PersonalInfo ” id= “pinfo ” scope= “request ” /> <jsp:setProperty name= “pinfo ” property= “name ” value= “김현수 ” /> <jsp:setProperty name= “pinfo ” property= “gender ” value= “남 ” /> <jsp:setProperty name= “pinfo ” property= “age ” value= “23 ” /> <jsp:forward page= “CustomerInfoViewer.jsp ” /> request 영역으로부터 자바빈 객체를 가져옵니다 호출 contentType= “text/html; charset=euc-kr ”%> <HTML> <HEAD><TITLE>회원 정보</TITLE></HEAD> <BODY> <jsp:useBean class= “mall.PersonalInfo ” id= “pinfo ” scope= “request ” /> 이름: <jsp:getProperty name= “pinfo ” property= “name ” /> <BR> 성별: <jsp:getProperty name= “pinfo ” property= “gender ” /> <BR> 나이: <jsp:getProperty name= “pinfo ” property= “age ” /> </BODY> </HTML>

29 3. 자바빈 호출 표준 액션 자바빈 관련 표준 액션의 사용 예 (4)
앞 페이지 예제의 두 JSP 페이지를 톰캣의 webapps/brain08 디렉터리에 각각 CustomerInfoSaver.jsp와 CustomerInfoViewer.jsp라는 이름으로 저장한다. 서블릿 클래스에서 forward 메서드를 이용해서 JSP 페이지를 호출하면서 자바 빈 객체를 넘겨주려면 doGet, doPost 메서드의 첫 번째 파라미터에 대해 setAttribute 메서드를 호출하면 된다. 호출된 JSP 페이지 안에서 넘겨받은 자바빈 객체를 가져오려면 <jsp:useBean> 표준 액션의 scope 애트리뷰트 값을 request로 지정하면 된다. [그림 8-6] 예제 8-6의 실행 결과

30 3. 자바빈 호출 표준 액션 [예제 8-7] 서블릿 클래스가 JSP 페이지로 자바빈 객체를 넘겨주는 예
package mall; import javax.servlet.http.*; import javax.servlet.*; import java.io.*; public class PersonalInfoServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { PersonalInfo obj = new PersonalInfo(); obj.setName( “이정호 ”); obj.setGender( ‘남 ’); obj.setAge(24); request.setAttribute( “pinfo ”, obj); RequestDispatcher dispatcher = request.getRequestDispatcher( “CustomerInfoViewer.jsp ”); dispatcher.forward(request, response); } 자바빈 객체를 request 영역에 저장합니다 JSP 페이지를 호출합니다. contentType= “text/html; charset=euc-kr ”%> <HTML> <HEAD><TITLE>회원 정보</TITLE></HEAD> <BODY> <jsp:useBean class= “mall.PersonalInfo ” id= “pinfo ” scope= “request ” /> 이름: <jsp:getProperty name= “pinfo ” property= “name ” /> <BR> 성별: <jsp:getProperty name= “pinfo ” property= “gender ” /> <BR> 나이: <jsp:getProperty name= “pinfo ” property= “age ” /> </BODY> </HTML> request 영역으로부터 자바빈 객체를 가져옵니다

31 3. 자바빈 호출 표준 액션 ① 편의상 brain08/WEB-INF/classes
디렉터리 안에 [예제 8-7] 서블릿 클래스의 소스 코드를 저장하세요. ② 명령 프롬프트 창에서 그 디렉터리로 이동하세요 ④ 다음과 같은web.xml 파일을 작성해서 brain08/WEB-INF 디렉터리에 저장하세요. ③ -d 옵션을 주고 서블릿 클래스의 소스 코드를 컴파일하면 컴파일 결과 파일이 mall 서브디 렉터리 안에 생성될 것입니다.

32 3. 자바빈 호출 표준 액션 자바빈 객체 생성 시의 기본값 설정
<jsp:useBean> 태그의 몸체 안에 <jsp:setProperty> 를 사용하면 조건부로 자바 빈의 프로퍼티에 대해 기본값을 설정한다. 이미 빈이 있는 경우에는 실행되지 않는다.

33 3. 자바빈 호출 표준 액션 자바빈의 다형성 활용 [예제 8-10] 상속 관계를 갖는 3개의 자바빈 클래스 상속 상속
package mall; public class BookInfo extends ProductInfo { private short page; // 페이지수 private String writer; // 저자 public void setPage(short page) { this.page = page; } public void setWriter(String writer) { this.writer = writer; public short getPage() { return page; public String getWriter() { return writer; [예제 8-10] 상속 관계를 갖는 3개의 자바빈 클래스 package mall; public class ProductInfo { private String code; // 제품코드 private String name; // 제품명 private int price; // 가격 public void setCode(String code) { this.code = code; } public void setName(String name) { this.name = name; public void setPrice(int price) { this.price = price; public String getCode() { return code; public String getName() { return name; public int getPrice() { return price; 상속 package mall; public class ClothingInfo extends ProductInfo { private char size; // 사이즈(L/M/S) private String color; // 색상 public void setSize(char size) { this.size = size; } public void setColor(String color) { this.color = color; public char getSize() { return size; public String getColor() { return color; 상속

34 3. 자바빈 호출 표준 액션 자바빈의 다형성 활용 클래스들이 서로 상속 관계를 맺고 있으면, 서브클래스 타입의 객체를 슈퍼클 래스 타입의 참조 변수로 참조할 수 있다. 서브클래스 타입 객체가 대입된 변수에 대해 슈퍼클래스의 메서드를 호출하면 변수에 실제로 어떤 객체가 대입되어 있든 상관없이 그에 해당하는 메서드가 호출되어서 실행된다. ProductInfo pinfo = new BookInfo(); 서브클래스의 객체를 슈퍼클래스 타입의 변수에 대입할 수 있습니다 ProductInfo pinfo = new ClothingInfo(); int price = pinfo.getPrice(); pinfo 변수의 값에 상관없이 슈퍼클래스의 메서드를 호출할 수 있습니다.

35 3. 자바빈 호출 표준 액션 BookInfoSaver.jsp 포함 ProductInfo.jsp 포함
[예제 8-11] 표준 액션을 이용해서 자바빈 클래스의 다형성을 활용하는 예 contentType= “text/html; charset=euc-kr ”%> <jsp:useBean class= “mall.BookInfo ” id= “pinfo ” scope= “request ”/> <jsp:setProperty name= “pinfo ” property= “code ” value= “50001 ” /> <jsp:setProperty name= “pinfo ” property= “name ” value= “의뢰인 ” /> <jsp:setProperty name= “pinfo ” property= “price ” value= “9000 ” /> <jsp:setProperty name= “pinfo ” property= “writer ” value= “존 그리샴 ” /> <jsp:setProperty name= “pinfo ” property= “page ” value= “704 ” /> <HTML> <HEAD><TITLE>책 정보 관리</TITLE></HEAD> <BODY> 책 정보가 저장되었습니다. <BR> <BR> <H3>제품 개략 정보</H3> <jsp:include page= “ProductInfo.jsp ” /> </BODY> </HTML> BookInfoSaver.jsp 포함 ProductInfo.jsp contentType=“text/html; charset=euc-kr”%> <jsp:useBean class=“mall.ProductInfo” id=“pinfo” scope=“request” /> 코드: <jsp:getProperty name=“pinfo” property=“code” /> <BR> 제품명:<jsp:getProperty name=“pinfo” property=“name” /> <BR> 가격: <jsp:getProperty name=“pinfo” property=“price” /> <BR> contentType= “text/html; charset=euc-kr ”%> <jsp:useBean class= “mall.ClothingInfo ” id= “pinfo ” scope= “request ”/> <jsp:setProperty name= “pinfo ” property= “code ” value= “70002 ” /> <jsp:setProperty name= “pinfo ” property= “name ” value= “반팔 티셔츠 ” /> <jsp:setProperty name= “pinfo ” property= “price ” value= “15000 ” /> <jsp:setProperty name= “pinfo ” property= “size ” value= “M ” /> <jsp:setProperty name= “pinfo ” property= “color ” value= “베이지 ” /> <HTML> <HEAD><TITLE>의류 정보 관리</TITLE></HEAD> <BODY> 의류 정보가 저장되었습니다. <BR> <BR> <H3>제품 개략 정보</H3> <jsp:include page= “ProductInfo.jsp ” /> </BODY> </HTML> 포함 ClothingInfoSaver.jsp

36 3. 자바빈 호출 표준 액션 ② [예제 8-10]의 3개의 자바빈 클래스를 ① brain08/WEB-INF/ 이 디렉터리에
저장하세요 ① brain08/WEB-INF/ classes 디렉터리로 가세요 ③ 다음과 같은 방법으로 3개의 자바빈 클래스를 컴파일하세요 [그림 8-11] 예제 8-10의 설치 방법

37 02 abstract public class ProductInfo {
3. 자바빈 호출 표준 액션 수퍼클래스가 추상클래스일 경우에는 다형성을 활용할 수 없다. 이를 테스트하기 위해 [예제 8-10] ProductInfo 클래스의 2행을 다음과 같이 고쳐본다. BookInfoSaver.jsp의 URL을 입력하세요 ClothingInfoSaver.jsp의 URL을 입력하세요. [그림 8-12] 예제 8-11의 실행 결과 02 abstract public class ProductInfo { 추상 클래스를 선언하는 abstract 키워드를 추가하세요

38 3. 자바빈 호출 표준 액션 ② [예제 8-11]을 실행할 때 ① 이 디렉터리로 가세요. 생성되었던 소스 코드와
클래스 파일을 삭제하세요 ① 이 디렉터리로 가세요. [그림 8-13] 예제 8-11을 실행할 때 생성된 소스 코드와 클래스 파일 삭제하기

39 3. 자바빈 호출 표준 액션 이 부분에 주목하세요 [그림 8-14] <jsp:useBean> 표준 액션에서 추상 클래스를 사용했을 때 발생할 수 있는 에러

40 3. 자바빈 호출 표준 액션 자바빈의 다형성 활용 앞 그림에서 화살표로 표시된 부분을 읽어보면 에러의 원인은 ProductInfo.jsp 파일의 2행에 있는 <jsp:useBean> 액션 태그의 class 애트리뷰트 값으로 지정 한 mall.ProductInfo가 잘못되었다는 뜻이다. <jsp:useBean> 표준 액션에 class 애트리뷰트 대신 type 애트리뷰트를 사용하 면 문제가 해결된다. <jsp:useBean type= “mall.ProductInfo” id= “pinfo ” scope= “request ”/> 추상 클래스 이름은 type 애트리뷰트를 사용해서 지정해야 합니다

41 3. 자바빈 호출 표준 액션 자바빈의 다형성 활용 <jsp:useBean> 표준 액션 태그에서 객체를 참조할 참조 변수의 타입을 지정할 수 있다.

42 3. 자바빈 호출 표준 액션 자바빈의 다형성 활용 <jsp:useBean> 표준 액션에서 class 애트리뷰트 없이 type 애트리뷰트만 정의 하였을 경우 빈이 먼저 존재해야 한다. type이 있던 없든 관계없이 class가 있을 경우, 이 클래스는 추상 객체여서는 안되며, 반드시 인자가 없는 public 생성자가 있어야 한다.

43 3. 자바빈 호출 표준 액션 웹 브라우저로부터 입력된 데이터를 자바빈 프로퍼티로 설정
<jsp:getProperty> 표준 액션의 value 애트리뷰트 값을 표현식 문법을 이용해 서 지정하려면 우선 해당 프로퍼티의 타입에 맞게 변환을 해야 한다. 표현식 언어의 param 내장 객체를 사용하면 입력 데이터를 바로 가져옴과 동 시에 타입 변환도 자동으로 이루어져서 편리하다. <% String str = request.getParameter( “AGE ”); int num = Integer.parseInt(str); %> <jsp:setProperty name= “pinfo ” property= “age ” value= “<%= num %> ” /> AGE라는 이름의 입력 데이터를 가져와서 타입 변환을 합니다 변환된 값을 자바빈 프로퍼티 값으로 설정합니다 <jsp:setProperty name= “pinfo ” property= “age ” value= “${param.AGE} ” /> AGE라는 이름의 입력 데이터를 가져와서 자바빈 프로퍼티 값으로 설정합니다

44 3. 자바빈 호출 표준 액션 웹 브라우저로부터 입력된 데이터를 자바빈 프로퍼티로 설정
<jsp:setProperty> 표준 액션에서 value 애트리뷰트 대신 param 애트리뷰트를 사용하여 요청 메시지의 입력 데이터의 이름을 직접 지정 요청 메시지의 파라미터 데이터가 자바빈 프로퍼티 값을 자동으로 저장됨 <jsp:setProperty name= “pinfo ” property= “age ” param= “AGE ” /> AGE라는 이름의 입력 데이터를 가져와서 자바빈 프로퍼티 값으로 설정합니다 [예제 8-8] 웹 브라우저로부터 입력된 데이터를 자바빈 프로퍼티 값으로 설정하는 예 (1) contentType= “text/html; charset=euc-kr ”%> <HTML> <HEAD><TITLE>회원 정보</TITLE></HEAD> <BODY> <jsp:useBean class= “mall.PersonalInfo” id= “pinfo ” /> <jsp:setProperty name= “pinfo” property= “name” param= “NAME” /> <jsp:setProperty name= “pinfo” property= “gender” param= “GENDER” /> <jsp:setProperty name= “pinfo” property= “age ” param= “AGE” /> 이름: <jsp:getProperty name= “pinfo” property= “name” /> <BR> 성별: <jsp:getProperty name= “pinfo” property= “gender” /> <BR> 나이: <jsp:getProperty name= “pinfo” property= “age” /> </BODY> </HTML> 웹 브라우저로부터 입력된 데이터를 프로퍼티 값으로 설정합니다

45 3. 자바빈 호출 표준 액션 웹 브라우저로부터 입력된 데이터를 자바빈 프로퍼티로 설정
<jsp:setProperty> 표준 액션의 param 애트뷰트

46 3. 자바빈 호출 표준 액션 웹 브라우저로부터 입력된 데이터를 자바빈 프로퍼티로 설정
<jsp:setProperty> 표준 액션에서 property 애트리뷰 이외의 다른 애트리뷰트 를 사용하지 않는 경우 요청 파라미터와 자바빈의 프로퍼티 이름이 동일한 경우

47 <jsp:setProperty name= “pinfo ” property= “* ” />
3. 자바빈 호출 표준 액션 웹 브라우저로부터 입력된 데이터를 자바빈 프로퍼티로 설정 <jsp:setProperty> 표준 액션에서 property 애트리뷰 값을 ‘*’로 지정하면, 웹 브라우저로부터 입력된 모든 데이터가 똑같은 이름을 갖는 자바빈 프로퍼티에 각각 설정된다. <jsp:setProperty name= “pinfo ” property= “* ” /> 모든 입력 데이터를 가져와서 그와 동일한 이름의 프로퍼티 값으로 설정합니다. [예제 8-9] 웹 브라우저로부터 입력된 데이터를 자바빈 프로퍼티 값으로 설정하는 예 (2) contentType= “text/html; charset=euc-kr ”%> <HTML> <HEAD><TITLE>회원 정보</TITLE></HEAD> <BODY> <jsp:useBean class= “mall.PersonalInfo ” id= “pinfo ” /> <jsp:setProperty name= “pinfo ” property= “* ” /> 이름: <jsp:getProperty name= “pinfo ” property= “name ” /> <BR> 성별: <jsp:getProperty name= “pinfo ” property= “gender ” /> <BR> 나이: <jsp:getProperty name= “pinfo ” property= “age ” /> </BODY> </HTML> 입력된 모든 데이터를 그와 동일한 이름의 프로퍼티 값으로 설정합니다

48 4. 그 밖에 유용한 표준 액션들 애플릿 호출 표준 액션 애플릿
웹 서버로부터 웹 브라우저로 다운로드되어서 실행되는 자바 클래스의 일종 java.applet.Applet 또는 javax.swing.Japplet 클래스를 상속받아 작성하여야 함 애플릿이 웹 브라우저로 다운로드된 다음에 가장 처음으로 실행되어야 할 코드는 애 플릿 클래스의 init 메서드 안에 써 넣어야 한다. [예제 8-12] 아주 간단한 애플릿 클래스 import java.awt.*; import javax.swing.*; public class HelloJavaApplet extends JApplet { public void init() { Container contentPane = getContentPane(); contentPane.add(new JLabel( “Hello, Java ”, SwingConstants.CENTER)); }

49 4. 그 밖에 유용한 표준 액션들 애플릿 호출 표준 액션 애플릿 호출 및 실행 <jsp:plugin> 표준 액션
애플릿이 웹 브라우저 상에서 실행되도록 만들기 위해서는 애플릿 클래스 뿐만 아니 라 그 애플릿 클래스를 불러오는 HTML 문서도 작성해야 한다. HTML 문서에서 <APPLET>, <EMBED>, <OBJECT> 등의 태그를 이용해서 애플릿 클래스를 호출하여 실행 웹 브라우저 마다 지원하는 태그의 종류와 문법이 다르다. <jsp:plugin> 표준 액션 애플릿 호출 태그의 서로 다른 문법에 상관없이 애플릿을 불러올 수 있다. 웹 브라우저의 종류와 버전을 인식해서 그에 맞는 태그를 자동으로 생성 <jsp:plugin type= “applet ” code= “HelloJavaApplet.class ” width= “200 ” height= “100 ” /> 애플릿 클래스 파일의 이름 웹 페이지에서 애플릿이 차지하게 될 영역의 넓이와 높이

50 4. 그 밖에 유용한 표준 액션들 애플릿 호출 표준 액션
[예제 8-13] <jsp:plugin> 액션의 사용 예를 보여주는 JSP 페이지 contentType= “text/html; charset=euc-kr ”%> <HTML> <HEAD><TITLE>헬로 자바 애플릿</TITLE></HEAD> <BODY> <jsp:plugin type= “applet ” code= “HelloJavaApplet.class ” width= “200 ” height= “100 ” /> </BODY> </HTML> [그림 8-15] 예제 8-13의 실행 결과

51 4. 그 밖에 유용한 표준 액션들 애플릿 호출 표준 액션
초기화 파라미터를 필요로 하는 애플릿의 경우에는 <jsp:params> 표준 액션을 이용해서 애플릿의 초기화 파라미터를 기술 <jsp:plugin type= “applet ” code= “GreetingApplet.class ” ... > <jsp:params> <jsp:param name= “GREETING ” value= “Good Morning ” /> <jsp:param name= “FONT ” value= “Algerian ” /> </jsp:params> </jsp:plugin> 애플릿의 초기화 파라미터

52 4. 그 밖에 유용한 표준 액션들 애플릿 호출 표준 액션 애플릿 클래스 애플릿의 초기화 파라미터 값을 가져옵니다.
[예제 8-14] <jsp:plugin> 표준 액션에 애플릿의 초기화 파라미터를 설정하는 예 import java.awt.*; import javax.swing.*; public class GreetingApplet extends JApplet { public void init() { String greeting = getParameter( “GREETING ”); String font = getParameter( “FONT ”); Container contentPane = getContentPane(); JLabel label = new JLabel(greeting, SwingConstants.CENTER); label.setFont(new Font(font, Font.PLAIN, 20)); contentPane.add(label); } contentType= ”text/html; charset=euc-kr ”%> <HTML> <HEAD><TITLE>애플릿으로 인사하기</TITLE></HEAD> <BODY> <jsp:plugin type= “applet ” code= “GreetingApplet.class ” width= “500 ” height= “200 ” > <jsp:params> <jsp:param name= “GREETING ” value= “기체후 일향 만강하시옵니까. ”/> <jsp:param name= “FONT ” value= “궁서체 ”/> </jsp:params> </jsp:plugin> </BODY> </HTML> 애플릿 클래스 애플릿의 초기화 파라미터 값을 가져옵니다. 그 값을 이용해서 애플릿 안에 라벨(텍스트 출력용 컴포넌트)을 만듭니다 애플릿 클래스를 불러오는 JSP 페이지 애플릿의 초기화 파라미터를 설정합니다

53 4. 그 밖에 유용한 표준 액션들 애플릿 호출 표준 액션 [그림 8-16] 예제 8-14의 실행 결과

54 4. 그 밖에 유용한 표준 액션들 스크립팅 요소를 대신하는 표준 액션
스크립팅 요소인 스크립틀릿, 익스프레션, 선언부를 대신해서 사용할 수 있는 <jsp:scriptlet>, <jsp:expression>, <jsp:declaration> 표준 액션도 있다. <jsp:scriptlet>int cnt = 0;</jsp:scriptlet> 스크립틀릿과 동일한 역할을 하는 표준 액션 <jsp:expression>cnt+1</jsp:expression> 익스프레션과 동일한 역할을 하는 표준 액션 <jsp:declaration> private int add(int num1, int num2) { return num1 + num2; } </jsp:declaration> 선언부와 동일한 역할을 하는 표준 액션

55


Download ppt "9 표준 액션."

Similar presentations


Ads by Google