@Autowire 속성에 지정 가능한 값


1. no

- Autowiring 을 하지 않는다. 기본 값.


2. byName

- Bean 필드 이름과 같은 이름의 id를 갖는 Bean을 연결해준다.


3. byType

- Bean 필드에 대한 Setter 메서드의 인수 타입을 사용해 연결해준다.


4. constructor

- 생성자에 대해 byType을 사용해 연결해준다.


5. autodetect

- constructor인지 byType 인지 자동으로 판단한다.

  기본 생성자가 정의되어 있지 않은 경우는 constructor를, 정의되어 있는 경우에는 byType을 사용해 연결해준다.

 IBATIS 처리 후 Return 값

insert()는 성공 시 null이 반환 실패하면 에러 발생(구지 Return 값을 받아야 한다면, 'Update' 로 쿼리 실행)

update()는 성공 시 1 실패 시 0 반환

delete()는 삭제한 row수를 반환 한다. 잊지 말자

 

자꾸, 할때 마다 헷갈려서 메모한다. 

'공부 > IBATIS & MYBATIS' 카테고리의 다른 글

MYBATIS_[ insert() 후 result 값 받기 ]  (0) 2014.10.27

'공부 > ETC' 카테고리의 다른 글

ETC_[ Win7 Telnet 설정 ]  (0) 2014.11.04
ETC_[Apache Error Code]  (0) 2013.08.24
ETC_[제발 a href="#" 좀 쓰지 말자]  (0) 2013.03.13
주저리_[날짜 약자]  (0) 2013.01.08
NHN_NEXT 학교(?)를 설립하다  (0) 2012.06.30

비전공 전문대 2년 졸업

취업 후 정보처리기사도 없고(정보처리사업기사 유) 관련학과 4년제도 아니고

직업을 바꾼 후 이걸로 쭉 - 먹고 살자 늦게 시작했으니 공부 좀 하잔 생각으로 시작한 사이버대학 생활

5주차 접어들면서 처음으로 과제가 나왔다.

어렵진 않았는데 <FRAME> 태그는 처음 써보는거 같다. 잼있다.

실무에서 안쓰는거 같지만(지금회사가 첫 직장. 이제 2년차[학교졸업하면 이직할까?)

혹시나 나중에 쓸일이 생기면 참고하라고 흔적을 남긴다.

아 - 정보처리기사 실기 1주일 남았는데... 다음 회차로 미룰까?

 

간단히 과제 소개

1. 테이블 그리기(셀 합치기 & 정렬)

2. <FRAMESET><FRAME> 이용해서 화면 분할

3. 이미지 맵을 이용한 범위 지정 및 링크처리하기

 

- 내가 학교에 제출한 과제 (한참 나중에 보면 웃길거 같아서 남긴다)

 5주차과제.zip

 

class 파일 소스를 보려면

이전까지 Jad 따로 열어서 Class 소스 드래그 해서 봤었는데... 멍청한 짓이였다.

생각해보면 미친 또라이 짓이였다.

 

이걸 이제야 알다니... 충격이다.

다른분 블러그에서 내용을 보고 나드 설치 완료.

 

2012년에 작성하신건데.. 구글링을 좀 해봐도 지금 올려져 있는 버젼이 최신인거 같다.

JAD는 바이트코드인 Java Class 파일을 디컴파일해주는 프로그램(개발자가 볼수있도록)

JadClipse 는 자바디컴파일을 이클립스에서 편리하게 사용할 수 있도록 도와주는 이클립스 플러그인

 

처음에 이클립스 Help -> Eclipse MarketPlace -> Find: jad -> JadClipse For Eclipse 4.x -> install 했는데

설치가 안된다. 이유를 모르겟다. 그래서 검색해보니 다른방법이 있다. 그래서 했다. 처음방법이 왜안되는지는 모르겠다.

 

- 필요한 파일

1. Jad.exe 다운로드

http://www.varaneckas.com/jad

jad158g.win.zip

 

2. net.sf.jadclipse_x.x.x.jar (현재 3.3.0 버젼이 최신) 확실히 모름

http://sourceforge.net/projects/jadclipse/

net.sf.jadclipse_3.3.0.jar

 

- Jad 설정

Jad.zip 압출풀기 -> 이클립스 폴더(내 컴퓨터 기준 :D:\DEV\Toolz\eclipse\jad.exe)에 Jad.exe 추가

 

- net.sf.jadclipse_x.x.x.jar 설정

net.sf.jadclipse_x.x.x.jar 통째로 이클립스/플러그인 폴더 추가

(내 컴퓨터준:D:\DEV\Toolz\eclipse\plugins\net.sf.jadclipse_3.3.0)

 

- JadClipse 사용을 위한 이클립스 내의 환경설정

 

- 사용법(?)

이클립스 재부팅

사용시 확인하고자 하는 소스(?) Ctrl + 마우스클릭

 

- GoogleMap API 오버레이 & 마커 표시

1. 오버레이 : 지도상의 위치정보 연결객체

2. 마커 : 지도상의 위치 표시(아이콘)

- 사용 예)

