1. JSTL(JSP Standard Tag Library) ?
    -표준화된 태그 라이브러리들을 제공함으로써 보다 편리하게 웹 응용프로그램을 개발할 수 있도록 지원
    -간단한 태그로 캡슐화한다.
    -JSP 내에 Java Source 를 사용하지 않고 태그만을 가지고 작성하도록 정의한다.
    -가독성을 증가한다.
    -JSTL 1.1 은 Servlet 2.4 이상, JSP 2.0 이상에서 지원 --> Tomcat 5.5 이상

2. Homepage
    http://tomcat.apache.org/taglibs/
    http://www.oracle.com/technetwork/java/index-jsp-135995.html

3

. Downloads
    1) http://jakarta.apache.org/site/downloads/downloads_taglibs-standard.cgi
    2) /lib/jstl.jar, /lib/standard.jar
    3) copy to : /WEB-INF/lib

4. jstl example sites test
    1) eclipse에서 standard-doc.war 과 standard-examples.war 파일을 import한다.
        import -> WAR files -> standard-examples.war 선택
    2) http://localhost:8080/standard-examples/index.html

5. JSTL 에서 제공하는 Tag의 종류
    1) http://jakarta.apache.org/taglibs/doc/standard-doc/standard/GettingStarted.html 참조하자.
    2) Core : http://java.sun.com/jsp/jstl/core : c : <c:tagname...>
    3) XML processing : http://java.sun.com/jsp/jstl/xml : x : <x:tagname...>
    4) I18N capable formatting : http://java.sun.com/jsp/jstl/fmt : fmt : <fmt:tagname...>
    5) Database access(SQL) : http://java.sun.com/jsp/jstl/sql : sql : <sql:tagname...>
    6) Functions : http://java.sun.com/jsp/jstl/functions : fn : fn:functionName(...)

6. JavaServer Pages Standard Tag Library 1.1 Tag Reference
    - http://java.sun.com/products/jsp/jstl/1.1/docs/tlddocs/index.html

7

. Core Library
   1) JSP 페이지에서 필요한 가장 기본적인 기능들을 제공
   2) <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
   3) Tags
      - c:catch  : 예외처리에 사용
      - c:out : JspWriter 에 내용 출력
      - c:set : JSP 에서 사용될 변수 설정
         <c:set value="value" target="targetObjectName" property="propertyName" />
      - c:remove : 설정한 변수 제거
      - c:if : 조건처리
      - c:choose : 다중 조건 처리
      - c:forEach : 콜렉션이나 Map 의 각 항목 처리
      - c:forTokens : 구분자로 분리된 각각의 토큰을 처리할 때 사용
      - c:when
      - c:otherwise
      - c:import : URL 을 사용하여 다른 자원의 결과를 삽입
      - c:redirect : URL 을 재작성한다.
      - c:param

'Programming > JSP' 카테고리의 다른 글

JSP EL(Express Language) 표현언어  (0) 2011.03.24
JSP Custom Tag  (1) 2011.03.24
JSP DBCP 사용하기  (2) 2011.03.24
JavaBean  (2) 2011.03.24
JSP Action Tag  (1) 2011.03.24

1. EL ?
   1) JSTL(JSP Standard Tag Library) 1.0 규약에 소개된 내용
   2) JSP 2.0 에 새롭게 추가된 기능 
   3) ECMAscript(JavaScript) 와 XPath 의 개념을 이용해서 설계
   4) EL에서는 '.' 과 '[ '] 는 동일하게 처리 --> expr.a == expr["a"]

2. 제공하는 기능
   1) JSP 의 네가지 기본객체(page, request, session, application)가 제공하는 scope 의 속성 사용
   2) 집합 객체에대한 접근 방법 제공
   3) 수치 연산, 관계 연산, 논리 연산자 제공
   4) Java Class Method 호출 기능 제공
   5) 표현 언어만의 기본 객체 제공

3. 표현 방법
    ${expression}
    $ {7}   ==> 7
    ${10 + 20 + 30}  ==> 60
    ${ 스코프변수.속성명} 또는 ${스코프변수["속성명"]}

