JSTL core 문법

  • jsp 파일 머리부분에 다음과 같은 페이지 지시자를 써준다.

    1119sp6

<%@ 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>

결과

1119sp2-1

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>

결과

1119sp2-2

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

결과

1119sp2-3

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>

결과

1119sp2-4

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>

© 2018. All rights reserved.

Powered by Hydejack v8.5.2