<!DOCTYPE html>
<html DIR="LTR">
<head>
<title>Google Maps JavaScript API v3 예제: 오버레이 제거</title>
<link href="http://code.google.com/apis/maps/documentation/javascript/examples/default.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
<script type="text/javascript">
    var map;
  /* 클릭한 마커의 ID, 좌표를 관리할 배열 생성 */
  var markersArray = [];

  /* 초기화 */
  function initialize() {
    /* 초기화 나타날 지도 센터의 좌표 */
    var haightAshbury = new google.maps.LatLng(37.7699298, -122.4469157);
    var mapOptions = {
      zoom: 12,
      center: haightAshbury,
      /* 출력한 지도 타입 */
      mapTypeId: google.maps.MapTypeId.TERRAIN
  };

    /* 맵 생성 */
    map = new google.maps.Map(document.getElementById("map_canvas"),
        mapOptions);
   
    /* 사용자의 이벤트처리할 리스너 */
    google.maps.event.addListener(map, 'click', function(event) {
      addMarker(event.latLng);
    });
  }
 
  function addMarker(location) {
    marker = new google.maps.Marker({
      position: location,
      map: map
  });
    /* 맵의 입력 */
    markersArray.push(marker);
  }

  // Removes the overlays from the map, but keeps them in the array
  /* 마커 지도(화면단)에서 지우기(실제 정보는 존재) */
  function clearOverlays() {
    if (markersArray) {
      for (i in markersArray) {
        markersArray[i].setMap(null);
      }
    }
  }

  // Shows any overlays currently in the array
  function showOverlays() {
    if (markersArray) {
      for (i in markersArray) {
        markersArray[i].setMap(map);
      }
    }
  }

  // Deletes all markers in the array by removing references to them
  /* 마커정보 완전 삭제 */
  function deleteOverlays() {
    if (markersArray) {
        for (i in markersArray) {
        /* 마케지우고 */
        markersArray[i].setMap(null);
    }
      /* 마커정보 배열 지우기 */
      markersArray.length = 0;
    }
  }
</script>
</head>
<body onload="initialize();">
  <div>
    <input onclick="clearOverlays();" type=button value="오버레이 지우기" />
    <input onclick="showOverlays();" type=button value="오버레이 모두 표시" />
    <input onclick="deleteOverlays();" type=button value="오버레이 삭제" />
  </div>
  <div id="map_canvas" style="top:30px;width:600px; height:500px"></div>
</body>
</html>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

    <title>회원가입</title>

    <script src="../../js/jquery-1.3.2-vsdoc2.js" type="text/javascript"></script>

    <script src="jquery.validate-vsdoc.js" type="text/javascript"></script>

    <script type="text/javascript">

        $(document).ready(function() {

            //$('#myForm').validate(); // 유효성 검사

            $('#myForm').validate({

                rules: {

                    txtID: { required: true, minlength: 3, remote:"Validate.aspx" },

                    txtPassword: { required: true },

                    txtName: { required: true },

                    txtEmail: { email: true },

                    txtPasswordConfirm: { equalTo: "#txtPassword" },

                    txtAge: { range: [1, 150] }

                },

                messages: {

                    txtID: {

                        required: "아이디를 입력하시오.",

                        minlength: jQuery.format("아이디는 {0}자 이상"),

                        remote : jQuery.format("{0}는 이미 있는 아이디")

                    },

                    txtPassword: { required: "암호를 입력하시오." },

                    txtName: { required: "이름을 입력하시오." },

                    txtEmail: { email: "올바른 이메일을 입력하시오." },

                    txtPasswordConfirm: { equalTo: "암호를 다시 확인하세요." },

                    txtAge: { range: "나이는 1~150" }

                },

                // 아래 코드는 버그

                //submitHandler: function () {

                //    $('#myForm').submit(); // 통과시 전송

                //},

                submitHandler: function (frm) {

                    frm.submit(); // 통과시 전송

                },

                success: function (e) {

                    //

                }               

            });

        });

    </script>

