Jsp-05.jstl

이현주·2023년 10월 1일
0

JSP

목록 보기
5/11

lombok.jar 필요
hamcrest-core-1.3.jar 필요
taglibs-standard-impl-1.2.5.jar 필요
taglibs-standard-spec-1.2.5.jar 필요

[BlogPost.java]

package ex05_jstl;

import java.time.LocalDate;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@NoArgsConstructor
@AllArgsConstructor
@Data
public class BlogPost {
  private int blogPostNo;
  private String title;
  private int hit;
  private LocalDate createdAt;
}

01_Core

<c:set>

  1. 속성(Attribute)을 저장할 때 사용한다.
  2. binding 영역을 지정할 수 있다. (디폴트는 pageContext에 저장임)
      영역                : 작성방법
      1) pageScope        : page
      2) requestScope     : request
      3) sessionScope     : session
      4) applicationScope : application
  1. 형식
      <c:set var="속성명" value="" scope="binding영역" />

속성 저장하기

  <c:set var="age" value="3"/>  <%-- pageContext.setAttribute("age", 30) --%>
  <c:set var="isAdult" value="${age >= 20}"/>

앞으로 자주 사용할 c:set (contextPath 변수화)

  <c:set var="contextPath" value="${pageContext.request.contextPath}"/>
  <div>${contextPath}</div>

[01_set.jsp]


<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

  <%--
    <c:set> 태그
    1. 속성(Attribute)을 저장할 때 사용한다.
    2. binding 영역을 지정할 수 있다. (디폴트는 pageContext에 저장임)
         영역             : 작성방법
      1) pageScope        : page
      2) requestScope     : request
      3) sessionScope     : session
      4) applicationScope : application
    3. 형식
      <c:set var="속성명" value="" scope="binding영역" />
  --%>

  <%-- 속성 저장하기 --%>
  <c:set var="age" value="3"/>  <%-- pageContext.setAttribute("age", 30) --%>
  <c:set var="isAdult" value="${age >= 20}"/>
  
  <div>나이 : ${age}살</div>
  <div>${isAdult ? "성인" : "미성년자"}</div>

  <%-- 앞으로 자주 사용할 c:set --%>
  <c:set var="contextPath" value="${pageContext.request.contextPath}"/>
  <div>${contextPath}</div>

</body>
</html>


<c:if>

  1. if문이다.
  2. else문이 없다.
  3. 형식
      <c:if test="조건식">
        실행문
      </c:if>

[02_if.jsp]

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

  <%--
    <c:if>
    1. if문이다.
    2. else문이 없다.
    3. 형식
      <c:if test="조건식">
        실행문
      </c:if>
  --%>
  
  <c:set var="age" value="30"/>
  <c:if test="${age >= 20}">
    <div>성인</div>
  </c:if>
  <c:if test="${age < 20}">
    <div>미성년자</div>
  </c:if>
  
  <c:set var="score" value="80"/>
  <c:if test="${score >= 90 and score <= 100}"><c:set var="grade" value="A"/></c:if>
  <c:if test="${score >= 80 and score < 90}"><c:set var="grade" value="B"/></c:if>
  <c:if test="${score >= 70 and score < 80}"><c:set var="grade" value="C"/></c:if>
  <c:if test="${score >= 60 and score < 70}"><c:set var="grade" value="D"/></c:if>
  <c:if test="${score >= 0  and score < 60}"><c:set var="grade" value="F"/></c:if>
  <div>${score}점, ${grade}학점</div>

</body>
</html>


<c:choose>

  1. <c:if> 태그를 대체할 수 있다.
  2. else if, else 문 처리가 가능하다.
  3. 형식
      <c:choose>
        <c:when test="조건식">
          실행문
        </c:when>
        <c:when test="조건식">
          실행문
        </c:when>
        <c:otherwise>
          실행문
        </c:otherwise>
      </c:choose>

[03_choose.jsp]

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

  <%--
    <c:choose>
    1. <c:if> 태그를 대체할 수 있다.
    2. else if, else 문 처리가 가능하다.
    3. 형식
      <c:choose>
        <c:when test="조건식">
          실행문
        </c:when>
        <c:when test="조건식">
          실행문
        </c:when>
        <c:otherwise>
          실행문
        </c:otherwise>
      </c:choose>
  --%>
  
  <c:set var="age" value="15"/>
  <c:choose>
    <c:when test="${age < 8}">
      <c:set var="result" value="미취학아동"/>
    </c:when>
    <c:when test="${age < 14}">
      <c:set var="result" value="초등학생"/>
    </c:when>
    <c:when test="${age < 17}">
      <c:set var="result" value="중학생"/>
    </c:when>
    <c:when test="${age < 20}">
      <c:set var="result" value="고등학생"/>
    </c:when>
    <c:otherwise>
      <c:set var="result" value="성인"/>
    </c:otherwise>
  </c:choose>
  
  <div>${age}살, ${result}</div>
  
</body>
</html>


<c:forEach>

  1. 반복문을 처리한다.
  2. 형식
    1) 일반 for문
        <c:forEach var="속성" begin="시작값" end="종료값" step="증가값">
          ${속성}
        </c:forEach>
    2) 향상 for문
        <c:forEach var="요소" items="배열 or 리스트">
          ${요소}
        </c:forEach>

