표준액션 JSP & Servlet
2/55 Contents 학습목표 JSP에는액션 (action) 이라는문법이있는데, 이것은 XML 태그형태로코드를기술하는문법이다. 액션은크게표준액션과커스텀액션으로나눌수있는데, 이번장에서는그중하나인표준액션 (standard action) 에대해서배워보자. 내용 표준액션이란? JSP 페이지의모듈화에사용되는표준액션 자바빈의호출에사용되는표준액션 그밖에유용한표준액션들
3/55 1. 표준액션이란? 액션 (Action) 이란? 일련의프로그램동작 ( 산술연산및실행제어등 ) 을태그형태로정의한것 표준액션 (standard action): JSP 페이지에서바로사용가능 커스텀액션 (custom action): 별도의라이브러리를설치해야만사용가능 표현방식 XML 태그형식으로표현 표준액션과커스텀액션은태그안에사용하는접두어 (prefix) 가다르기때문에외형상으로쉽게구분 표준액션에는모든태그의이름앞에 jsp 라는접두어사용, 커스텀액션에는그밖의접두어를사용 <jsp:include page= /brain08/sub.jsp /> 표준액션임을표시하는접두어 <c:set var= cnt value= 0 /> 커스텀액션중하나임을표시하는접두어
4/55 1. 표준액션이란? 표준액션 (Standard Action) 별도의라이브러리없이 JSP 페이지에서바로사용가능한액션 JSP 표준규격에서정의하고있는액션 크게 3 종류의표준액션지원 요청실행제어표준액션 <jsp:include> <jsp:forward> 자바빈호출표준액션 <jsp:usebean> <jsp:getproperty> <jsp:setproperty> 애플릿호출표준액션 <jsp:plugin>
5/55 2. JSP 페이지의모듈화표준액션 <jsp:include> 표준액션 JSP 페이지에서다른웹자원 (JSP 페이지, HTML 문서등 ) 의실행을포함시키고자할때사용 포함할웹자원의 URL을지정하는 page 애트리뷰트를사용 <jsp:include page= Copyright.html /> Copyright.html 을 include 하는표준액션 액션태그는 XML 문법을따르므로단독태그일경우에는 /> 로종료 웹컨테이너는 JSP 페이지를처리할때이태그의위치에 Copryright.html의내용을대신출력한다.
6/55 2. JSP 페이지의모듈화표준액션 <jsp:include> 표준액션 [ 예제 8-1] <jsp:include> 액션의사용예를보여주는예제 (1) <%@page 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/55 2. JSP 페이지의모듈화표준액션 <jsp:include> 표준액션 포함할 HTML 문서가다른디렉터리에있으면그에해당하는 URL 경로명 ( 상대경로및절대경로 ) 을다음과같이쓰면된다. <jsp:include page= common/copyright.html /> 상대적인 URL 경로명입니다. <jsp:include page= /common/copyright.html /> 슬래시 (/) 로시작하는값은웹애플리케이션디렉터리를기준으로한 URL 경로명입니다 다른 JSP 페이지를포함시키기위해서도사용될수있다. <jsp:include page= Date.jsp /> 같은디렉터리에있는 Date.jsp 를 include 하는표준액션 <jsp:include page= /util/date.jsp /> 웹애플리케이션디렉터리의 util 서브디렉터리에있는 Date.jsp 를 include 하는표준액션
8/55 2. JSP 페이지의모듈화표준액션 <jsp:include> 표준액션 [ 예제 8-2] <jsp:include> 액션의사용예를보여주는예제 (2) <%@page 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합니다 <%@page contenttype= text/html; charset=euc-kr %> <%@page 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/55 2. JSP 페이지의모듈화표준액션 <jsp:include> 표준액션 vs. <%@ include> 지시자 include 지시자 (<%@ include %>) JSP 페이지의서블릿변환시에실행이되는것으로단순파일내용을붙이는작업을수행한다. include 표준액션 (<jsp:include>) 실행시에 include 되는페이지의응답 (response) 를포함하는동작을수행한다.
10/55 2. JSP 페이지의모듈화표준액션 <jsp:include> 표준액션 vs. <%@ include> 지시자 include 지시자 (<%@ include %>) 실행과정 (1)
11/55 2. JSP 페이지의모듈화표준액션 <jsp:include> 표준액션 vs. <%@ include> 지시자 include 지시자 (<%@ include %>) 실행과정 (2)
12/55 2. JSP 페이지의모듈화표준액션 <jsp:include> 표준액션 vs. <%@ include> 지시자 include 표준액션 (<jsp:include>) 실행과정 (1)
13/55 2. JSP 페이지의모듈화표준액션 <jsp:include> 표준액션 vs. <%@ include> 지시자 include 표준액션 (<jsp:include>) 실행과정 (2)
14/55 2. JSP 페이지의모듈화표준액션 <jsp:forward> 표준액션 JSP 페이지에서다른 JSP 페이지로제어를넘기고자할때사용 <jsp:include> 와마찬가지로 page 애트리뷰트를이용해서해당 JSP 페이지의 URL 을지정해야한다. <jsp:forward page= Next.jsp /> Next.jsp 로실행의제어를넘기는표준액션 주의사항 현재 JSP 페이지의출력스트림을 flush 한후 ( 즉, 이미출력스트림을통해클라이언트로출력된후 ) 에는요청처리제어을 forwarding 할수없다. 위의제약사항을어길경우에예외가발생
15/55 2. JSP 페이지의모듈화표준액션 <jsp:forward> 표준액션 [ 예제 8-3] <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 /> 실행의제어를넘긴다. <%@page contenttype= text/html; charset=euc-kr %> <HTML> <HEAD><TITLE>1 부터 100 까지의합 </TITLE></HEAD> <BODY> 1 부터 100 까지더한결과는? ${RESULT </BODY> </HTML> 앞장에서배운익스프레션언어를이용해서결과를출력한다
16/55 자바빈 (Java Bean) 컴포넌트형태로제작된자바모듈 대부분자바통합개발환경 (IDE) 에서사용 드래그앤드롭을지원하는 UI 개발프로그램에서활용
17/55 JSP 빈 (JSP Bean) JSP와의연동을위해만들어진자바컴포넌트 Bean 표준액션을통해 JSP에서손쉽게연동 데이터베이스연동이나뷰데이터교환등에사용 모델 -1 구현에서의 JSP 빈즈 모델 -2 구현에서의 JSP 빈즈
18/55 EJB(Enterprise Java Bean) J2EE(Java2 Enterprise Edition) 에서의컴포넌트모델 분산환경을고려함. J2EE 자체는스펙으로여러회사에서제품을구현함. 기업형애플리케이션개발에서비즈니스로직및데이터처리를담당함.
19/55 Java Beans 규약 ( 요약 ) 반드시인자가없는 public 생성자가있어야한다 뒷에동일한단어가뒤따라나오는접근자 (getter)/ 설정자 (setter) 메서드가있어야한다 (e.g. getfoo(), setfoo()). Boolean 타입인경우접근자는 is 로시작한다. 프로퍼티 (property) 는접근자와설정자에서 get/set 을제거하고첫글자를소문자로바꾼단어를이름으로갖는다. 설정자의인자의타입과접근자의반환값의타입이동일하여야하며, 이는프로퍼티의타입이된다. 프로퍼티이름과타입은둘다접근자와설정자에서유추되는것이지클래스멤버변수와는관계없다. 내부구현이나멤버변수에상관없이접근자와설정자의이름과타입에서프로퍼티의이름과타입이결정된다. JSP 페이지에서표준액션을통해프로퍼티에접근하기위해서는프로퍼티의타입이 String 이거나기본형 (Primitive Type) 이어야한다.
20/55 [ 예제 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; get- 메서드와 set- 메서드는자바빈의내부데이터를읽고쓰는기능을제공 접근자와설정자메서드를통해읽고쓸수있는데이터를자바빈의프로퍼티 (property) 라고한다.
21/55 JSP 에서의자바빈사용 JSP 에는자바빈과관련한표준액션을이용할수있다. 표준액션을이용하면 JSP 에서스크립팅코드없이자바빈을사용할수있다. 자바빈이속성 (Attribute) 값이되어야한다.
22/55 <jsp:usebean> 표준액션 자바프로그램에서클래스를사용하기위해서는클래스의객체를만들어야하 며, 자바빈클래스의경우도동일하다. ProductInfo obj = new ProductInfo(); 변수이름 클래스이름 <jsp:usebean> 표준액션 자바빈객체를선언하고초기화 자바빈객체를지정된생존범위의속성에찾아오거나새롭게생성하는동작을수행 기본적으로 id와 class라는두개의애트리뷰트를사용 <jsp:usebean id= obj class= mall.personalinfo /> 변수이름 클래스이름
23/55 <jsp:usebean> 표준액션 <jsp:usebean> 표준액션
24/55 <jsp:setproperty> 표준액션 자바빈객체를만든다음에는설정자 (setter) 메서드를이용해서객체의프로퍼 티값을설정할수있다. obj.setage( 27 ); 변수이름메서드이름프로퍼티값 <jsp:setproperty> 표준액션 설정자메서드호출을대신하여프로퍼티값을설정하는동작을수행 name, property, value라는세개의애트리뷰트를사용 name 애트리뷰트 - 자바빈객체참조변수이름을지정 property와 value 애트리뷰트 - 각각프로퍼티의이름과값을지정 <jsp:setproperty name= obj property= age value= 27 /> 변수이름프로퍼티이름프로퍼티값
25/55 <jsp:getproperty> 표준액션 자바빈객체의프로퍼티값을읽어오기위해서는접근자 (getter) 메서드를 이용하면된다. int age = obj.getage(); 변수이름 메서드이름 <jsp:getproperty> 표준액션 접근자메서드호출을대신하여프로퍼티값을읽어오는동작을수행 name과 property 애트리뷰트사용 name 애트리뷰트 - 자바빈객체참조변수의이름을지정 property 애트리뷰트 접근하려는프로퍼티의이름을지정 <jsp:getproperty name= obj property= age /> 변수이름 프로퍼티이름
26/55 자바빈관련표준액션의사용예 (1) 자바빈객체를생성합니다. [ 예제 8-5] 표준액션을이용해서자바빈프로퍼티를설정하고가져오는 JSP 페이지 (1) <%@page 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/55 자바빈관련표준액션의사용예 (2) 3 컴파일결과파일을 mall 디렉터리에저장하세요 1 brain08 웹애플리케이션디렉터리아래에 WEB-INF/classes/mall 디렉터리를이런구조로만드세요. 2 [ 예제 8-4] 를컴파일하세요.
28/55 자바빈관련표준액션의사용예 (3) [ 예제 8-6] 표준액션을이용해서자바빈프로퍼티를설정하고가져오는 JSP 페이지 (2) <%@page 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 영역으로부터자바빈객체를가져옵니다 <%@page 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/55 자바빈관련표준액션의사용예 (4) 앞페이지예제의두 JSP 페이지를톰캣의 webapps/brain08 디렉터리에각각 CustomerInfoSaver.jsp 와 CustomerInfoViewer.jsp 라는이름으로저장한다. [ 그림 8-6] 예제 8-6 의실행결과 서블릿클래스에서 forward 메서드를이용해서 JSP 페이지를호출하면서자바빈객체를넘겨주려면 doget, dopost 메서드의첫번째파라미터에대해 setattribute 메서드를호출하면된다. 호출된 JSP 페이지안에서넘겨받은자바빈객체를가져오려면 <jsp:usebean> 표준액션의 scope 애트리뷰트값을 request로지정하면된다.
30/55 [ 예제 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 페이지를호출합니다. <%@page 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/55 1 편의상 brain08/web-inf/classes 디렉터리안에 [ 예제 8-7] 서블릿클래스의소스코드를저장하세요. 2 명령프롬프트창에서그디렉터리로이동하세요 4 다음과같은 web.xml 파일을작성해서 brain08/web- INF 디렉터리에저장하세요. 3 -d 옵션을주고서블릿클래스의소스코드를컴파일하면컴파일결과파일이 mall 서브디렉터리안에생성될것입니다.
32/55 자바빈객체생성시의기본값설정 <jsp:usebean> 태그의몸체안에 <jsp:setproperty> 를사용하면조건부로자바빈의프로퍼티에대해기본값을설정한다. 이미빈이있는경우에는실행되지않는다.
자바빈의다형성활용 [ 예제 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 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; 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; 33/55
34/55 자바빈의다형성활용 클래스들이서로상속관계를맺고있으면, 서브클래스타입의객체를슈퍼클 래스타입의참조변수로참조할수있다. ProductInfo pinfo = new BookInfo(); ProductInfo pinfo = new ClothingInfo(); 서브클래스의객체를슈퍼클래스타입의변수에대입할수있습니다 서브클래스타입객체가대입된변수에대해슈퍼클래스의메서드를호출하면 변수에실제로어떤객체가대입되어있든상관없이그에해당하는메서드가 호출되어서실행된다. int price = pinfo.getprice(); pinfo 변수의값에상관없이슈퍼클래스의메서드를호출할수있습니다.
35/55 [ 예제 8-11] 표준액션을이용해서자바빈클래스의다형성을활용하는예 <%@page 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> <%@page 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> BookInfoSaver.jsp 포함 <%@page 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> 포함 ClothingInfoSaver.jsp ProductInfo.jsp
36/55 1 brain08/web-inf/ classes 디렉터리로가세요 2 [ 예제 8-10] 의 3 개의자바빈클래스를이디렉터리에저장하세요 3 다음과같은방법으로 3 개의자바빈클래스를컴파일하세요 [ 그림 8-11] 예제 8-10 의설치방법
37/55 BookInfoSaver.jsp 의 URL 을입력하세요 ClothingInfoSaver.jsp 의 URL 을입력하세요. [ 그림 8-12] 예제 8-11 의실행결과 수퍼클래스가추상클래스일경우에는다형성을활용할수없다. 이를테스트하기위해 [ 예제 8-10] ProductInfo 클래스의 2 행을다음과같이 고쳐본다. 02 abstract public class ProductInfo { 추상클래스를선언하는 abstract 키워드를추가하세요
38/55 1 이디렉터리로가세요. 2 [ 예제 8-11] 을실행할때생성되었던소스코드와클래스파일을삭제하세요 [ 그림 8-13] 예제 8-11 을실행할때생성된소스코드와클래스파일삭제하기
39/55 이부분에주목하세요 [ 그림 8-14] <jsp:usebean> 표준액션에서추상클래스를사용했을때발생할수있는에러
40/55 자바빈의다형성활용 앞그림에서화살표로표시된부분을읽어보면에러의원인은 ProductInfo.jsp 파일의 2행에있는 <jsp:usebean> 액션태그의 class 애트리뷰트값으로지정한 mall.productinfo가잘못되었다는뜻이다. <jsp:usebean> 표준액션에 class 애트리뷰트대신 type 애트리뷰트를사용하면문제가해결된다. <jsp:usebean type= mall.productinfo id= pinfo scope= request /> 추상클래스이름은 type 애트리뷰트를사용해서지정해야합니다
41/55 자바빈의다형성활용 <jsp:usebean> 표준액션태그에서객체를참조할참조변수의타입을지정할 수있다.
42/55 자바빈의다형성활용 <jsp:usebean> 표준액션에서 class 애트리뷰트없이 type 애트리뷰트만정의하였을경우 빈이먼저존재해야한다. type이있던없든관계없이 class가있을경우, 이클래스는추상객체여서는안되며, 반드시인자가없는 public 생성자가있어야한다.
43/55 웹브라우저로부터입력된데이터를자바빈프로퍼티로설정 <jsp:getproperty> 표준액션의 value 애트리뷰트값을표현식문법을이용해서 지정하려면우선해당프로퍼티의타입에맞게변환을해야한다. <% String str = request.getparameter( AGE ); int num = Integer.parseInt(str); %> <jsp:setproperty name= pinfo property= age value= <%= num %> /> AGE 라는이름의입력데이터를가져와서타입변환을합니다 변환된값을자바빈프로퍼티값으로설정합니다 표현식언어의 param 내장객체를사용하면입력데이터를바로가져옴과동 시에타입변환도자동으로이루어져서편리하다. <jsp:setproperty name= pinfo property= age value= ${param.age /> AGE 라는이름의입력데이터를가져와서자바빈프로퍼티값으로설정합니다
44/55 웹브라우저로부터입력된데이터를자바빈프로퍼티로설정 <jsp:setproperty> 표준액션에서 value 애트리뷰트대신 param 애트리뷰트를사용하여요청메시지의입력데이터의이름을직접지정 요청메시지의파라미터데이터가자바빈프로퍼티값을자동으로저장됨 <jsp:setproperty name= pinfo property= age param= AGE /> AGE 라는이름의입력데이터를가져와서자바빈프로퍼티값으로설정합니다 [ 예제 8-8] 웹브라우저로부터입력된데이터를자바빈프로퍼티값으로설정하는예 (1) <%@page 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/55 웹브라우저로부터입력된데이터를자바빈프로퍼티로설정 <jsp:setproperty> 표준액션의 param 애트뷰트
46/55 웹브라우저로부터입력된데이터를자바빈프로퍼티로설정 <jsp:setproperty> 표준액션에서 property 애트리뷰이외의다른애트리뷰트를사용하지않는경우 요청파라미터와자바빈의프로퍼티이름이동일한경우
47/55 웹브라우저로부터입력된데이터를자바빈프로퍼티로설정 <jsp:setproperty> 표준액션에서 property 애트리뷰값을 * 로지정하면, 웹브라우저로부터입력된모든데이터가똑같은이름을갖는자바빈프로퍼티에각각설정된다. <jsp:setproperty name= pinfo property= * /> 모든입력데이터를가져와서그와동일한이름의프로퍼티값으로설정합니다. [ 예제 8-9] 웹브라우저로부터입력된데이터를자바빈프로퍼티값으로설정하는예 (2) <%@page 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/55 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/55 4. 그밖에유용한표준액션들 애플릿호출표준액션 애플릿호출및실행 애플릿이웹브라우저상에서실행되도록만들기위해서는애플릿클래스뿐만아니라그애플릿클래스를불러오는 HTML 문서도작성해야한다. HTML 문서에서 <APPLET>, <EMBED>, <OBJECT> 등의태그를이용해서애플릿클래스를호출하여실행 웹브라우저마다지원하는태그의종류와문법이다르다. <jsp:plugin> 표준액션 애플릿호출태그의서로다른문법에상관없이애플릿을불러올수있다. 웹브라우저의종류와버전을인식해서그에맞는태그를자동으로생성 <jsp:plugin type= applet code= HelloJavaApplet.class width= 200 height= 100 /> 애플릿클래스파일의이름 웹페이지에서애플릿이차지하게될영역의넓이와높이
50/55 4. 그밖에유용한표준액션들 애플릿호출표준액션 [ 예제 8-13] <jsp:plugin> 액션의사용예를보여주는 JSP 페이지 <%@page 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/55 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/55 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); 애플릿클래스를불러오는 JSP 페이지 <%@page 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> 애플릿의초기화파라미터값을가져옵니다. 그값을이용해서애플릿안에라벨 ( 텍스트출력용컴포넌트 ) 을만듭니다 애플릿의초기화파라미터를설정합니다
53/55 4. 그밖에유용한표준액션들 애플릿호출표준액션 [ 그림 8-16] 예제 8-14 의실행결과
54/55 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> 선언부와동일한역할을하는표준액션
JSP & Servlet