</head>

<body>

<form id="myForm" method="post" action="Validate.aspx">

    아이디 : <input type="text" id="txtID" name="txtID" class="required" /><br />

    암호 : <input type="text" id="txtPassword" name="txtPassword" class="required" /><br />

    암호확인 : <input type="text" id="txtPasswordConfirm" name="txtPasswordConfirm" class="required" /><br />

    이름 : <input type="text" id="txtName" name="txtName" class="required" minlength="2" /><br />

    이메일 : <input type="text" id="txtEmail" name="txtEmail" class="required email" /><br />

    나이 : <input type="text" id="txtAge" name="txtAge" /><br />

   

    <input type="submit" value="전송" />

</form>

</body>

</html>


- HTML <A> 태그의 TARGET 속성의 값

1] 일반적인 예)

<a href="http://lucetedaniel.tistory.com">내 티스토리 블러그</a>


2] 속성 TARGET 의 종류

1. _blank

- 링크된 내용을 새로운 창으로 보여준다.

2. new

- 링크된 내용을 새로운 창으로 보여준다.

3. _self

- 현재의 창에 링크된 내용을 보여준다.

4. _top

- 현재의 창이 프레임으로 구성되어 있을때 프레임이 사라지고 하나의

  화면에 링크된 내용을 보여준다.

5. _parent

- 링크 부분이 있는 프레임에 새로운 프레임이 만들어져 링크된 내용을 보여준다.


3] TARGET 사용 예

<a href="http://lucetedaniel.tistory.com" target="_blank">내 티스토리 블러그</a>


'공부 > HTML' 카테고리의 다른 글

HTML_[ optgroup ]  (0) 2014.05.26
HTML_[속성 id 와 name 차이]  (0) 2013.01.18
function
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

fn:contains(string, substring)  
string이 substring을 포함하면 true 리턴. 

fn:containsIgnoreCase(string,substring)
대소문자에 관계없이, string이 substring을 포함하면 true 리턴. 

fn:endsWith(string, suffix)   
string이 suffix로 끝나면 true 리턴. 

fn:escapeXml(string)    
string에 XML과 HTML에서 특별한 의미를 가진 문자들이 있으면, XML 엔티티 코드로 바꿔준 뒤 문자열 리턴. 

fn:indexOf(string,substring)  
string에서 substring이 처음으로 나타나는 인덱스 리턴. 

fn:join(array, separator)
  
array(배열) 요소들을 separator를 구분자로 하여 연결해서 리턴 

fn:length(item)
      
item 이 배열이나 컬렉션이면 요소의 갯수를, 문자열이면 문자의 갯수를 리턴. 

fn:replace(string, before, after)
 
string 내에 있는 before 문자열을 after 문자열로 모두 바꿔서 리턴. 

fn:split(string, separator)
   
string 내의 문자열을 separator에 따라 나누어서 배열로 구성해 리턴. 

fn:startsWith(string, prefix)
  
string이 prefix로 시작하면 true 리턴. 

fn:substring(string, begin, end)
 
tring에서 begin 인덱스에서 시작해서 end 인덱스에 끝나는 부분
(end 인덱스에 있는문자 포함)의 문자열을 리턴.

fn:substringAfter(string, substring)

string에서 substring이 나타나는 이후의 부분에 있는 문자열을 리턴. 

fn:substringBefore(string, substring)

string에서 substring이 나타나기 이전의 부분에 있는 문자열을 리턴. 

fn:toLowerCase(string)
    
string을 모두 소문자로 바꿔 리턴. 