4. 기본객체
   1) pageContext : JSP 의 pageContext 기본객체와 동일
   2) pageScope : pageContext 에 저장된 <속성, 값> 매핑의 Map 객체
   3) requestScope : request 에 저장된 <속성, 값> 매핑의 Map 객체
   4) sessionScope : session 에 저장된 <속성, 값> 매핑의 Map 객체
   5) applicationScope : application 에 저장된 <속성, 값> 매핑의 Map 객체
   6) param : 요청 파라미터의 <파라미터이름, 값> 매핑의 Map 객체. 값의 타입은 String.
                    request.getParameter(이름)의 결과와 동일
   7) paramValues : 요청 파라미터의 <파라미터이름, 값 배열> 매핑의 Map 객체. 값의 타입은 String [].
                    request.getParameterValues(이름)의 결과와 동일
   8) header : 요청 정보의 <헤더 이름, 값> 매핑의 Map 객체. request.getHeader(이름)의 결과와 동일
   9) headerValues : 요청 정보의 <헤더 이름, 값 배열> 매핑의 Map 객체. request.getHeaders(이름)의 결과와 동일
   10) Cookie : <쿠키 이름, Cookie)  매핑의 Map 객체. request.getCookies() 로 구한 Cookie 배열로부터 생성
   11) initParam : 초기화 파라미터의 <이름, 값> 매핑의 Map 객체. 
         application.getInitParameter(이름)의 결과와 동일

5. Data Types
   1) Boolean : true, false
   2) Integer : 0 ~ 9의 정수, 음수표현을 위해 '-' 사용
   3) Float : 0 ~ 9의 실수, 소수점('.') 사용, 지수형도 가능
   4) String : ' ', " " 의 문자열
   5) Null : null

6. Operator
  1) 산술연산자 : +, - , *, /(div), %(mod)    --> ${"10" + 1}, ${"일" + 10}, ${null + 1}
  2) 비교연산자 : ==(eq), !=(ne), <(lt), >(gt), <=(le), >=(ge)
  3) 논리연산자 : &&(and), ||(or), !(not)
  4) empty 연산자 : 값의 널 여부검사 ,  empty <값>  e.g. ${empty param["name"]}
  5) 비교 선택 연산자 : <수식> ? <값1> : <값2>
  5) 연산자 우선순위
      - [], .
      - ()
      - -(단항), not, !, empty
      - *, / , div, %, mod
      - +, -
      - <, >, <=, >=, lt, gt, le, ge
      - ==, !=, eq, ne
      - &&, and
      - ||, or
      - ? :

7. EL에서 클래스 메소드 호출하는 방법
   1) 사용할 클래스 작성한다.
  ***********************************************************************************************
  package eltest;

  import java.util.Date;
  import java.text.SimpleDateFormat;

  public class DateEL {
 private static SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
 public static String getFormat(Date date){
  return formatter.format(date);
 }
  }
  ***********************************************************************************************
  2) 함수를 정의할 TLD 파일을 작성한다.
  ***********************************************************************************************
  <?xml version="1.0" encoding="UTF-8"?>

  <taglib xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xmlns="http://java.sun.com/xml/ns/j2ee"
            xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd"
            version="2.0">
 <description>EL에서 함수 실행</description>
 <tlib-version>1.0</tlib-version>
 <short-name>elfunctions</short-name>
 
 <function>
  <description>Date 객체 포맷팅</description>
  <name>dateFormat</name>
  <function-class>eltest.DateEL</function-class>
  <function-signature>java.lang.String getFormat(java.util.Date)</function-signature>
 </function>
  </taglib>
  ***********************************************************************************************
  3) JSP 페이지에서 함수 사용하기
  ***********************************************************************************************
  <%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
  <%@ taglib prefix="eltest" uri="/WEB-INF/tlds/el-functions.tld" %>
  <%
 java.util.Date today = new java.util.Date();
 request.setAttribute("today", today);
  %>
  <html>
  <body>
 오늘은 <b>${eltest:dateFormat(today)}</b> 입니다.
  </body>
  </html>

8. EL 비 활성화 방법
   1) web.xml 파일에 비활성화 옵션 지정하기
       <jsp-config>
             <jsp-property-group>
    <url-pattern>*.jsp</url-pattern>
    <el-ignored>true</el-ignored>
      </jsp-property-group>
       </jsp-config>

   2) <%@ page isELIgnored="true" %>

'Programming > JSP' 카테고리의 다른 글

JSP JSTL(표준 태그 라이브러리)  (0) 2011.03.24
JSP Custom Tag  (1) 2011.03.24
JSP DBCP 사용하기  (2) 2011.03.24
JavaBean  (2) 2011.03.24
JSP Action Tag  (1) 2011.03.24

Custom Tag
-JSTL 에서 지원하지 못하는 Tag 형식을 사용자가 정의해서 사용하는 Tag

1. 장점
-재사용성 : 한번 작성한 tag는 언제든지 재 사용이 가능하다.
-package 배포 : 표준화해서 다른 개발자가에게 package로 배포가 가능하다.
-가독성 : 프로그램의 가독성이 높아진다.
-의존성 : Scriptlet 을 사용하지 않기 때문에 자바 문법에 의존적이지 않는다.

