JSTL(Jsp Standard Tag Library)의 약자로 XML 데이터 처리와 조건문, 반복문 등과 같은 일을 처리하기 위한
JSP 태그 라이브러리를 추가하였으며 JSP페이지 내에서 JAVA코드를 사용하지 않고 로직을 내장하는 방법을 제공한다.
JSTL을 사용하려면 우선 lib파일에
https://tomcat.apache.org/taglibs/standard/
Apache Taglibs - Apache Standard Taglib: JSP[tm] Standard Tag Library (JSTL) implementations
라이브러리를 추가하고 taglib를 임포트해야한다.
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!--c는 core의 줄임말로 정의한 prefix로 태그를 사용할 수 있다. -->>
JSTL Tag
1) c:out
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <!--c는 core의 줄임말로 정의한 prefix로 태그를 사용할 수 있다. -->>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>JSTL</title>
</head>
<body>
<p><a href= "ex5.jsp">[다음]</a></p>
<h2>c:out 태그</h2>
1) <c:out value ="안녕하세요!"/><br> <!-- out은 출력 태그 -->
2) <c:out value ="${null}">반갑습니다.</c:out><br> <!-- 1과 같음 -->
3) <c:out value="안녕하세요!">반갑습니다.</c:out><br> <!-- 같이 사용했을 때 속성 value가 먼저 사용됨 -->
4) <c:out value="${null}"/><br>
<p><a href = "ex5.jsp">[다음]</a></p>
</body>
</html>
c:out태그는 출력 태그로
<c:out value ="안녕하세요!"/> 또는 <c:out value = "${null}">안녕하세요!</c:out>
로 표현할 수 있는데 둘은 같은 표현이다.
하지만 <c:out value="안녕하세요!">반갑습니다.</c:out>을 같이 사용했을 경우
value 값이 먼저 사용되는것을 확인할 수 있다.
2) c:set
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <!--c는 core의 줄임말로 정의한 prefix로 태그를 사용할 수 있다. -->>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>JSTL</title>
</head>
<body>
<p><a href="ex4.jsp">[이전]</a><a href="ex6.jsp">[다음]</a></p>
<h2>c:set태그 </h2> <!-- c:set은 값을 설정하는 태그 -->
<h3>값 설정 방식</h3>
<c:set var = "username1" value = "홍길동"/> <!-- String username1 = "홍길동" 이렇게 쓴 것과 같음 -->
<c:set var = "username2">임꺽정</c:set> <!-- String username2 = "임꺽정" -->
<!--출력 el표현식 -->
1) ${username1}<br>
2) ${username2}<br>
<h3>기본 보관소 - page</h3>
3) ${pageScope.username1}<br>
4) ${requestScope.username1}<br> <!-- request범위에서는 값이 저장되지 않음(Scope범위가 다르기 때문)-->
<h3>보관소 지정 - scope속성</h3>
<c:set var = "username3" scope="request">일지매</c:set>
5) ${pageScope.username3}<br> <!--scope의 범위(저장 범위)가 달라졌기 때문에 출력되지 않음 -->
6) ${requestScope.username3}<br>
<h3>기존의 값 덮어씀</h3>
<% pageContext.setAttribute("username4", "똘이장군"); %>
7) 기존 값 = ${username4}<br>
<c:set var ="username4" value ="주먹대장"/> <!-- 중복되면 덮어쓴 값이 저장됨 -->
8) 덮어쓴 값 = ${username4}<br>
<h3>객체의 프로퍼티(속성) 값 변경</h3>
<!-- 빈 생성 -->
<%!
public class MyMember{
private int no;
private String name;
public int getNo(){
return no;
}
public void setNo(int no){
this.no = no;
}
public String getName(){
return name;
}
public void setName(String name){
this.name =name;
}
}
%>
<%
MyMember member = new MyMember();
member.setNo(100);
member.setName("홍길동");
pageContext.setAttribute("member", member);
%>
9) ${member.name}<br>
<!-- 위에서 만든 빈(bean) 객체에 c:set태그의 target속성을 이용한 정보 저장 -->
<!-- property를 지정하면 setter메소드를 호출함 ex) member.setName("임꺽정") -->
<c:set target="${member}" property="name" value="임꺽정"/>
10) ${member.name}<br>
<p><a href="ex4.jsp">[이전]</a><a href="ex6.jsp">[다음]</a></p>
</body>
</html>
c:set 태그는 단어 뜻 그대로 값을 설정하는 태그이다.
<c:set var ="name" value="홍길동>
은 String name = "홍길동"과 같다.
c:set태그로 설정한 값은 el표현식
${name}으로 출력하면 된다.
또한 scope속성을 이용해 저장되는 범위를 지정할 수 있다.
page - 해당 페이지
request - 하나의 요청을 처리
session - 하나의 브라우저 영역
application - 하나의 웹 어플리케이션 영역
3. c:remove
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <!--c는 core의 줄임말로 정의한 prefix로 태그를 사용할 수 있다. -->>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>JSTL</title>
</head>
<body>
<p><a href="ex5.jsp">[이전]</a><a href="ex7.jsp">[다음]</a></p>
<h2>c:remove 태그</h2>
<h3>보관소에 저장된 값 제거</h3>
<% pageContext.setAttribute("username1", "홍길동"); %>
1) ${username1}<br>
<!-- username1의 값을 제거 -->
<c:remove var = "username1" />
2) ${username1}<br>
<p><a href="ex5.jsp">[이전]</a><a href="ex7.jsp">[다음]</a></p>
</body>
</html>
c:remove 태그는 보관소에 저장된 값을 제거하는 태그이다.
${username1}을 <c:remove var ="username1"/>을 하게되면
보관소에 저장된 값을 제거하여 아무것도 출력되지 않는 것을 확인할 수 있다.
4. c:if
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <!--c는 core의 줄임말로 정의한 prefix로 태그를 사용할 수 있다. -->>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>JSTL</title>
</head>
<body>
<p><a href="ex6.jsp">[이전]</a><a href="ex8.jsp">[다음]</a></p>
<h2>c:if 태그</h2>
<!-- test속성에 조건식 작성하고 참이면 출력 거짓이면 아무것도 안나옴 -->
<!-- 조건식의 결과를 담을 수 있는 변수를 선언할 수 있다. -->
<c:if test = "${10 > 20}" var = "result1" >
1) 10은 20보다 크다.<br>
</c:if>
2) ${result1}<br>
<c:if test = "${10 < 20}" var = "result2">
3) 10은 20보다 작다.<br>
</c:if>
4) ${result2}<br>
<p><a href="ex6.jsp">[이전]</a><a href="ex8.jsp">[다음]</a></p>
</body>
</html>
c:if태그는 분기문이다.
c:if태그는 test속성에 조건식을 작성하고 결과가 참이면 출력을 거짓이면 아무것도 나오지 않는다.
또한 c:if태그는 변수를 하나 선언해서 조건식의 결과를 담을 수 있다.