fn:toUpperCase(string)
    
string을 모두 대문자로 바꿔 리턴. 

fn:trim(string)
      
string 앞뒤의 공백(whitespace)을 모두 제거하여 리턴.

개요

JSTL(JSP Standard Tag Library) 설명한다.

목차

1.           개요

JSTL(JSP Standard Tag Library) 설명한다. 프레임워크에서는 JSTL 구성하는 4개의 태그 라이브러리 중에서 core 태그 라이브러리만을 사용한다.

종류

설명

prefix

uri

core

데이터 출력, 제어문, URL 처리 기본 기능

c

http://java.sun.com/jstl/core (1.3)

http://java.sun.com/jsp/jstl/core (1.4)

format

I18N 데이터 포멧 기능

fmt

http://java.sun.com/jstl/fmt (1.3)

http://java.sun.com/jsp/jstl/fmt (1.4)

xml

XML 문서에 대한 처리

x

http://java.sun.com/jstl/xml (1.3)

http://java.sun.com/jsp/jstl/xml (1.4)

sql

JDBC 작업 수행

sql

http://java.sun.com/jstl/sql (1.3)

http://java.sun.com/jsp/jstl/sql (1.4)

                                                                                                                                                             표 1.         JSTL 태그 라이브러리

2.           설정

JSTL 사용하려면 아래 파일이 어플리케이션 디렉토리에 위치해야 한다.

파일

설명

WEB-INF/lib/jstl.jar

JSTL API 라이브러리

WEB-INF/lib/standard.jar

JSTL 구현 라이브러리

WEB-INF/tld/c.tld

JSTL core TLD 파일

                                                                                                                                                            표 2.         JSTL 설정을 위한 파일

