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도
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> 등 많은 태그들이 있다.