BoostCource/Back-end

#02. BE - JSTL

칸타탓 2018. 7. 14. 17:29

<2. DB 연결 웹 애플리케이션 - JSTL>

[boostcourse full-stack] http://www.edwith.org/boostcourse-web





* JSTL



프론트 개발자가 JSP를 수정하는데, JSP 안에 자바코드와 HTML코드가 섞여 있다면 수정할 때 굉장히 어려움을 느끼게 될 가능성이 크다.

이런 문제를 해결하기 위해서 등장한 것이 JSTL이다. JSTL을 이용하면 태그형식으로 조건문, 반복문 등을 사용할 수 있다. EL과 연동하면 더욱 강력하게 사용 가능하다. 




JSTL이란?

JSTL(JSP Standard Tag Library)은 JSP 페이지에서 조건문 처리, 반복문 처리 등을 html tag형태로 작성할 수 있게 도와준다.




JSTL을 사용하기

http://tomcat.apache.org/download-taglibs.cgi

위의 사이트에서 3가지 jar파일(Impl, Spec, EL) 다운로드 한 후 WEB-INF/lib/ 폴더에 붙여넣기 한다.






JSTL이 제공하는 태그의 종류







코어 태그







코어 태그: 변수 지원 태그 - set, remove







set, remove의 활용

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
<c:set var="value1" scope="request" value="kang"/>

<!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>

성 : ${value1} <br>

<c:remove var="value1" scope="request"/>

성 : ${value1 }
</body>
</html>


JSTL 사용을 위해서는 JSP에 아래 지시자를 써주어야 한다.

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
<c:set var="value1" scope="request" value="kang"/>




코어태그: 변수 지원 태그 - 프로퍼티(getter, setter), 맵의 처리



=> some이라는 객체가 가진 setPropertyName에 value(여기에선 someValue) 값을 넣으라는 뜻이다.




코어 태그: 흐름제어 태그






if의 활용

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
<%
request.setAttribute("n", 10);
%>

<!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:if test="${n == 0}">
n은 과 0과 같습니다.
</c:if>

<c:if test="${n == 10}">
n은 과 10과 같습니다.
</c:if>
</body>
</html>

request.setAttribute("n", 10); 와 <c:set var"n" scope="request" value="10"/> 는 같은 것




코어 태그: 흐름제어 태그 - choose

(if-else 구문과 유사)


<!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: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:when test="${score >=60 }">
    D학점입니다.
    </c:when>
    <c:otherwise>
    F학점입니다.
    </c:otherwise>            
</c:choose>
</body>
</html>




코어 태그: 흐름제어 태그 - forEach


items에서 꺼내는 것, items에서 꺼내서 var 변수에 담는다.

[]에 있는 것들은 생략이 가능한 것!


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

<!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:forEach items="${list}" var="item">
${item } <br>
</c:forEach>
</body>
</html>

items에는 request scope에 들어있는 값을 꺼내서 넣고 var에는 해당 리스트에서 하나 꺼냈을 때 담을 변수가 들어간다. (item을 출력하는 것)

begin은 index 시작점을 설정하는 것이며 end는 종료 지점이다.





코어 태그: 흐름제어태그 - import


param 태그는 파라미터 이름, 파라미터 값은 쿼리 문자열까지 url에 포함시켜서 실행하고 싶을 때 사용한다. 


<%@ 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="http://localhost:8080/webapp/jstlValue.jsp" 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>
jstlValue.jsp로 URL 설정 (여기에서 읽어들인 값을 화면에 출력시킨다.)
var는 값을 읽어들였을 때 담을 변수이다.




코어 태그: 흐름제어태그 - 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>

주소에 jstlRedirectPage.jsp가 나오는 것이 아닌 실행시킨 곳의 주소가 나온다.





코어 태그: 기타태그 - 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" />
<c:out value="${t}" escapeXml="false" />
</body>
</html>

true로 되어있을 경우 자바스크립트를 실행시키는 것이 아닌 그 문자열이 그대로 출력된다. (태그로 인식하지 않고 문자 자체로 인식하는 것)

false일 경우에는 자바스크립트가 실행된다.






(+) JSTL의 태그는 XML태그 문법을 사용해아하므로 반드시 태그가 닫히거나 '/>'로 끝나야 한다. 




'BoostCource > Back-end' 카테고리의 다른 글

#02. BE - JDBC  (0) 2018.07.17
#02. BE - Maven으로 프로젝트 만들기  (0) 2018.07.15
#02. BE - EL  (0) 2018.07.14
#02. BE - Scope  (0) 2018.07.14
#02. BE - JSP & Servlet  (0) 2018.07.13