J2EE 1.3에서는 JSTL 1.0 라이브러리를, J2EE 1.4에서는 JSTL 1.1 라이브러리를 사용한다. 라이브러리는 다음(http://jakarta.apache.org/taglibs/doc/standard-doc/intro.html)에서 다운로드한다.

그리고 web.xml 파일에 태그 라이브러리를 설정한다. 아래는 J2EE 1.3 사용하는 경우의 설정이다.

 

web.xml

 

<taglib>

    <taglib-uri>http://java.sun.com/jstl/core</taglib-uri>

    <taglib-location>/WEB-INF/c.tld</taglib-location>

</taglib>

 

그리고 아래는 J2EE 1.4 사용하는 경우의 설정이다.

 

web.xml

 

<jsp-config>

    <taglib>

        <taglib-uri>http://java.sun.com/jsp/jstl/core</taglib-uri>

        <taglib-location>/WEB-INF/c.tld</taglib-location>

    </taglib>

</jsp-config>

 

3.           JSTL 사용

JSTL 사용하는 모든 JSP 파일 상단에 아래 내용을 추가한다.

 

Example.jsp

 

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>

 

<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>

 

그런데 J2EE 1.3 J2EE 1.4 따라서 uri 속성의 값이 다르다. 이에 따른 수정 영향을 최소화하기 위해서 BaseJsp.jsp 파일을 사용한다.

 

Example.jsp

 

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>

 

<%@ include file="/BaseJsp.jsp" %>

 

BaseJsp.jsp 내용은 아래와 같다. 프레임워크가 제공하는 태그 라이브러리 설정도 포함한다.

 

BaseJsp.jsp

 

<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>

<%@ taglib prefix="framework" uri="http://www.naver.com/ctl/framework" %>

<%@ taglib prefix="ui" uri="http://www.naver.com/ctl/ui" %>

 

4.           Expression!! Language

(1)    Expression!! Language 개요

JSTL Expression!! Language(이하 EL) 사용한다. EL 데이터 혹은 객체를 표현하는데 사용하는 스크립트 언어로 ${} 안에서 사용한다.

 

// 동적인 표현 작업 수행

${Some Expression!!}

 

EL 아래의 작업을 수행한다.

           JSP 저장 영역(page, request, session, application) 대한 접근

           java.util.Collection, java.util.Map, 배열 등의 객체 처리

           POJO 유형의 객체 처리

           수치, 비교, 논리 연산자 적용

 

J2EE 1.3에서는 EL JSTL 태그의 속성 값에서만 사용할 있다. 그러나 J2EE 1.4에서는 EL JSP JSTL 모두에서 사용할 있다.

(2)    Expression!! Language 기본 객체

EL에서 사용 가능한 주요 JSP API 대한 Alias 아래와 같다.

종류

기본 객체

예제

JSP

저장 영역

pageScope - PageContext 속성

requestScope - HttpServletRequest 속성

sessionScope - HttpSession 속성

applicationScope - ServletContext 속성

${requestScope.name}

HTTP

요청

파라미터

param - HttpServletRequest 파라미터

paramValues - 동일 파라미터 이름에 값이 2 이상 존재하는 경우

${param.name}

JSP

객체

pageContext - PageContext

cookie - 이름을 키로, Cookie 값으로 하는 java.util.Map

header - 해더 이름을 키로, 해더 값을 값으로 하는 java.util.Map

headerValues - 동일 해더 이름에 값이 2 이상 존재하는 경우

initParam - JSP 초기 변수

${cookie.JSESSIONID.name}

${headerValues['HOST'][0]}"

                                                                                                                                                          표 3.    EL 기본 객체

(3)    객체 사용

기본 데이터 타입(Boolean, Integer, Long, String ) 아래처럼 사용한다.

 

request.setAttribute("name", "성선임");

 

// 성선임을 출력한다.

${requestScope.name}

 

// 성선임을 출력한다. 영역을 지정하지 않으면 page, request, session, application

// 으로 검색한다.

${name}

 

// null 출력하지 않고 아무 것도 출력하지 않는다.

${password}

 

<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /><?xml:namespace prefix = st1 /><?xml:namespace prefix = st1 /><?xml:namespace prefix = st1 />POJO 객체의 경우에는 파라미터가 없는 get으로 시작하는 메소드에서 get 제외한 나머지 메소드 이름의 첫번째 단어를 소문자로 해서 사용한다.

 

Book.java

 

public class Book {

 

    private String isbn;

 

    public Book(String isbn) {

        this.isbn = isbn;

   

    public void getIsbn() {

        return this.isbn;

    }

 

    public void setIsbn(String isbn) {

        this.isbn = isbn;

    }

 

    public String toString() {

        return "book-object";

    }

 

}

 

 

Example.jsp

 

Book book = new Book("100");

request.setAttribute("favoriteBook", book);

 

// toString 메소드가 반환하는 값을 출력한다. book-object 출력한다.

${favoriteBook}

 

// . 연산자를 사용해서 getIsbn 메소드가 반환하는 값을 출력한다. 100 출력한다.

${favoriteBook.isbn}

 

// [] 연산자를 사용해도 결과는 동일하다.

${favoriteBook['isbn']}

 

// 값이 없는 경우에 NullPointerException 발생하지 않는다.

${nullBook.isbn}

 

// 해당하는 메소드가 없는 경우에는 예외가 발생한다.

${book.title}

 

배열 객체는 아래처럼 사용한다.

 

Book[] books = new Book[2];

 

books[0] = new Book("100");

books[1] = new Book("200");

 

request.setAttribute("books", books);

 

// 100 출력한다.

${books[0].isbn}

 

// 200 출력한다.

${books[1].isbn}

 

java.util.Map 객체는 아래처럼 사용한다. 키의 유형은 항상 java.lang.String이어야 한다.

 

Map map = new HashMap();

map.put("one", new Integer(1));

map.put("sub.one", new Integer(2));

 

request.setAttribute("numbers", map);

 

// . [] 연산자를 모두 사용할 있다. 1 출력한다.

${number.one}

${number['one']}

 

// 키가 . 등의 문자를 포함하면 [] 연산자를 사용한다. 2 출력한다.

${number['sub.one']}

 

// java.util.Map 키가 존재하지 않아도 예외가 발생하지 않는다.

${number.two}

 

(4)    연산자

EL에서 아래의 수치 연산자를 사용할 있다.

연산자

설명

예제

결과

+

더하기

${10 + 2}

12

-

빼기

${10 - 2}

8

*

곱하기

${10 * 2}

20

/ 또는 div

나누기

${10 / 2} 또는 ${10 div 2}

5

% 또는 mod

나머지

${10 % 3} 또는 ${10 mod 3}

1

                                                                                                                                                       표 4.    EL 수치 연산자

숫자형이 아니면 숫자형으로 자동 전환을 후에 연산을 수행한다.

 

// 101 아닌 11 출력한다.

${"10" + 1}

 

// null 0으로 처리한다. 1 출력한다.

${null + 1}

 

// 숫자가 아니면 예외가 발생한다.

${"" + 10}

 

EL 제공하는 비교 논리 연산자는 아래와 같다. >, < XML 태그와 혼동할 우려가 있는 연산자는 문자열 연산자(gt, lt) 표현하는 것을 권장한다.

연산자

예제

결과

== 또는 eq

${5 == 5} 또는 ${5 eq 5}

true

!= 또는 ne

${5 != 5} 또는 ${5 ne 5}

false

< 또는 lt

${5 < 7} 또는 ${5 lt 7}

true

> 또는 gt

${5 > 7} 또는 ${5 gt 7}

false

<= 또는 le

${5 <= 5} 또는 ${5 le 5}

true

>= 또는 ge

${5 >= 6} 또는 ${5 ge 6}

false

&& 또는 and

${true && false} 또는 ${true and false}

false

|| 또는 or

${true || false} 또는 ${true or false}

true

! 또는 not

${!true} 또는 ${not true}

false

empty

${empty name}

name null이거나 문자열이면 true

not empty

${not empty name}

name null 아니고 문자열도 아니면 true

                                                                                                                                          표 5.    EL 비교 논리 연산자

5.           core

(1)        c:out

객체를 화면에 출력한다.

 

// out.println(request.getAttribute("name"));

<c:out value="${name}"/>

 

// 값이 없는 경우에 기본 값을 출력하려면 default 속성을 이용한다.

<c:out value="${age}" default="값이 없습니다."/>

 

// 기본적으로 XML 문자를 escape한다. Escape 하지 않으려면 escapeXml false 한다.

<c:out value="${name}" escapeXml="false"/>

 

(2)        c:set

저장 영역에 객체를 저장한다.

 

// request.setAttribute("name", "<?xml:namespace prefix = st2 ns = "urn:schemas:contacts" /><?xml:namespace prefix = st2 /><?xml:namespace prefix = st2 /><?xml:namespace prefix = st2 />태섭");

// scope 속성으로는 page(기본), request, session, application 사용.

<c:set scope="request" var="name" value="송태섭"/>

 

// Book book = (Book) request.getAttribute("book");

// book.setIsbn("300");

<c:set scope="request" target="book" property="isbn" value="300"/>

 

(3)        c:remove

저장 영역에서 객체를 삭제한다.

 

// request.removeAttribute("name");

<c:remove scope="request" var="name"/>

 

(4)        c:if

조건문을 제어한다.

 

// test 속성의 값이 true c:if 태그의 body 내용을 수행한다.

<c:if test="${not empty flag}">

    flag 존재하면 영역을 수행한다.

</c:if>

 

(5)        c:choose, c:when, c:otherwise

복합 조건문을 제어한다.

 

// c:choose 태그는 1 이상의 c:when 태그와 0 또는 1개의 c:otherwise 태그로 구성

<c:choose>

    <c:when test="${flag == 1}">

        flag 1이면 영역을 수행한다.

    </c:when>

    <c:when test="${flag == 2}">

        flag 2이면 영역을 수행한다.

    </c:when>

    <c:otherwise>

        flag 1 2 아니면 영역을 수행한다.

    </c:otherwise>

</c:choose>

 

(6)        c:forEach

반복문을 수행한다.

 

<%

for (int i = 0; i < 10; i++) {

        out.println(i);

}

%>

 

// 0 1 2 3 4 5 6 7 8 9 출력한다.

<c:forEach begin="0" end="9" var="i">

    <c:out value="${i}"/>

</c:forEach>

 

step 속성으로 간격을 조정한다.

 

<%

    for (int i = 0; i < 10; i += 2) {

        out.println(i);

    }

%>

 

// 0 2 4 6 8 출력한다.

<c:forEach begin="0" end="9" step="2" var="i">

    <c:out value="${i}"/>

</c:forEach>

 

java.util.Collection 객체나 배열에 대해서는 아래처럼 한다.

 

<%

    Collection books = (Collection) request.getAttribute("books");

    for (Iterator all = books.iterator(); all.hasNext();) {

        Book each = (Book) all.next();

        out.println(each.getIsbn());

    }

%>

 

<c:forEach items="${books}" var="book">

    <c:out value="${book.isbn}"/>

</c:forEach>

 

items 속성 값으로 기본 타입의 배열, java.util.Collection, java.util.Map, java.util.Iterator, java.util.Enumeration, java.lang.Object 배열, 콤마로 이루어진 java.lang.String 등의 객체를 사용할 있다.

java.util.Map 객체는 아래처럼 사용한다.

 

<%

    Map books = new HashMap();

    books.put("one", new Book("100"));

    books.put("two", new Book("200"));

    request.setAttribute("books", books);

%>

 

// one 100 two 200 출력한다. (순서는 정확하지 않다.)

<c:forEach items="${books}" var="book">

    <c:out value="${book.key}"/>

<c:out value="${book.value.isbn}"/>

</c:forEach>

 

(7)        c:forTokens

구분자로 반복문을 수행한다.

 

//1 2 3 4 출력한다.

<c:forTokens delims="," items="1,2,3,4" var="i">

    <c:out value="${i}"/>

</c:forTokens>

 

begin, end, step 속성으로 시작 위치, 종료 위치, 간격을 조정한다.

(8)        c:url, c:param

URL 처리한다.

 

// UserForm.jsp 출력한다.

<c:url value="UserForm.jsp"/>

 

// value 속성 값이 / 시작하면 컨텍스트를 포함한다.

// 컨텍스트를 web으로 가정하면 /web/UserForm.jsp 출력한다.

<c:url value="/UserForm.jsp"/>

 

// 다른 컨텍스트를 사용하려면 context 속성을 사용한다.

// 때는 value context 속성의 값이 모두 / 시작해야 한다.

// /other/UserForm.jsp 출력한다.

<c:url value="/UserForm.jsp" context="/other"/>

 

 

scope var 속성을 이용해서 URL 화면에 출력하지 않고 JSP 영역에 저장할 있다.

c:param 태그를 이용해서 Query String URL 추가한다.

 

// 파라미터 값을 escape한다. 따라서

// UserForm.jsp?name=%EC%A0%95%EB%8C%80%EB%A7%8C 출력한다.

<c:url value="UserForm.jsp">

    <c:param name="name" value="성선임"/>

</c:url>

 

c:param 태그는 c:import! c:redirect 태그에서도 동일한 방법으로 사용한다.

(9)        c:import!

특정 JSP 내용을 화면에 포함해서 출력한다.

 

// UserForm.jsp 내용을 화면에 포함하여 출력한다.

<c:import! url="UserForm.jsp"/>

 

데이터 인코딩에 문제가 있으면 charEncoding 속성을 사용한다.

<c:import! url="UserForm.jsp" charEncoding="UTF-8"/>

 

// context 속성을 이용하면 다른 어플리케이션의 JSP 포함할 있다.

<c:import! url="/UserForm.jsp" charEncoding="UTF-8" context="/other"/>

 

var varReader 속성을 이용하면 내용을 화면에 출력하지 않고 변수에 저장할 있다.

(10)    c:redirect

다른 경로로 이동한다.

 

// 앞에 데이터를 브라우저에 전송하는 코드가 없어야 한다.

<c:redirect url="http://www.naver.com"/>

 

(11)    c:catch

예외를 처리한다.

 

// var 속성 값으로 발생한 예외 객체를 page 영역에 저장한다.

<c:catch var="e">

<%

    if (true) throw new RuntimeException();

%>

</c:catch>

 

<c:out value="${e}"/>

 

6.           참고 자료

           The J2EE 1.3 Tutorial
http://java.sun.com/j2ee/1.3/docs/tutorial/doc/index.html

           The J2EE 1.4 Tutorial
http://java.sun.com/j2ee/1.4/docs/tutorial/doc/index.html

           JSTL in Action

           JSTL 1.0 Specification
http://jcp.org/aboutJava/communityprocess/final/jsr052


+ Recent posts