-
Tue/Feb/11 [Java-JSTL] day29. JSTL 기초Study/2020 국비교육_Java 2020. 2. 11. 09:48
Tue/Feb/11
[Java-JSP] day29.
- JSTL 기초
JSTL 기초
JSTL = JSP Standard Tag Library
Java 코드를 태그 형태로 사용할 수 있도록 재정의해 준 것
초기 setting : 액션태그와 달리 라이브러리 library 필요 → jstl~.jar를 lib 폴더에 복붙
-
javax.servlet.jsp.jstl-1.2.1.jar
-
javax.servlet.jsp.jstl-api-1.2.1.jar
Custom Tag : 개발자가 직접 정의하여 사용하는 태그
- JSTL은 거의 모든 자바 코드를 커스텀 태그로 바꿔 놓음
EL Expression Language 표현언어 : 자바코드를 대신해 다른 EL 사용 - ${ }
ex. <%=age%> → ${age}
getParameter() / getSession() 사용하지 않아도 바로 꺼내서 사용할 수 있음
JSTL은 총 4종의 태그 제공
태그 URI // library의 주소 Prefix
// 자유롭게 지정 가능하나, 일반적인 관행
Core http://java.sun.com/jsp/jstl/core c XML http://java.sun.com/jstl/xml x formating http://java.sun.com/jstl/fmt fmt DB http://java.sun.com/jstl/sql sql 페이지 지시자 taglib 통해 아래와 같이 library 호출; <HTML> 위에서
<%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %>
* eclipse가 uri 오타 못잡아줌 - 오타 주의!
JSTL Core Library - 일반태그
일반
-
<c:out> 출력, print / out
-
<c:out value = "out_value" default = "default_value" escapleXml = "true | false" >
-
escapleXml : html 태그를 그대로 출력할 건지 - compile 된 값을 출력할 건지?
-
boolean type-기본값 FALSE, 게시판에서 자주 사용되는 속성
-
<PRE></PRE>로 대체 가능, 띄어쓰기도 모두 반영
-
true 인 경우 html을 xml로 인식하여 태그가 먹히지 않고 그대로 화면에 노출, 일부 특수문자는 엔티티 코드 entity code 로 변환됨
-
< = < > = > & = & 등
-
-
-
-
<c:set> 변수 지정
-
<jsp:setProperty> 와 유사, 그러나 JSP 액션태그와 달리 <jsp:useBean> 필요 없음, javaBean 외 arrayList 등 다른 객체도 설정 가능
-
기본형식
-
<c:set var="var_name" value = "var_value" scope = "area" /> 몸체가 없는 형태
-
scope = page | request | session | application
-
-
<c:set var="var_name"> var_value </c:set> 몸체가 있는 형태
-
-
property value 생성
-
<c:set target = "target_var_name" property = "property_name" value = "property_value" /> 몸체 없는 형태
-
<c:set target="target_var_name" property = "property_name > property_value </c:set> 몸체 있는 형태
-
-
→ <c:set> 기본 사용법 예제) java Model class 를 통해 변수명 / getter / setter 미리 지정해놔야 함
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import = "com.wjh.jstl_test.InfoModel"%> <%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %> <% InfoModel info = new InfoModel(); %> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>EXE04</title> </head> <body> <c:set var="info" value="<%=info %>" > </c:set> <!-- <c:set var="info" value="<%=new InfoModel() %>" > </c:set> 객체 생성을 여기서 바로 할 수도 있다 --> <c:set target = "${info}" property = "name" value = "TEST" ></c:set> <c:set target = "${info}" property = "age" value = "24"></c:set> 회원이름 : ${info.name } <hr> 나이 : ${info.age } <hr> </body> </html>
-
<c:remove> 지정 변수 삭제
-
<c:remove var = "var_name" />
-
-
<c:catch> 예외 처리
-
<c:catch var = "catch_object" > </c:catch>
-
var = 예외 처리 객체
-
-
<c:catch var="myError"> <% int x = 10/0; %> </c:catch> <c:if test = "${myError != null }"> ${myError.message } </c:if>
조건
-
<c:if> else 문 없음, 참일 때만 사용 가능
-
<c:if test = "contition_statement" > 참일 때 실행할 내용 </c:if>
-
-
<c:choose> else
-
<c:when> else if (){} , choose 가 감싸고 있어야 함
-
<c:otherwise> else {} , choose 가 감싸고 있어야 함
-
<c:set var = "gender" value = "<%=1 %>" > </c:set> <c:choose> <c:when test = "${gender==1 }" > 남자입니다. </c:when> <c:when test="${gender == 2 }"> 여자입니다. </c:when> <c:otherwise> 그 외 ?? </c:otherwise> </c:choose>
URL
-
<c:import> 파일이나 사이트 import
-
<c:url> link
<c:url>
<c:url var = "nameSend" value = "/01_1_el_test.jsp" > <c:param name = "name" value = "free"></c:param> </c:url> <a href = '<c:out value = "${ nameSend }"></c:out>'>URL</a>
→ location.href = '/#.jsp?param=***' 을 보다 깔끔하게 대체할 수 있음
-
<c:redirect> : response.sendRedirect()
-
<c:param> : 위의 import / url / redirect 를 통해 value 전달할 떄
반복
-
<c:forEach> : for ( )
-
<c:forEach items = "var_array_name" var = "var_name" > 작업 내용 </c:forEach>
-
elements를 앞에서부터 하나씩 꺼내서 var 에 대입
-
index 활용불가 ; for ( : ) type
-
-
<c:forEach items = "var_arrya_name" varStatus = "index" > 작업 내용 </c:forEach>
-
elements를 꺼낼 때마다 꺼낸 횟수 count 와 저장 위치 index가 함께 추출됨
-
index 사용 가능 - <c:if> 이용해 index 구간 설정 가능 ; for( ; ; ) type
-
varStatus 주요속성
-
status.current : 현재 element
-
status.index : 0부터 증가
-
status.count : 1부터 증가
-
status.first : 현재 loop가 처음인지 ? true : false;
-
status.last : 현재 loop가 마지막인지? true : false;
-
status.begin : 시작값
-
status.end : 끝값
-
status.step : 증가값
-
-
-
-
<c:forEachToken> : for ( ) 의 일부만 반복
<c:forEach>
<H1> HEADER 라는 개체가 갖고 있는 값들을 불러서 보여준다<br> request.getHeader() 로 가져올 수 있는것 </H1> <h3>header</h3> <c:forEach items = '${header}' var = "h"> <c:out value = "${h}" /><br> </c:forEach> <hr> <H3>header.cookie</H3> <c:out value = "${header.cookie }" /> <hr> <h3>또는 header["cookie"]</h3> <c:out value = '${header["cookie"]}' /> <!-- 이 방식은 for loop 사용 가능한 장점 다만 대부분 DB 사용하면서 변수명을 모두 일치시키기 때문에 쓸일이 거의 없음 -->
<% response.setContentType("text/html;"); String[] abc = { "빨강", "파랑", "노랑" }; %> <hr> <h3>pageScope : scope 속성 값 중 page 범위</h3> <c:forEach items = '${pageScope }' var = "h"> <c:out value = '${h}' /> <br /> </c:forEach> <hr> <h3>colors</h3> <c:set var = "color" value = "<%=abc %>" /> <c:forEach items = '${color }' varStatus = "i"> <c:out value = '${i.count }' />. <c:out value = '${color[i.index] }' /> </c:forEach>
<h2>반복</h2> <h3><c:forEach></h3> <c:forEach var = "one" begin = "1" end = "10"> <c:out value = "${one }" /> </c:forEach> <p> <b>header</b> </p> <c:forEach var = "h" items = "${header}"> <c:out value = '${h.key} : ${h.value }' /><br> </c:forEach>
기타
-
<c:forTokens>
-
String.split() 없이도 문자열 쪼개서 전달 가능
-
<c:forTokens var = "var_name" items = "String" delims = "문자열 쪼갤 구분자" varStatus = "status_name" > 실행할 내용 </c:forTokens>
-
<c:forTokens var = "one" items = "서울|인천,대전,대구,부산,광주,평양" delims="," varStatus = "sts"> <c:out value = "${sts.count }.${one }" /> · </c:forTokens> <hr> <c:forTokens var = "one" items="서울|인천,대전,대구,부산,광주,평양" delims=",|" varStatus = "sts"> <c:out value = "${sts.count }.${one }" /> • </c:forTokens>
* Collection (data 수집) 의 방식
아래 List / Map / Set 은 Interface (Class X)
-
List
-
index가 반드시 존재 - 순서
-
ArrayList
-
-
Map
-
index 대신 key 사용 - 순서X
-
HashMap
-
Cookie
-
Session
-
-
Header
-
header.value / header.key
-
-
-
Set
-
일종의 map 형태
-
중복된 값은 저장 불가
-
순서 X
-
응용 예제)
session에 값 저장
<c:if test = "${!empty hit}"> <c:set var = "hit" value = "${hit+1 }" scope = "session" /> <c:out value = "${hit }" /> 번 리로드 되었습니다. </c:if> <c:if test="${empty hit}"> <c:set var = "hit" value = "1" scope = "session" /> 세션에 값 저장 </c:if> <hr> <a href = "14_session_test.jsp" >reload</a>
파라미터 : <c:out value = "${param.id }" /> <hr> <form method = "post" > <input type = "text" name = "id" > <input type = "submit" /> </form>
<% request.setCharacterEncoding("UTF-8");%> 을 사용한 경우
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <%@ taglib prefix = "fmt" uri = "http://java.sun.com/jstl/fmt" %> <fmt:requestEncoding value = "UTF-8" /> 파라미터 : <c:out value = "${param.id }" /> <hr> <form method = "post" > <input type = "text" name = "id" > <input type = "submit" /> </form>
<fmt:requestEncoding value = "UTF-8" /> 사용한 경우
<form>에 action 값 지정하지 않으면 현재 페이지에 값 전송
접속자의 접속 국가 알아내는 response.getLocale()
접속 국가 변경하는 <fmt:setLocale value="locale" />
<pre> default locale : <%=response.getLocale() %> set locale : ko <fmt:setLocale value = "ko" /> now : <%=response.getLocale() %> set locale : ja <fmt:setLocale value = "ja" /> now : <%=response.getLocale() %> set locale : en <fmt:setLocale value = "en" /> </pre>
<//>'Study > 2020 국비교육_Java' 카테고리의 다른 글
Thu/Feb/13 [Java-JSP] day31. 프로젝트 준비 (0) 2020.02.13 Wed/Feb/12[Java-JSP] day30. JSTL 활용한 검색/페이지 기능 게시판 (ing) (0) 2020.02.12 Mon/Feb/10[Java-JSP] day28.JSP action tag_forward/include (0) 2020.02.10 Wed/Feb/05 [Java] day25. DAO Model 활용 (0) 2020.02.05 Tue/Feb/04 [Java] day24. - JSP (0) 2020.02.04 -