2. 종류
a. JSP 1.2 스타일로 구현한 커스텀 태그
b. JSP 2.0 또는 그 이상 버전의 SimpleTag 를 사용한 커스텀 태그
c. JSP 2.0 또는 그 이상 버전의 태그 파일을 사용한 커스텀 태그

3. 자바 클래스를 기반으로 한 커스텀 태그 만들기
1) 작성순서
a. 커스텀 태그를 정의하는 자바파일의 작성
b. TLD(Tag Library Description) 파일 - 자바의 클래스 파일 등록
c. JSP 페이지에서 Custom Tag 사용

2) javax.servlet.jsp.tagext Interfaces
a. BodyTag
-JSP1.2 에서 제공하는 기존의 Custom Tag 구현시 사용
-태그의 body 내용이 있을 때 사용하는 Custom Tag
b. IterationTag
-JSP 1.2에서 제공하는 기존의 Custom Tag 구현시 사용
-반복적인 작업을 처리하는 Tag
c. Tag
-JSP 1.2에서 제공하는 기존의 Custom Tag 구현시 사용
-단순한 태그 처리시 사용하는 Custom Tag
d. SimpleTag
-JSP 2.0에서 제공하는 기존의 Custom Tag 구현시 사용
-Tag, IterationTag를 하나로 묶어서 쉽게 구현이 가능한 태그

4. JSP 1.2 기반
1) Tag Interface
-단순한 태그 처리시 사용하는 Custom Tag
-TagSupport class 지원
-int doEngTag() : 끝 태그를 만날때 실행됨
-int doStartTag() : 시작 태그를 만날때 실행됨
-Tag getParent() : 부모태그를 구한다.
-void release() : custom tag 를 사용하지 않을 때 실행됨
-void setPageContext(PageContext pc) : custom tag가 포함된 JSP page context를 전달 받는다.
-void setParent(Tag t) : 해당 태그의 부모태그가 존재할 때 부모태그를 설정한다.

2) Iteration Tag
-반복적인 작업을 처리하는 Custom Tag
-Tag interface를 상속받으므로 Tag Interface의 모든 멤버 사용가능
-TagSupport지원
-int doAfterBody() : 태그의 body 내용을 처리한 뒤에 실행

3) BodyTag
-IterationTag 인터페이스를 상속받으므로 IterationTag 인터페이스의 모든 멤버 사용 가능
-BodyTagSupport 지원
-void doInitBody() : body 를 수행하기 위한 준비
-void setBodyContent(BodyContent b) : bodycontent 속성을 지정

4) 사용예
a. Java Class 정의 : WEB-INF/src/
package com.javasoft.libs;
public class HelloTag extends TagSupport {
     public void doStartTag() throws JspException {
           JspWriter out = pageContext.getOut();
           try {
                 out.print("<font size='7' color='red'>");
                 out.print("Hello Custom Tag");
                 out.print("</font>");
           } catch(Exception ex) {
                throw new JspTagException ("Exception Occurrance : " + ex.getMessage());
           }
           return SKIP_BODY;
     }
     public int doEndTag() throws JspTagException{
           return EVAL_PAGE;
     }
}

b. TLD 파일 정의 : WEB-INF/tlds/
<Hello.tld>
<?xml version="1.0" encoding="UTF-8"?>

<taglib xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xmlns="http://java.sun.com/xml/ns/j2ee"
            xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd"
            version="2.0">
                 <description>JSP1.2 Custom Tag Example</description>
                 <display-name>간단한 JSP 1.2 커스텀 태그 예제</display-name>
 <tlib-version>1.0.0.0</tlib-version>
 <short-name>mytag</short-name>
 
 <tag>
  <name>hello</name>
  <tag-class>com.javasoft.libs.HelloTag</tag-class>
  <body-content>empty</body-content>
 </tag>      
</taglib>

c. web.xml 수정 <----JSP 2.0 이상에서는 할 필요없슴
<taglib>
    <taglib-uri>/WEB-INF/tlds/hello.tld<taglib-url>
    <taglib-location>/WEB-INF/tlds/hello.tld<taglib-url>
</taglib>

d. JSP 에서 사용
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%@ taglib prefix="mytag" uri="/WEB-INF/tlds/mytaglib.tld" %>
<html>
<body>
 <mytag:hello/>.
</body>
</html>

