JSTL
JSP Standard Tag Lib.
JSP에서 태그를 이용하는 라이브러리 들로 core, sql, 등이 있지만 core를 주로 사용한다.
EL 과 같이 사용하여 코드를 단순화 할수 있다.
Core lib 변수선언, if, for문 등의 제어흐름, url 처리 등의 기능을 갖는 라이브러리.
Tag Lib 선언
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%> //Core Tag lib를 선언
prefix = " c " 는 접두사로, jsp 상에서 core lib를 사용할때 <c>로 호출하겠다는 의미.
JSTL 에서도 request 객체를 통해서 값이 이동하기 때문에,
request.setCharaterEncoding("utf-8"); 엔코딩이 필수이다.
JSTL을 사용해서 태그에서 값을 호출하거나 저장할때
직접 값을 넣는 경우는 value="값" 으로 가능하지만
매개변수를 이용하는 객체일 경우 value="${변수명}" 과 같이 el로 객체에 접근해야 한다.
value일경우만이다, 변수명인 var="변수명" 일경우 EL이 아니여도 된다.
Data 처리
Data 외부(html)로 출력
<c:out value="value"/>
<c:out value="${param.name}"/> parameter에 name으로 저장돼있는 값을 가져와서 출력
(== <% out.print(request.getParameter(name)); %> )
Data 입력
<c:set
var="변수명"
scope="page/request/session/application "
value="값"
property="자바빈 객체나, map 객체값"
target="자바빈 객체나 map 객체명"
/>
or
<c:set var="변수명">값</c:set> 값이 변수명으로 저장
value="" 에는 java의 객체도 저장이 가능하다. (value = " <%= obj %> " )
request(or scope).setAttribute("변수명", "값"); 과 같다.
request scope="request"
setAttribute("변수명", "값") var="변수명" value="값"
<c:set var="no1" value="${10}"/> no1 이라는 변수명에 값 10 저장
<c:out value="${no1}"/> no1이라는 변수의 값을 불러와서 화면을 출력(html 범위로 출력)
그냥 문자면 value="no1" //no1이라는 문자가 출력
객체의 명이면 value= "${no1}"
데이터의 Value가 Map인경우
맵과, 맵안에 값들 저장
<c:set var="${map}" value="<%=new HashMap<String, String>() %>" />
//map이라는 이름의 속성에 HashMap을 넣음
<c:set target="${map}" property="name" value="kim"/>
//map이라는 속성에 name이라는 속성을 찾아서 kim이라는 값을 지정. (name이 key, kim이 맵핑되는 value가 됨)
<c:set target="${map}" property="age" value="10"/>
<c:set target="${map}" property="addr" value="seoul"/>
키값을 각각 name, age, addr로 주고,
맵핑되는 값을 kim, 10, seoul로 저장.
아래와같이 출력이 가능
<c:out value="${map.name}"/>
${map.age}
${map["addr"]}
target속성
<c:set target="${member}" property="age" value="20"/>
member라는 속성(scopre 지정이 없으므로 pageContext)에 인스턴스변수 age에 값 20을 저장
<c:set target="${member}" property="name" value="${requestScope.dto.name}"/>
member라는 속성에 변수name을 찾아서 request에 저장되어 있는 속성 dto의 name이라는 값을 불러와 저장.
If 문 조건문
기본형
<c:if test="조건">
실행문
</c:if>
Choose문 (=switch case 문 )
<c:choose>
<c:when test="조건1">
실행문
</c:when>
<c:when test="조건2">
실행문
</c:when>
<c:when test="조건3">
실행문
</c:when>
<c:otherwise>
실행문
</c:otherwise>
</c:choose>
forEach문 반복문
forEach문은 단순 for문 처럼 동작하기도 하고, items="Collection객체" 를 넣어주면 forEach문으로도 동작한다.
기본형 (단순 for문 형태)
<c:forEach var="i" begin="1" end="10">
실행문 // 실행문 실행시 i가 자동으로 1씩 10까지 증가.
</c:forEach>
begin 시작 index
end 마지막 index
step 증가량
items = "Collection 객체" 사용시
( forEach문 or 향상된 for문 형태, Collection의 모든 요소를 반복 실행, ele는 collection안에 element를 의미한다)
<c:forEach var="ele" items="${collection}">
${ele.key}
${ele.value}
<br>
</c:forEach>
varStatus
varStatus="status" 반복문의 현재 상태를 알려주는 객체 status를 이용함.
${status.index} index번호 출력 0부터
${status.count} 현재 반복횟수를 출력 1부터
${status.first} 현재가 첫번째면 true 리턴
${status.last} 현재가 마지막이면 true 리턴
forTokens
StringTokenizer 처럼 문자열을 일정 기준으로 잘라서 반복문을 실행하는 메서드
forEach와 유사하다. 잘라낸 후 잘라낸 문자를 가지고 반복해서 실행
기본형
<c:forTokens var="token_ele" items="str1;str2;str3" delim=";"> //item을 delim으로 잘라서 향상된 for문 실행
<c:out value="${token_ele}"/> // 잘라낸 items로 실행할 구문
// value를 token_ele 로 주면, tokens에서 잘라낸 요소를 하나씩 가지고 반복 실행한다.
</c:forTokens>
import
페이지를 삽입하는 기능,삽입한 페이지에서 자료를 가져와 현재 페이지에서 사용도 가능.
<jsp:include>와 기능상 동일하다 (지시자 include가 아닌 액션태그와 동일)
var="변수명" 으로 받아올 데이터를 저장하지 않으면 화면에 출력하도록 초기값이 정해져 있다.
(출력을 원하지 않고 데이터를 가지고 작업을 수행하려면 var 로 받아서 사용해야한다. )
기본형
<c:import url="page_url" charEncoding="utf-8" scope="사용범위" var="읽어올 자료 변수명">
<c:param name="name" value="value"> //넘겨줄 parameter
<c:set val="변수명" value="값"> //넘겨줄 객체명과 값
</c:import>
redirect
redirect태그를 이용해 JSP 에서도 response.sendRedirect 와 같이 다른 페이지로 가서 새로운 요청을 하도록 페이지 전환을 해줄수 있다.
( forward의 기능은 JSP에선 거의 사용하지 않는다. forward는 요청을 가지고 여러 컴포넌트를 오가며 작업을 하기 위한 것으로 거의 대부분 servlet, java에서 사용하기 때문이다. )
기본형
<c:redirect url="page_url">
<c:param name="name" value="value"> //넘겨줄 parameter
<c:set val="변수명" value="값"> //넘겨줄 객체명과 값
</c:redirect>
'JSP+Servlet' 카테고리의 다른 글
5.내장객체 session, cookie (0) | 2020.01.09 |
---|---|
6.EL (Expression Language) (0) | 2020.01.08 |
3.JSP (0) | 2020.01.08 |
4.내장객체 Request, Response (0) | 2020.01.08 |
2.Servlet (0) | 2020.01.08 |