[04_forEach.jsp]

<%@page import="java.time.LocalDate"%>
<%@page import="ex05_jstl.BlogPost"%>
<%@page import="java.util.Arrays"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

  <%--
    <c:forEach>
    1. 반복문을 처리한다.
    2. 형식
      1) 일반 for문
        <c:forEach var="속성" begin="시작값" end="종료값" step="증가값">
          ${속성}
        </c:forEach>
      2) 향상 for문
        <c:forEach var="요소" items="배열 or 리스트">
          ${요소}
        </c:forEach>
  --%>

  <%-- 1 ~ 5 출력 --%>
  <c:forEach var="n" begin="1" end="5" step="1">
    <div>${n}</div>
  </c:forEach>

  <hr>

  <%-- 5 ~ 1 출력 --%>
  <c:forEach var="n" begin="1" end="5" step="1">
    <div>${6 - n}</div>
  </c:forEach>
  
  <hr>
  
  <%-- <c:forEach> 태그와 배열 --%>
  <%
    String[] seasons = {"봄", "여름", "가을", "겨울"};
    pageContext.setAttribute("seasons", seasons);
  %>
  <c:forEach var="season" items="${seasons}" varStatus="vs">
    <div>인덱스 : ${vs.index}</div>
    <div>요소   : ${season}</div>
  </c:forEach>
  
  <hr>
  
  <%-- <c:forEach> 태그와 리스트 --%>
  <%
    List<String> jobs = Arrays.asList("PM", "기획자", "개발자", "퍼블리셔");
    pageContext.setAttribute("jobs", jobs);
  %>
  <c:forEach var="job" items="${jobs}" varStatus="vs">
    <div>인덱스 : ${vs.index}</div>
    <div>직업 : ${job}</div>
  </c:forEach>
  
  <%-- 임의의 BlogPost 3개를 List에 저장하고 화면에 출력하기 --%>
  <%
    List<BlogPost> list = Arrays.asList(
      new BlogPost(1, "첫 블로그", 10, LocalDate.of(2023, 1, 1)),
      new BlogPost(2, "두 블로그", 15, LocalDate.of(2023, 1, 2)),
      new BlogPost(3, "세 블로그", 20, LocalDate.of(2023, 1, 3))
    );
    pageContext.setAttribute("list", list);
  %>
  <c:forEach var="blogPost" items="${list}">
    <div class="blog">
      <span class="blogPostNo">${blogPost.blogPostNo}</span>
      <span class="title"><a href="">${blogPost.title}</a></span>
      <span class="hit">${blogPost.hit}</span>
      <span class="createdAt">${blogPost.createdAt}</span>
    </div>
  </c:forEach>
  
</body>
</html>


02_fmt

fmt 사용 방법

<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>

[01_datatime.jsp]

<%@page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

  <c:set var="now" value="<%=new Date()%>"/>
  
  <div><fmt:formatDate value="${now}" pattern="yyyy-MM-dd E요일"/></div>
  <div><fmt:formatDate value="${now}" pattern="a h:mm:ss"/></div>
  <div><fmt:formatDate value="${now}" pattern="H:mm:ss"/></div>

</body>
</html>


[02_number.jsp]

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

  <c:set var="n" value="12345.6789"/>
  
  <div><fmt:formatNumber value="${n}" pattern="#,##0"/></div>
  <div><fmt:formatNumber value="${n}" pattern="#,##0.00"/></div>
  
  <div><fmt:formatNumber value="0.5" type="percent"/></div>
  <div><fmt:formatNumber value="${n}" type="currency" currencySymbol="$"/></div>
  <div><fmt:formatNumber value="${n}" type="currency" currencySymbol=""/></div>
  
</body>
</html>


03_fn

fn 사용법

<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>

[NewFile.jsp]

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

  <c:set var="str" value="Hello World" />
  
  <h4>${fn:length(str)}</h4>
  <h4>${fn:substring(str, 0, 5)}</h4>
  <h4>${fn:substringBefore(str, ' ')}</h4>
  <h4>${fn:substringAfter(str, ' ')}</h4>
  <h4>${fn:indexOf(str, ' ')}</h4>
  <h4>${fn:replace(str, ' ', '_')}</h4>

  <c:if test="${fn:startsWith(str, 'H')}">
    <h4>H로 시작한다.</h4>
  </c:if>
  <c:if test="${fn:endsWith(str, 'H')}">
    <h4>H로 끝난다.</h4>
  </c:if>
  <c:if test="${fn:contains(str, 'H')}">
    <h4>H를 포함한다.</h4>
  </c:if>
  <c:if test="${fn:containsIgnoreCase(str, 'h')}">
    <h4>H, h를 포함한다.</h4>
  </c:if>

  <c:set var="words" value="${fn:split(str, ' ')}" />
  <c:forEach var="word" items="${words}">
    <h4>${word}</h4>
  </c:forEach>
  <h4>${fn:join(words, ' ')}</h4>

  <c:set var="str2" value="<script>alert('hahaha')</script>" />
  ${fn:escapeXml(str2)}

</body>
</html>

xml태그 문자 무시

<c:set var="str2" value="<script>alert('hahaha')</script>" />
  ${fn:escapeXml(str2)}

profile
졸려요

0개의 댓글