5. JSP 2.0 기반 
1) Simple Tag
-body 의 사용여부와 상관없이 simpleTag 인터페이스 사용
-SimpleTagSupport 클래스를 사용하여 Custom tag 작성
-void doTag() : custom tag 를 만나면 살행된다.
-protected JspFragment getJspBody() : JspFrament 객체로 customtag의 body를 처리
-protected JspContext getJspContext() : JspContext 객체를 얻는다.

2) 사용예
a.  Java Class 정의 <--여기만 틀림
package com.javasoft.libs;
public class SimpleTag extends SimpleTagSupport {
     public void doTag() throws JspException {
           JspWriter out = getJspContext().getOut();
           try {
                 out.print("<font size='7' color='red'>");
                 out.print("Simple Custom Tag");
                 out.print("</font>");
           } catch(Exception ex) {
                throw new JspTagException ("Exception Occurrance : " + ex.getMessage());
           }
           return SKIP_BODY;
     }
}

6. Tag 파일을 기반으로 하는 Custom Tag
1) 개요
a. Tag File
-Custom Tag를 정의한 파일로 Custom Tag 당 하나의 Tag File이 매핑됨
b. Jsp Page
-해당 Custom Tag를 사용하는 Jsp Page

2) 작성방법
- Custom Tag 를 정의한다.
- 확장자는 .tag 를 사용한다.
-<%@ tag %> directive 를 사용한다.
-Tag Handler 로 변환되어 처리된다.
-jsp와 동일한 방식으로 같은 문법을 사용하여 작성한다.

3) Tag File Directive
a. taglib : JSP 페이지의 taglib와 동일한 기능을 수행
b. include :JSP 페이지의 include 와 동일한 기능, 단 tag file 에 맞는 문법 사용해야
c. tag : JSP 페이지의 page directive 와 동일, tag 파일의 설정 지원
d. attribute : tag file 에서 custom tag의 속성을 명시
e. variable : EL을 명시

4) tag Directive
-display-name : tag file의 확장자를 제외한 파일명
-body-content : 태그의 body의 내용에 대한 정보를 제공, empty | tagdependent | scriptless 중 하나의 값을 설정
-dynamic-attributes : 해당 태그의 동적인 속성을 지원, 이름과 값의 쌍이 map 으로 저장
-small-icon : 이미지 파일의 태그소스파일로부터 상대적인 경로를 기술
-large-icon : 이미지 파일의 태그소스파일로부터 상대적인 경로를 기술
-description : 태그의 설명
-example : 해당 액션이 사용될 때의 예제
-lanaguge
-import
-pageEncoding

7. body 가 있는 tag file 작성하기
1) body-content 속성 설정
a. tagdependent - custom tag의 내용을 처리하지 않고 그대로 사용
b. scriptless : EL 요소나 action tag 의 처리결과를 사용
2)<jsp:doBody> tag 를 사용함
a. <jsp:invoke>tag 와 유사
b. var : 속성의 이름을 저장하기 위한 변수
c. scope : 속성변수가 유지되는 범위를 설정

8. <%@ attribute %> tag
1) custom tag의 속성을 명시
2) 속성
a. description : 속성에 대한 설명
b. name : 속성의 이름, 중복을 허용하지 않음, 필수 항목
c. required : 속성의 필수여부를 설정, true | false로 설정
d. rtexprvalue : 속성의 값으로 표현식이 사용 가능한가의 여부를 결정
e. type : 속성의 타입을 기술, java.lang.String 이 기본
f. fragment : 속성값을 전달할 때 사용, JspFragment를 사용하는 경우,  true로 설정

9. <%@ variable %> Directive
1) EL 변수를 명시하는 경우에 사용
2) 속성
a.  description : 속성에 대한 설명
b. name-given / name-from-attribute : 태그파일을 사용할 페이지에서 사용할 EL의 변수이름, 두가지 속성중 하나만 기술
c. alias name-from-attribute : 속성을 사용하는 경우 반드시 기술해야 하는 속성, custom tag의 body 에서 사용될 변수를 정의
d. declare : 변수의 선언과 관계없이 기본값은 true
e. scope : 변수의 범위를 설정, AT_BEGIN | AT_END | NESTED(default)

'Programming > JSP' 카테고리의 다른 글

JSP JSTL(표준 태그 라이브러리)  (0) 2011.03.24
JSP EL(Express Language) 표현언어  (0) 2011.03.24
JSP DBCP 사용하기  (2) 2011.03.24
JavaBean  (2) 2011.03.24
JSP Action Tag  (1) 2011.03.24
DBCP 1.4 API 의 사용방법

1. DBCP 관련 Jar 파일 및 JDBC 드라이버 Jar 파일 설치하기
   1)Downloads
   2)Downloads Jar files
