JSTL [13] 기초

totwo·2024년 8월 16일

JSP/Servlet/JSTL

목록 보기
13/15
post-thumbnail

💠 JSTL

(JSP Standard Tag Library)

  • JSP에서 사용되는 반복, 조건, 데이터관리, 데이터베이스 액세스, 시간, 숫자, 날짜, 문자열 가공등을 사용할 수 있는 표준라이브러리이다. 
  • EL을 사용하여 표현한다.
  • https://tomcat.apache.org/taglibs/

💠 EL

(Expression Language)

표현식

  • JSP의 표현식 <%=, %>와 동일하다
  • 단, 다른점은 EL은 무조건 scope영역 안의 값만 가져올 수 있다.
    - 내장객체 중에 영역을 차지하는 4개(page, request, session, application)에서 사용 가능
  • 태그 안에도 사용할 수 있다.
	 <%
	 	session.setAttribute("id", "chouchou"); 
	 %>
	 ${id}님 환영합니다.	 
	 <%
	 	request.setAttribute("num", "50");
	 %>
	 <br>
     <%-- 태그 안에도 EL을 사용할 수 있다! --%>
	 <hr size="${num}" noshade="noshade"> 
     <%-- noshade : 음영효과 제거--%>

✅ EL 찾는 순서

: page -> request -> session -> application

	<%
		request.setAttribute("name", "익명");
		session.setAttribute("name", "바로핑");
	%> 
    ${name} <%-- request에서 먼저 찾아서 출력 --%>
    <br>
	${sessionScope.name} <%-- session에서만의 name을 출력함 --%>

✅ JSTL 문법

  • /: div
  • * : mod
  • > : gt (greater)
  • < : lt (little)
  • >= : ge
  • <= : le
  • == : eq
  • != : ne
<% session.setAttribute("num", 10); %>
	<h3>산술연산자</h3>
	${num + 5} <br>
	${num - 5} <br>
	${num * 2} <br>
	${num / 2} ${num div 2}<br>
	${num % 3} ${num mod 3}<br>	
	<%-- 삼항연산자도 가능 --%>

	<h3>비교연산자</h3>
	${num > 5} ${num gt 5} <br> 
	${num < 20} ${num lt 20} <br>
	${num >= 10} ${num ge 10} <br>
	${num <= 10} ${num le 10} <br>
	${num == 10} ${num eq 10} <br> <%-- 문자열도 EL에서 '==' 사용가능 --%>
	${num != 11} ${num ne 11} <br>

	<h3>논리연산자</h3>
	${num > 5 && num > 3} ${num > 5 and num > 3} <br>
	${num > 5 || num > 3} ${num > 5 or num > 3} <br>
	${!true} ${not true} <br>

	<h4>empty연산자</h4>
	<%
		session.setAttribute("love", "김슈슈");
	%>
	내가 좋아하는 것 : <%= session.getAttribute("love1") %> <%-- "null"을 출력 --%>
	<br>
	내가 좋아하는 것 : ${love1} <%-- 아무것도 출력되지 않음 --%>
	<br>
	${empty love1} <br> <%-- true --%>
	${empty love} <br> <%-- false --%>	
	${not empty love} <br> <%-- true --%>

⚒ JSTL 설치

https://mvnrepository.com/search?q=jstl

✅ JSTL coretag

  • <c:set /> :  변수 선언
  • <c:remove /> : 변수 제거
  • <c:out /> : 변수 출력 
  • <c:if /> : 조건문, test 속성 사용 필수
  • <c:choose /> : 다중if문, Switch문과 유사
  • <c:when /> : case와 같은 역할, test 속성 사용 필수, [choose 태그 안에서 사용],
  • <c:otherwise /> : default(또는 if문의 else)처럼 사용, [choose 태그 안에서 사용]
  • <c:forEach /> : 반복문
  • <c:catch /> : 예외 처리 
  • <c:forTokens /> : 구분자로 분할하여 반복문 
  • <c:url /> : URL 생성 
  • <c:param /> : 파라미터 추가 
  • <c:import /> : 페이지 첨부  
  • <c:redirect /> : URL 이동 

coretag 사용하려면 jsp에서 taglib 필수 !
prefix를 이용하여 alias 같은 개념으로 별칭을 지정해준다. 보통 'c'로 사용함!
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

1) 변수 만들기

	 <c:set var="name" value="chouchou" scope="session" /> 
	 <%-- default로 page에 저장됨. 
		 scope로 저장하고 싶은 위치를 지정할 수 있음 
     --%> 
     
	 <c:out value="${name}" /> 

JSTL을 사용하여 encode화 하여 JavaScript injection을 막을 수 있다.

2) 조건문 (if)

	<% pageContext.setAttribute("menu", 1); %>
	<%-- test 안에 내용이 true일 때 실행문 실행 --%>
	<c:if test="${menu == 1}">
		1번 메뉴를 드립니다.
	</c:if>
	<c:if test="${menu == 2}">
		2번 메뉴를 드립니다.
	</c:if>

3) 조건문 (choose-when-otherwise)

	<% pageContext.setAttribute("menu", 1); %>
	<c:choose>
		<c:when test="${menu == 1}">
			1번 메뉴를 드립니다.		
		</c:when>
		<c:when test="${munu == 2}">
			2번 메뉴를 드립니다.
		</c:when>
		<%-- otherwise : else처럼 사용 --%>
		<c:otherwise>
			메뉴가 없습니다.
		</c:otherwise>
	</c:choose>

4) 반복문 (forEach)

4-1) 숫자 출력

<%-- 1부터 10까지 반복문 출력 --%>
	<c:forEach var="i" begin="1" end="10" step="1">
		${i}
	</c:forEach>

4-2) list 출력

	<% 
		ArrayList<String> list = new ArrayList<String>();
		list.add("배");
		list.add("귤");
		list.add("체리");
		list.add("딸기");
	
		session.setAttribute("list", list);
	%>
	
	<c:forEach items="${list}" var="vo">
		${vo}	
	</c:forEach>		

4-3) vo 생성하여 ArrayList 출력

➡Java Resources 위치에 MemberVo class 생성해주기

➡constructor와 getter, setter 만들어주기

① 필드가 private로 되어있고,
② getter 메서드가 꼭 생성되어 있어야 EL을 통해 정보를 가져올 수 있다.
③ EL을 통해 가져오려면 필드명과 동일한 이름으로 가져와야 한다. (name, age)

	<%
		ArrayList<MemberVO> memberList = new ArrayList<MemberVO>();
		MemberVO m1 = new MemberVO("학생1", 21);
		MemberVO m2 = new MemberVO("학생2", 22);
		MemberVO m3 = new MemberVO("학생3", 23);
		
		memberList.add(m1);
		memberList.add(m2);
		memberList.add(m3);
		
		session.setAttribute("memberList", memberList);
	%>
	<c:forEach items="${memberList}" var="memberVo">
		${memberVo.name}  (${memberVo.age}) <br>
	</c:forEach>

profile
Hello, World!

0개의 댓글