JSTL core 문법
in Web Dev on Java Spring
jsp 파일 머리부분에 다음과 같은 페이지 지시자를 써준다.
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
- 태그 라이브러리를 꼭! 불러와야지 쓸 수 있다. 만약 라이브러리 설정 안 했다면 JSTL 기본설정편으로 가서 보면서 세팅하시길
- 서버에서 jsp로 데이터를 보내는 방법은 서버에서 JSP로 데이터 전송에 적었다. 혹시 이해 못하신 분들은 가서 보시길…
변수
- 다음과 같이 스코프를 지정해서 변수를 설정할 수 있다.
//변수 할당
<c:set var ="varName" scope="session" value="someValue"/>
<c:set var ="varName" scope="request">hello</c:set>
//스크립트릿으로 표현하면 다음과 같다.
<%request.setAttribute("varName","hello");%>
//변수 삭제
<c:remove var="varName" scope="request"/>
for문 사용하기
forEach - list 타입
컨트롤러 java
@Controller
public class JSTLController {
@RequestMapping("/jstlcore")
public String jstl(Model model) {
List<String> list= new ArrayList<>();
list.add("apple");
list.add("orange");
list.add("pear");
//model에 데이터 담기
model.addAttribute("fruit",list);
return "jstlcore";
}
}
jsp파일
<c:forEach var="f" items="${fruit }">
${f}
</c:forEach>
결과
forEach - map 타입
- 아래와 같은 friend 객체를 vo로 가진다.
@Data
@AllArgsConstructor
public class Friend {
private String name;
private int age;
private String phone;
}
컨트롤러 java
@Controller
public class JSTLController {
@RequestMapping("/jstlcore")
public String jstl(Model model) {
//map은 interface라서 객체를 생성할 수 없다. 그래서 Hashmap으로 instance를 설정해준다.
Map<String, Friend> map = new HashMap<String, Friend>();
map.put("kang",new Friend("쥴리",45,"02-123-4535"));
map.put("kim",new Friend("캘리",75,"031-112-4335"));
map.put("Lee",new Friend("앨리",55,"02-163-4435"));
map.put("choi",new Friend("존리",32,"02-123-4455"));
//model에 데이터 담기
model.addAttribute("map",map);
return "jstlcore";
}
}
jsp 파일
<c:forEach var = "m" items = "${map}">
${m.key} / ${m.value} / ${m.value.name} / ${m.value.age} / ${m.value.phone }<br>
</c:forEach>
결과
forTokens
jsp 파일
<c:forTokens var = "name" items="안녕 , 오늘 , 날씨, 좋아" delims="," varStatus="status">
${name},${status.index },${status.count },${status.first},${status.last}<br>
</c:forTokens>
- varStatus=”status” 추가하면, 다음의 정보를 얻을 수 있다.
- ${status.index} : 현재 데이터의 인덱스 정보
- ${status.count} : 현재 데이터의 인덱스 정보 +1 (?)
- ${status.first} : 첫번째 요소면 true, 아니면 false
- ${status.last} : 마지막 요소면 true, 아니면 false
결과
if문 사용하기
- c:set으로 변수를 선언하고 c:if로 조건절을 사용할 수 있다.
jsp파일
<h2>JSTL 변수 선언 / if 문</h2>
<!--var a 를 set하는 코드-->
<c:set var="a" value="10" />
변수값 출력 : ${a}<br>
<!-- EL 안에 아주 간단한 연산자를 쓸 수 있다. gt lt ge le eq ne로 써도 된다. -->
<c:if test="${a > 10 }"></c:if>
<c:if test="${a gt 9 }">${a}는 9를 초과합니다.</c:if>
결과
Choose when구문 사용하기
<c:set var ="score" value=98/>
<c:choose>
<c:when test="${score>=90}">
A학점 입니다.
</c:when>
<c:when test="${score>=80}">
B학점 입니다.
</c:when>
<c:when test="${score>=70}">
C학점 입니다.
</c:when>
<c:otherwise>
F학점입니다.
</c:otherwise>
</c:choose>
import문 사용하기
- 페이지 지시자에 java.util을 import 해준다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page import="java.util.*" %>
<%
List<String> list = new ArrayList<>();
list.add("hello");
list.add("world");
list.add("!!!");
request.setAttribute("list", list);
%>
- url을 import로 불러들여 읽는다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page import="java.util.*" %>
<c:import url="https://google.com" var="urlValue" scope="request"></c:import>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
읽어들인 값 : ${urlValue}
</body>
</html>
Redirect
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:redirect url="jstlRedirectPage.jsp"></c:redirect>
out
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<c:set var="t" value="<script type='text/javascript'>alert(1);</script>" />
${t}
<c:out value="${t}" escapeXml="true" /> //js처럼 안 읽히고, 문자로 나온다.
<c:out value="${t}" escapeXml="false" /> //js로 읽힌다.
</body>
</html>