ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JSTL Core에 대해서
    백엔드/서블릿&JSP 2021. 1. 15. 17:48

    JSTL 중 Core에 해당하는 태그는 가장 많이 쓰이는 태그들을 모아뒀다.

     

    일반적으로 자바의 fo each, if, switch 등의 기능을 태그만으로 구현 가능하도록 만들었다.

     

    사실 Core에 해당하는 태그는 많긴한데 여기서는 가장 많이 쓰이는

     

    자바의 for each, if, switch에 대응하는 태그 3개만 알아볼 것이다.

     

    <c:forEach>: 자바의 for each

    <c:forEach>태그를 이용하면 편리하게 java의 for each 기능을 이용할 수 있다.

     

    예를 들어서 아래와 같이 리스트를 다른 jsp 페이지로 전달하는 코드가 있다고 생각해보자.

     

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    	<h1> 첫번째 jsp 파일 </h1>
    	<%
    	String list [] = {"list1", "list2", "list3"};
    	request.setAttribute("list", list);
    	%>
    	
    	<%
    	pageContext.forward("NewFile4.jsp");
    	%>
    </body>
    </html>

     

    기존에는 리스트에 있는 요소들을 출력하기 위해선 자바를 이용해야 했다.

     

    하지만 <c:forEach>를 자바 코드 없이도 손쉽게 출력이 가능하다.

     

    아래와 같이 items에 전달된 리스트를 EL로 입력하고 var에 적당한 변수명을 붙이고 출력하면 된다.

     

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    	<h1> JSTL </h1>
    	
    	<c:forEach var="l" items="${list}">  
       	<p> 항목 <c:out value="${l}"/><p>  
    	</c:forEach>
    	
    </body>
    </html>

     

    위 태그를 실행하면 아래와 같은 결과물을 확인할 수 있다.

     

    <c:if>: 자바의 if

    <c:if> 기능을 이용하면 true, false 여부에 따라서 내용의 출력 여부를 결정할 수 있다.

     

    아래와 같이 7이라는 숫자를 다른 jsp로 넘겨주는 코드가 있다고 가정하자.

     

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    	<h1> 첫번째 jsp 파일 </h1>
    	<%
    	request.setAttribute("num", 7);
    	%>
    	
    	<%
    	pageContext.forward("NewFile4.jsp");
    	%>
    </body>
    </html>

     

    아래 코드는 첫번째 jsp로부터 숫자를 전달받는다.

     

    그리고 5보다 작으면 "숫자가 5보다 작습니다", 5보다 크면 "숫자가 5보다 큽니다"를 출력하는 코드다.

     

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
    <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
    
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    	<h1> JSTL </h1>
    	
    	<c:if test="${num > 5}">
    		<p>해당 숫자는 5보다 큽니다. </p>
    	</c:if>
    	
    	<c:if test="${num < 5}">
    		<p>해당 숫자는 5보다 작습니다. </p>
    	</c:if>
    	
    </body>
    </html>

     

    코드를 실행하면 첫번째 jsp 파일을 통해 전달한 숫자가 7이므로 "5보다 큽니다"란 문장이 나올 것이다.

     

     

    예상하던대로 숫자가 나왔다.

     

    <c:if> 태그는 test 속성 안에 조건을 입력하면 해당 조건이 true일 경우 지정해둔 태그를 출력하는 태그다.

     

    <c:choose>, <c:when>, <c:otherwise>: 자바의 switch, else

    일반적으로 자바의 if문을 사용할 때 else를 같이 써주는 경우가 많다.

     

    하지만 JSTL에서 <c:if>는 별도의 else 기능이 없다.

     

    else 기능을 포함해서 가정문을 만들고 싶다면 <c:choose>를 이용해서 구현해야 한다.

     

    사는 지역을 입력해서 전달하고 사는 지역에 따라 다른 메시지가 나오는 코드를 짜보도록 하자.

     

    아래 jsp 파일은 사는 곳을 입력하여 제출하면 두번째 jsp파일로 전달하는 역할을 한다.

     

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    	<h1> 첫번째 jsp 파일 </h1>
    	<form action="NewFile4.jsp" method="get">
    	사는 곳: <input type="text" name="place">
    	<input type="submit">
    	</form>
    </body>
    </html>

     

    아래 코드는 사용자가 사는 곳을 입력했을 때 서울, 인천, 부산일 경우 별도의 메시지가 나오고

     

    그외 지역일 경우 동일한 메시지가 나오도록 <c:choose>를 이용해 코드를 짰다.

     

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    	<h1> JSTL </h1>
    	
    	<c:choose>
    	<c:when test="${param.place=='서울'}"> <p>당신이 사는 곳에는 남산이 있어요</p> </c:when>
    	<c:when test="${param.place=='인천'}"> <p>당신이 사는 곳에는 월미도가 있어요</p> </c:when>
    	<c:when test="${param.place=='부산'}"> <p>당신은 사는 곳에는 해운대가 있어요</p> </c:when>
    	<c:otherwise> <p> 당신은 ${param.place}에 사는군요. 저긴 잘 모르겠네요 </p></c:otherwise>
    	</c:choose>
    	
    </body>
    </html>

     

    만약 위와 같이 서울을 입력하면 아래와 같은 결과가 나온다.

     

     

    다음에는 대전을 입력해서 다른 결과를 얻어보자.

    대전에 대한 결과물은 아래와 같이 나온다.

     

    위와 같이 <c:choose>는 자바의 switch처럼 이용할 수 있다.

     

    그리고 <c:when>은 <c:choose>안에서 switch의 분기문처럼 이용하게 된다.

     

    그리고 <c:otherwise>는 if~else문의 else처럼 이용이 가능하다.

     

Designed by Tistory.