표현언어와 커스텀태그 표현 언어의 개념을 이해한다. JSP1.2 커스텀 태그 개발 방법을 익힌다. 표현언어와 커스텀태그 표현 언어의 개념을 이해한다. JSP1.2 커스텀 태그 개발 방법을 익힌다. JSP2.0 커스텀 태그 개발 방법을 익힌다. 한빛미디어(주)
표현 언어 Section 01 개요 표현 언어 기본 개념 표현 언어를 사용한 경우 표현 언어(Expression Language) 는 처음에는 JSTL의 부분으로 사용 되었으나 JSP2.0 부터는 기본 스펙에 포함됨 자바 빈즈 속성 값을 보다 쉽고 제약을 덜 받는 방법으로 사용하기 위해 나옴 표현 언어 기본 개념 액션 태그 및 JSP 표현식을 사용한 경우 표현 언어를 사용한 경우 test 라는 빈즈객체가 application, session, request, page 범위중 하나에 들어 있다고 가정하는 경우임. 이때 test 객체는 없어도 에러가 발생하지 않음(표현식 사용시에는 문제가 됨) <H2> <jsp:useBean id=”test” class=”TestBean” /> <%= test.getName() %> </H2> <H2> ${test.name} </H2>
표현 언어 Section 01 기본문법 요약 속성 및 내장객체 접근 표현언어는 “$” 로 시작 한다. 모든 내용은 “{표현식}” 과 같이 구성 된다. 표현식에는 기본적으로 변수명, 혹은 속성명.메서드명 구조로 이루어 진다. 표현식에는 부가적으로 숫자, 문자열, boolean, null 과 같은 상수값도 올 수 있다. 표현식에는 기본적인 연산이 가능하다. 속성 및 내장객체 접근 속성 접근 ${member.id} 혹은 ${member[“id”] member 객체의 getId() 메서드 호출과 동일 ${row[0]} row 라는 이름의 컬렉션 객체의 첫 번째 아이템
표현 언어 Section 01 표현언어에서 참조 가능한 내장객체 내장객체 기능 pageScope requestScope request 범위에 포함된 속성값에 접근할 수 있는 객체 sessionScope session 범위에 포함된 속성값에 접근할 수 있는 객체 applicationScope application범위에 포함된 속성값에 접근할 수 있는 객체 param request.getParameter(“xxx”) 로 얻을수 있는 값들.. ${param.xxx} 와 같이 사용 paramValues request.getParameterValues(“xxx”)와 동일 기능 수행 ${paramValues.xxx}와 같이 수행 header request.getHeader(“xxx”)와 동일 기능 수행 ${header.xxx}와 같이 사용 headerValues request.getHeaderValues(“xxx”)와 동일 기능 수행 ${headerValues.xxx}와 같이 사용 initParam 컨텍스트의 초기화 패러미터 값 cookie 쿠기정보에 접근할 수 있는 객체 pageContext pageContext 객체
표현 언어 Section 01 표현언어에서 사용 가능한 연산자 산술연산자, 관계연산자 비교/조건 연산자 연산자 기능 + 더하기 - 빼기 * 곱하기 / or div 나누기 % or mod 몫 연산자 기능 && 혹은 and AND 연산 || 혹은 or OR 연산 ! 혹은 not NOT 연산자 기능 == 혹은 eq 같다 != 혹은 ne 같지않다. < 혹은 lt 좌변이 우변보다 작다 > 혹은 gt 좌변이 우변보다 크다 <= 혹은 le 좌변이 우변보다 같거나 작다. >= 혹은 ge 좌변이 우변보다 같거나 크다. a?b : c a 가 참이면 b, 거짓이면 c 를 리턴함.
표현 언어 예제 교재 : 385 ~ 389 페이지 예제 개요 Product 객체를 만들어 jsp 에서 표현언어를 이용해 선택된 상품을 계속해서 추가하고 목록을 보여주는 일종의 장바구니 예제 추후 JSTL 버전으로 업그레이드 할 것임
커스텀 태그-JSP1.2 Section 02 개요 커스텀 태그(Custom Tag)는 JSP 페이지에서 반복적인 프로그램 로직을 캡슐화하기 위해 고안됨. 기본적으로 제공되는 태그 이외에 사용자가 확장한 태그라는 의미 체험학습: 방명록 프로그램 에서의 소스를 통한 비교 <table cellpadding=5 cellspacing=0 border="1"> <tr bgcolor="#99CCFF" ><td>번호</td><td>작성자</td><td>전화번호</td><td>작성일</td><td>내용</td> </tr> <% for(GuestBook guestbook : datas) { %> <tr> <td><%=guestbook.getGb_id() %></td> <td><%=guestbook.getGb_name() %></td> <td><%=guestbook.getGb_tel() %></td> <td><%=guestbook.getGb_date() %></td> <td><a href=javascript:check('<%=guestbook.getGb_id() %>')> <%=guestbook.getGb_contents() %></a></td> } </table> <%taglib uri="getListTag" prefix="boardTag" %> <html> <body> <boardTag:getList /> </body> </html> 극단적이지만 위와 같이 만드는 것도 가능함
커스텀 태그-JSP1.2 Section 02 개요 커스텀 태그를 사용하는 이유 커스텀 태그 개발 방법 비즈니스 로직으로 부터 화면 표현을 분리 비즈니스 로직의 캡슐화 보다 손쉬운 웹 페이지 제작 커스텀 태그 개발 방법 유형 개발 방법 ∙ 태그 라이브러리로 개발 ∙ 여러 사이트에 적용 ∙ 공개 ∙ 호환성 유지 JSP1.2 호환 개발 방법 ∙ 많은 화면을 생성해내는 태그 ∙ 비교적 간단한 기능들로 구성 ∙ 단일 사이트에 적용 태그 파일 기반의 개발 방법 ∙ 보다 쉬운 개발 ∙ 공개 등 ∙ 호환성 배제 SimpleTag, SimpleTagSupport 클래스를 이용한 개발 방법
커스텀 태그-JSP1.2 Section 02 일반적인 태그 구조 및 용어 정리 샘플 HTML 파일 태그 속성 태그바디 기본적으로 모든 태그는 쌍으로 이루어 짐 <H2></H2>, <form></form> <input> 의 경우 쌍이 아닌데 XML 형식을 따를경우 <input></input> 혹은 <input/> 속성 태그 내에서 부가적인 정보를 제공하는 것으로 <form> 태그 내의 name, method <input> 태그에 있는 type, name 등이 속성에 해당함 태그바디 시작태그와 종료태그 사이에 있는 내용으로 <form></form> 사이에 있는 <input>과 같은 태그가 여기에 속함 <H2></H2> 의 경우 태그 바디에 다른 태그가 아닌 일반 텍스트가 위치한 것임 <H2>custom tag test</H2> <form name="form1" method="post"> <input type="text" name="item1"> </form>
커스텀 태그-JSP1.2 Section 02 JSP1.2 커스텀 태그 구조 구성 요소 설명 태그 핸들러 클래스 (Tag Handler Class) 자바 클래스 파일로 태그의 동작을 구현해놓은 파일이다. 태그 라이브러리 기술자 (Tag Library Descriptor) 태그 이름 등 태그 정보 및 태그 핸들러 클래스와의 관계를 기술한다. JSP 파일 커스텀 태그를 사용하기 위해서는 JSP 파일에 taglib 지시어 등 추가적인 작업이 필요하고, 실제 태그 라이브러리 기술자에 따라 커스텀 태그를 사용한다.
표현 언어 예제 교재 : 394 ~ 401 페이지 예제 개요 간단한 메시지 출력을 위한 커스텀 태그 제작 TagSupport 클래스를 상속받아 구현, doStartTag() 메서드만 구현함 예제를 통해 태그핸들러 클래스 구현 및 tld 파일 구조 이해 예제 디렉터리 구조 디렉터리(jspbook 프로젝트) 파일 WebContent\ch10 MsgTagTest.jsp src MsgTagHandler.java WEB-INF\tld MsgTag.tld
커스텀 태그-태그파일 Section 03 개요 태그파일 개요 JSP2.0 에서 새로 소개된 방법 기존의 커스텀 태그 개발이 복잡하고 까다로운 문제 해결을 위해 등장 특히 화면처리가 많은 태그인 경우 서블릿 개발시와 마찬가지로 프로그램 내에서 화면 출력을 제어해야 하는 문제가 발생 태그파일 개요 기본 사항 태그당 하나의 태그파일로 작성 구조적으로 JSP 파일과 거의 유사함 JSTL을 사용할 수 있음 태그파일 구성 구성 요소 설명 태그 파일 .tag 파일로 몇 가지 제약 사항을 제외하고는 대부분의 JSP 파일과 동일한 구성을 가진다. ‘WEB-INF\tags’ 폴더에 저장한다. JSP 파일 커스텀 태그를 사용하기 위해서는 JSP 파일에 taglib 지시어를 설정한 후 커스텀 태그를 사용한다.
커스텀 태그-태그파일 Section 03 태그 파일 구조 JSP 의 지시어를 사용할 수 있으며 tag 라는 새로운 지시어 사용 태그 파일 지시어 목록 tag 지시어 세부 속성은 교재 참조(403페이지) 지시어 설명 taglib JSP에서의 taglib 지시어와 동일하다. 현재 태그 파일에서 다른 커스텀 태그나 JSTL 등을 사용하려면 해당 태그 라이브러리를 사용하기 위한 taglib 지시어를 작성한다. include JSP에서의 include 지시어와 동일하다. 그러나 포함되는 파일의 구조가 태그 파일의 구조를 따라야만 한다. tag 새로운 지시어로, page 지시어와 유사하다. 현재 파일이 태그 파일이라는 것을 알리고 옵션을 설정한다. attribute 작성하는 태그에 포함될 속성 등을 정의한다. variable 태그 내용에 필요한 표현 언어 변수를 선언한다.
커스텀 태그-태그파일 Section 03 태그 파일을 이용한 커스텀 태그 개발 예제 내용 예제 파일의 디렉터리 구조 앞에서 작성했던 간단한 메시지 출력 태그를 태그 파일로 작성함. 예제 파일의 디렉터리 구조 MsgTagTest.jsp 는 기존파일 사용 print.tag 파일만 새로 작성 print.tag MsgTagTest.jsp 수정부분 디렉터리(jspbook 프로젝트) 파일 WebContent\ch10 MsgTagTest.jsp WEB-INF\tags print.tag 01 <$@ tag body-content="empty" pageEncoding="euc-kr" %> 02 커스텀 태그 출력메시지: Hello!! 02 <%-- @ taglib uri="/WEB-INF/tld/MsgTag.tld" prefix="mytag" --%> 03 <%@ taglib tagdir="/WEB-INF/tags" prefix="mytag" %> … <mytag:print/>
고급 태그 파일 작성 교재 : 405 ~ 408 페이지 예제 개요 태그바디와 속성을 모두 가지는 보다 실용적인 예제 임 태그파일을 통해 고급 커스텀 태그 작성 과정 실습 예제 파일의 디렉터리 구조 디렉터리(jspbook 프로젝트) 파일 WebContent\ch10 ListItem.jsp WEB-INF\tags item.tag
커스텀 태그-SimpleTag Section 03 개요 간단실습 SimpleTag 인터페이스 JSP2.0 에서 새로 추가됨 간단한 태그의 경우 태그 파일을 이용하는 것이 좋으나 보다 복잡한 태그 개발 및 배포 등이 목적 이라면 SimpleTag 인터페이스를 이용하는 것이 좋음 기본적인 개발과정 및 구조는 TagSupport 클래스를 통한 개발과정과 동일함 단 바디 처리를 위해 별도의 클래스 상속이 필요 없고 보다 간단한 구현이 가능 실제 구현은 SimpleTagSupport 클래스를 상속받아 구현 해야 함 SimpleTag 인터페이스 사용시 주의점 JSP2.0 이하의 하위 버전을 지원하는 컨테이너 에서는 호환 안됨 간단실습 간단한 예제를 통해 SimpleTagSupport 클래스를 상속받아 구현하는 과정 확인 [예제10-10] ~ [예제 10-12]
SimpleTag 인터페이스 교재 : 412 ~ 379 페이지 예제 개요 기존 tag 파일 예제를 SimpleTagSupport 클래스 상속 버전으로 작성 함 ItemTag.tld 파일은 기존 파일과 동일함 예제 파일의 디렉터리 구조 디렉터리(jspbook 프로젝트) 파일 WebContent\ch10 ItemTagTest.jsp src ItemTagHandler.java WEB-INF\tld ItemTag.tld