Joswlv

JSP 각종 태그들

2016-09-13
web

1. JSP 액션 태그

액션 설명
<jsp:useBean> 자바 인스턴스를 준비한다. 보관소에서 자바 인스턴스를 꺼내거나, 자바 인스턴스를 새로 만들어 보관소에 저장하는 코드를 생성한다. 자바인스턴스를 자바 빈(Java Bean)이라고 한다.
<jsp:setProperty> 자바빈의 프로퍼티 값을 설정합니다. 자바 객체의 셋터 메서드를 호출하는 코드를 생성한다.
<jsp:getProperty> 자바빈의 프로퍼티 값을 꺼낸다. 자바 객체의 겟터메서드를 호출하는 코드를 생성한다.
<jsp:include> 정적 또는 동적자원을 인클루딩 하는 자바 코드를 생성한다.
<jsp:forward> 현재 페이지의 실행을 멈추고 다른 정적자원이나 동적자원으로 포워딩하는 자바 코드를 생성한다.
<jsp:param> jsp:include, jsp:forward, jsp:params의 자식 태그로 사용할 수 있다. ServletRequest 객체에 매게변수를 추가하는 코드를 생성한다.
<jsp:plugin> Object 또는 Embed HTML태그를 생성한다.
<jsp:element> 임의의 xml태그나 html태그를 생성한다.

jsp:useBean 문법

<jsp:useBean id = '이름' scope="page|request|session|application"
			class="클래스명" type="타입명" />

사용예

<jsp:useBean id="members"
			scope="request"
			class="java.util.ArrayList"
			type="java.util.ArrayList<spms.vo.Member>"/>
  • id 속성 - 객체이름을 설정한다. 이 이름을 사용하여 보관소로부터 값을 꺼낸다. 또 꺼낸 객체의 참조 변수이름으로 사용한다.
  • scope 속성 - 기존의 객체를 조회하거나 새로 만든 객체를 저장할 보관소를 지정한다.
  • class 속성 - 자바 객체를 생성할 때 사용할 클래스 이름을 지정한다. 클래스 이름은 반드시 패키지 이름을 포함해야하고, 인터페이스 이름은 안된다.
  • type 속성 - 참조 변수를 선언할 때 사용할 타입의 이름입니다. 클래스 이름 또는 인터페이스 이름이 올 수 있다.

이렇게 JSP 액션 태그를 사용하면 자바 언어를 모르는 웹디자이너나 웹 퍼블리셔들과 협업이 쉽다.

2.EL(Expression Language)

콤마, 대괄호를 사용하여 자바 빈의 프로퍼티나 맵, 리스트, 배열의 값을 보다 쉡게 꺼내게 해준다. 또한 스태틱으로 선언된 메서드를 호출 할 수도 있다.

EL표기법

${member.no} 또는 ${member["no"]}

위 표기법을 java 코드로 표현하면 다음과 같다.

Member obj = (Member)pageContext.findAttribute("member");
int val = obj.getNo();

PageContext의 findAttribute()는 다음 순서에 따라 보관소를 뒤져서 객체를 찾고, 없으면 null을 반환한다.

EL 검색순서

JspContext -> servletRequest -> HttpSession -> ServletContext -> null

EL에서 검색 범위 지정

EL도 처럼 네 군데 보관소에서 값을 꺼낼 수 있다. 다만 과 다른 점은 EL로는 객체를 생성할 수 없다는 점이다. EL에서 보관소를 참조할 때의 이름은 다음과 같다.

pageScope -> JspContext

requestScope -> ServletRequest

sessionScope -> HttpSession

applicationScope -> ServletContext

예) ${requestScope.member.no}

EL 기본 객체

객체 설명 코드
pageContext JSP의 PageContext 객체  
servletContext ServletContext 객체 ${pageContext.servletContext.객체명}
session HttpSession 객체 ${pageContext.session.객체명}
requset ServletRequest 객체 ${pageContext.request.객체명}
response ServeltResponse객체  
param 요청 매개변수의 값 조회 ${param.매개변수명}
paramValues 요청 매개변수의 값 배열 조회 ${paramValues.매개변수명}
header HTTP헤더의 값 조회 ${header.헤더명}
headerValues HTTP헤더의 값 배열조회 ${headerValues.헤더명}
cooki 쿠키값 조회 ${cookie.쿠키명}
initParam 컨텍스트초기화 매개변수의 값조회 ${initParam.매개변수명}
pageScope page보관소의 값 조회 ${pageScope.객체명}
requestScope request 보관소의 값 조회 ${requestScope.객체명}
sessionScope session 보관소의 값 조회 ${sessionScope.객체명}
applicationScope application 보관소의 값 조회 ${applicationScope.객체명}

리터럴 표현식

EL 블록에서 사용할 수 있는 값의 문자열, 정수, 부동 소수점, 참거짓, 널이 가능하다.

다음은 EL에서 사용하거나 사용하기로 예약한 키워드이다. JspContext나 ServletRequest, Httpsession, ServletContext 보관소에 객체를 저장할 때, 그 식별자는 EL의 예약 키워드 이름과 같아서는 안된다.