- DBCP API 관련 Jar 파일 : commons-dbcp-1.4-bin.zip
- DBCP API 가 사용하는 자카르타 Pool API 의 Jar 파일 : commons-pool-1.5.5-bin.zip
   3)위의 파일의 압축을 풀고 각각의 jar 파일을 WEB-INF\lib\ 폴더에 import 한다.
        - commons-dbcp-1.4.jar, commons-pool-1.5.5.jar

   
2. 커넥션 풀 관련 설정 파일 및 초기화하기
   1) 설정파일은 jocl 로 만들어지며 WEB-INF\classes\ 폴더밑에 저장한다.
  
   소스파일) \WEB-INF\classes\pool.jocl
*********************************************************************************************************
<object class="org.apache.commons.dbcp.PoolableConnectionFactory"
   <object class="org.apache.commons.dbcp.DriverManagerConnectionFactory">
      <string value="jdbc:oracle:thin:@localhost:1521:XE" />   <!-- URL -->
      <string value="scott" />                                     <!-- user -->
      <string value="tiger" />                                     <!-- password -->
   </object>
  
   <object class="org.apache.commons.pool.impl.GenericObjectPool">
      <object class="org.apache.commons.pool.PoolableObjectFactory" null="true" />
      <int value="10" />                                          <!--  maxActive -->
      <byte value="1" />                                         <!--  wait mode -->
      <long value="10000" />                                  <!--  wait time 10000 ms -->   
      <int value="10" />                                           <!-- maxIdel -->
      <int value="3" />                                             <!-- minIdel --> 
      <boolean value="true" />                                
      <boolean value="true" />
      <long value="600000" />
      <int value="5" />
      <long value="3600000" />
      <boolean value="true" />
   </object>
  
   <object class="org.apache.commons.pool.impl.GenericKeyedObjectPoolFactory" null="true" />


   <string null="true" />
  
   <boolean value="false" />
  
   <boolean value="true" />
</object>

*********************************************************************************************************

3. 커넥션 풀 관련 드라이버 로딩하기

소스파일) \WEB-INF\src\com\javasoft\db\DBCPInit.java
*********************************************************************************************************
package com.javasoft.db;

import javax.servlet.http.HttpServlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import java.util.StringTokenizer;

public class DBCPInit extends HttpServlet {
    public void init(ServletConfig config) throws ServletException {
        try {
            String drivers = config.getInitParameter("jdbcdriver");
            StringTokenizer st = new StringTokenizer(drivers, ",");
            while (st.hasMoreTokens()) {
                String jdbcDriver = st.nextToken();
                Class.forName(jdbcDriver);
            }            
            Class.forName("org.apache.commons.dbcp.PoolingDriver");            
        } catch(Exception ex) {
            throw new ServletException(ex);
        }
    }
}

*********************************************************************************************************

4. 웹 어플리케이션이 시작될 때 DBCPInit 서블릿 클래스가 시작될 수 있도록 지정하기

소스파일) \WEB-INF\web.xml
*********************************************************************************************************
<?xml version="1.0" encoding="euc-kr"?>
....
....
  <servlet>
     <servlet-name>DBCPInit</servlet-name>
     <servlet-class>com.javasoft.db.DBCPInit</servlet-class>
     <load-on-startup>1</load-on-startup>
     <init-param>
        <param-name>jdbcdriver</param-name>
        <param-value>oracle.jdbc.driver.OracleDriver</param-value>
     </init-param>
  </servlet>
</web-app>
*********************************************************************************************************

5. 커넥션을 가져오는 DBUtil 클래스
  - 커넥션을 구하는 클래스인 별도의 DBConn 클래스를 작성하는것이 개발하는데 편리하다.

소스파일) \WEB-INF\com\javasoft\db\DBConn.java
********************************************************************************************************
package com.javasoft.db;

import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.SQLException;

public class DBConn {
    public static Connection getConnection(String poolName)
    throws SQLException {
        return DriverManager.getConnection(
            "jdbc:apache:commons:dbcp:/"+poolName);
    }
}
*********************************************************************************************************
6. 사용방법
    - 커넥션을 구하는 곳에 다음과 같이 해주면 된다.
try {
   conn = DBConn.getConnection("pool");

'Programming > JSP' 카테고리의 다른 글

JSP EL(Express Language) 표현언어  (0) 2011.03.24
JSP Custom Tag  (1) 2011.03.24
JavaBean  (2) 2011.03.24
JSP Action Tag  (1) 2011.03.24
JSP 의 내장객체  (1) 2011.03.24

+ Recent posts