and, or, not, eq, ne, lt, gt, le, ge, true, false, null, instanceof, empty, div, mod

3. JSTL(Jsp Standard Tag Library)

http://jstl.java.net으로 접속하여, 라이브러리를 다운로드 받아 사용한다.

사용할 태그 라이브어리 선언

선언 방법

<%@ taglib uri=”사용할 태그의 라이브러리 URI” prefix=”접두사” %>

<%@ tagli %>은 JSP의 지시자 태그이다. uri속성은 태그 라이브러리의 네임페이스 이름이다.

태그라이브러리 접두사 네임페이스의 URI 식별자
Core c http://java.sun.com/jsp/jstl/core
XML x http://java.sun.com/jsp/jstl/xml
l18N fmt http://java.sun.com/jsp/jstl/fmt
Database sql http://java.sun.com/jsp/jstl/sql
Functions fn http://java.sun.com/jsp/jstl/functions

<c:out> 태그

문법

<c:out value="출력할 값" default="기본값/>
또는
<c:out value="출력할 값">기본값\</c:out>

<c:set> 태그

문법

value 속성을 사용하여 값 설정
<c:set var="변수명" value="값" scope="page|request|session|application"/>
태그 콘텐츠를 사용하여 값 설정
<c:set var="변수명" scope="page|request|session|application"/>값\</c:set>

<c:remove> 태그

문법

value 속성을 사용하여 값 설정
<c:remove var="변수명" scope="page|request|session|application"/>

<c:if> 태그

문법

<c:if teset="조건" var="변수명" scope="page|request|session|application">
콘텐츠
</c:if>
<c:if test="${10 > 20}" var="result1">
10은 20보다 크다.
</c:if>
${result1}

//결과
//false

<c:choose> 태그

문법

<c:choos>
	<c:when test="참거짓 값"></c:when>
	<c:when test="참거짓 값"></c:when>
	....
	<c:otherwise></otherwise>
</c:choose>
<c:set var="userid" value="hong"/>
<c:choose>
  <c:when test="${userid == 'hong'}">
    홍길동님 반갑습니다.
  </c:when>
  <c:when test="${userid == 'leem'}">
    임꺽정님 반갑습니다.
  </c:when>
  <c:when test="${userid == 'admin'}">
    관리자 전용 페이지입니다.
  </c:when>
  <c:otherwise>
    등록되지 않은 사용자입니다.
  </c:otherwise>
</c:choose>

//결과
//홍길동님 반갑습니다.

<c:forEach> 태그

문법

<c:forEach var="변수명" item="목록데이터" begin="시작인덱스" end="종료인덱스">
	콘텐츠
</c:forEach>
<h3>반복문 - 배열</h3>
<% pageContext.setAttribute("nameList", 
  new String[]{"홍길동", "임꺽정", "일지매"}); %>
<ul>
<c:forEach var="name" items="${nameList}">
	<li>${name}</li>	
</c:forEach>
</ul>

<h3>반복문 - 배열의 시작 인덱스와 종료 인덱스 지정</h3>
<% pageContext.setAttribute("nameList2", 
  new String[]{"홍길동", "임꺽정", "일지매", "주먹대장", "똘이장군"}); %>
<ul>
<c:forEach var="name" items="${nameList2}" begin="2" end="3">
	<li>${name}</li>	
</c:forEach>
</ul>

<h3>반복문 - ArrayList 객체</h3>
<% 
ArrayList<String> nameList3 = new ArrayList<String>();
nameList3.add("홍길동");
nameList3.add("임꺽정");
nameList3.add("일지매");
nameList3.add("주먹대장");
nameList3.add("똘이장군");
pageContext.setAttribute("nameList3", nameList3); 
%>
<ul>
<c:forEach var="name" items="${nameList3}">
	<li>${name}</li>	
</c:forEach>
</ul>

<h3>반복문 - 콤마로 구분된 문자열</h3>
<% pageContext.setAttribute("nameList4", "홍길동,임꺽정,일지매,주먹대장,똘이장군"); %>
<ul>
<c:forEach var="name" items="${nameList4}">
	<li>${name}</li>	
</c:forEach>
</ul>

<h3>반복문 - 특정 횟수 만큼 반복</h3>
<ul>
<c:forEach var="no" begin="1" end="6">
	<li><a href="jstl0${no}.jsp">JSTL 예제 ${no}</a></li>	
</c:forEach>
</ul>

<c:forTokens> 태그

문자열을 특정 구분자(delimiter)로 분리하여 반복문을 돌릴 수 있다.

<% pageContext.setAttribute("tokens","v1=20&v2=30&op=+"); %>
<ul>
<c:forTokens var="item" items="${tokens}" delims="&">
	<li>${item}</li>	
</c:forTokens>
</ul>

/*
결과
v1=20
v2=30
op=+
*/

이밖에도 <c:url>, <c:import>, <c:redirection>, <fmt:parseData> 등 많은 태그들이 있다.

Reference


Comments