EL [JSP] / JSTL

개미Coder
|2024. 6. 18. 14:57
반응형

1. " {} " : "와 { 사이에 띄어쓰기 절대적으로 조심하기

JSTL내에 기록되는 값(변수) 표현시(EL) 공백띄우지 말것

 

2. JSTL내에 쓰는 변수는 무조건 el표현으로 사용

 

 


 

 

 

EL [ Expression Language ]

 


이 EL언어는 JSP에서만 사용이 가능하다. (HTML 사용불가능)



주석 주의사항

	<!-- HTML 주석 : JSP->서블릿 변환시 그대로 넘어간다 -->
	<%-- JSP 주석  : JSP->서블릿 변환시 안넘어간다
	EL표현방식 : ${ 값 } --%>

 

	<hr>
		EL 산술연산자
	<hr>
	<!-- HTML 주석 : JSP->서블릿 변환시 그대로 넘어간다 -->
	<%-- JSP 주석  : JSP->서블릿 변환시 안넘어간다
	EL표현방식 : ${ 값 } --%>
	\${ 3+2 } => ${ 3+2 } <br>
	\${ 3-2 } => ${ 3-2 } <br>
	\${ 3*2 } => ${ 3*2 } <br>
	\${ 3/2 } => ${ 3/2 } <%-- or \${ 3 div 2 } --%><br>
	\${ 3%2 } => ${ 3%2 } <br>
	
	<hr>
		EL 관계연산자
	<hr>
	\${ 3 > 2 } => ${ 3 > 2 } or ${ 3 gt 2 }<br>   <!-- gt : greater than -->
	\${ 3 >= 2 } => ${ 3 >= 2 } or ${ 3 ge 2 }<br> <!-- ge : greater equal -->
	
	\${ 3 < 2 } => ${ 3 > 2 } or ${ 3 lt 2 }<br>   <!-- lt : less than -->
	\${ 3 <= 2 } => ${ 3 >= 2 } or ${ 3 le 2 }<br> <!-- le : less equal -->
	
	\${ 3 == 2 } => ${ 3 == 2 } or ${ 3 eq 2 }<br> <!-- eq : equal -->
	\${ 3 != 2 } => ${ 3 != 2 } or ${ 3 ne 2 }<br> <!-- ne : not equal -->
	
	<hr>
		EL 3항연산자 : (조건) ? 참값 : 거짓값
	<hr>
	<!-- 참 인경우 : /01_el1.jsp  /01_el1.jsp?msg= -->
	메세지 : ${ (empty param.msg) ? "No Message" : param.msg } <br>
	
	<hr>
		논리연산자
	<hr>
	\${ true && true } => ${ true && true } or ${ true and true } <br>
	\${ true || false } => ${ true || false } or ${ true or false } <br>
	\${ not true } => ${ not true } <br>

 

 

 

 


 

 

 

JSTL [ Expression Language ]

 

 

JSTL(JSP Standard Tag Library)
: 명령을 tag형태로 만든 library

1.core: if/forEach/Choose/set/..
2.fmt : 날짜/숫자(통화)
3.fn :  String관련(substring/length/indexOf/replace)

 

 

JSTL을 사용하려면... Tomcat library안에 확인

 

 

JSP(Java Server Page)
1. EL(Expression Language)
   표현언어
   ${  값(변수/상수/수식)   }

2. JSTL(JSP Standard Tag Library)
   1) 기존설치된 Tomcat내에 존재 -> lib
      C:\apache-tomcat-10.1.24\webapps\examples\WEB-INF\lib <=2개화일 복사
      C:\apache-tomcat-10.1.24\lib <=붙여넣기


   <c:forEach var="n"  items="${  배열/컬렉션  }">
   </c:forEach>

   <c:if  test="${  조건  }">
       명령
   </c:if>

 

 

<!-- JSTL 사용설정 -->
<!-- core library -->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!-- fmt library -->
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!-- fn library -->
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>

 

 

 

- JSTL을 보기전에 먼저 이 형식을 보고 넘어가자.

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%
	// 각 영역에 데이터를 저장(binding)
	//                        key     value
	pageContext.setAttribute("msg", "PageContext에 저장된 변수");
	request.setAttribute("msg", "request에 저장된 변수");
	session.setAttribute("msg", "session에 저장된 변수");
	application.setAttribute("msg", "application에 저장된 변수");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%-- ${ 영역이름.변수 } --%>
<!-- 영역이름을 생략하면 참조순서는
	pageScope > requestScope > sessionScope > applicationScope
  -->
pageScope : ${ msg } <br>
requestScope : ${ sessionScope.msg } <br>
pageScope : ${ pageScope.msg } <br>
sessionScope : ${ sessionScope.msg } <br>
applicationScope : ${ applicationScope.msg } <br>

</body>
</html>

 

 

 

 

- JSTL 본격적인 형식

 

<%@page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<!-- JSTL 사용설정 -->
<!-- core library -->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!-- fmt library -->
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!-- fn library -->
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>

<%
	/*
	
	JSTL(JSP Standard Tag Library)
	: 명령을 tag형태로 만든 library
	
	1.core: if/forEach/Choose/set/..
	2.fmt : 날짜/숫자(통화)
	3.fn :  String관련(substring/length/indexOf/replace)
	
	JSTL을 사용하려면... Tomcat library안에 확인
	
	JSTL내에서 사용되는 변수는 반드시 EL표현식으로 표현하게 되어있다.
	EL표현값 scope영역중에 있어야 한다.
	
	pageScope > requestScope > sessionScope > applicationScope
	
	*/
	
	// 날짜 출력
	Date now = new Date();

	pageContext.setAttribute("now", now);
	
	int money = 1234500000;
	request.setAttribute("money", money);
	
	String str_date = "2024-06-18 16:07:50.001";
	pageContext.setAttribute("str_date", str_date);
	
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%-- 변수 안에 변수명만 적으면 pageContext로 인식을 해버린다. --%>
오늘 날짜 : <%= now %> <br>
오늘 날짜 : <fmt:formatDate value="${ pageScope.now }"/> <br>
오늘 날짜 : <fmt:formatDate pattern="YYYY년 MM월 dd일" value="${ pageScope.now }"/> <br>

오늘 날짜(String) : ${ fn:substring(str_date,0,10) } <br>
오늘 날짜(String) : ${ fn:length(str_date) } <br>

<%-- scope명은 오타나면 오류나기 때문에 안써도 된다. --%>
내가 소유한 현금(원화) : <fmt:formatNumber type="currency" value="${ requestScope.money }"/> <br>
<fmt:setLocale value="ja_jp"/>
내가 소유한 현금(엔화) : <fmt:formatNumber type="currency" value="${ money }"/> <br>
<fmt:setLocale value="en_us"/>
내가 소유한 현금(달러) : <fmt:formatNumber type="currency" value="${ money }"/>
</body>
</html>

 

 

- JSTL에서 조건식 걸기

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!-- JSTL Core -->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<c:forEach var="i" begin="1" end="5" step="1">
	<!-- i 홀수면 red -->
	<c:if test="${ i%2==1 }">
		<font color='red'>${ pageScope.i } : 백 번 Ctrl + Spacebar 써서 코딩하는것보다 블랙코딩 ${ pageScope.i }번 하는게 더 낫다 - 박정환 개발자 0년차</font><br>
	</c:if>
	<!-- i 짝수면 blue -->
	<c:if test="${ i%2==0 }">
		<font color='blue'>${ pageScope.i } : 백 번 Ctrl + Spacebar 써서 코딩하는것보다 블랙코딩 ${ pageScope.i }번 하는게 더 낫다 - 박정환 개발자 0년차</font><br>
	</c:if>
</c:forEach>

</body>
</html>

 

 

- JSTL에서 배열에 대한 반복문 쓰기 (데이터 베이스에서 데이트 가져올 때 주로 많이 사용한다)

<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
	// 배열
	String [] sido_array = {"서울","경기","인천","대전","강원"};
	// 특정영역에 무조건 넣어야한다. request binding
	
	// ArrayList
	List<String> fruit_list = new ArrayList<String> ();
	fruit_list.add("사과");
	fruit_list.add("참외");
	fruit_list.add("수박");
	fruit_list.add("딸기");
	
	request.setAttribute("sido_array", sido_array);
	request.setAttribute("fruit_list", fruit_list);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<hr>
시도목록
<hr>
	<ul>
	<!-- items : 배열/컬렉션/Map -->
	<!-- for(String sido : sido_array) 동일함 -->
	<!-- sido와 같이 임시변수들은 전부 pageScope에 저장이 된다. -->
		<c:forEach var="sido" items="${ requestScope.sido_array }">
			<li>${ pageScope.sido }</li>
		</c:forEach>
	</ul>
	
<hr>
과일목록
<hr>
	<ul>
		<!-- for(String fruit : fruit_list) 동일 -->
		<c:forEach var="fruit" items="${ requestScope.fruit_list }">
			<li>${ fruit }</li>
		</c:forEach>
	</ul>
	
<hr>
과일목록
<hr>
	<ul>
		<!-- for(int i=0; i<fruit; i++) -->
		<!-- varStatus => index(첨자), count(반복횟수) 
		
			 JSTL내에 기록되는 값(변수) 표현시(EL) 공백띄우지 말것
			 JSTL내에 쓰는 변수는 무조건 el표현으로 사용
		-->
		<c:forEach var="fruit" items="${ fruit_list }" varStatus="i">
			<li>${ i.count } : ${ fruit }(${ i.index })</li>
		</c:forEach>
	</ul>
		
</body>
</html>

 

 

1. " {} " : "와 { 사이에 띄어쓰기 절대적으로 조심하기

JSTL내에 기록되는 값(변수) 표현시(EL) 공백띄우지 말것

 

2. JSTL내에 쓰는 변수는 무조건 el표현으로 사용

 

 

 

package vo;

public class PersonVo {
	String name;
	int age;
	String addr;
	
	
	public PersonVo() {
		// TODO Auto-generated constructor stub
	}
	
	public PersonVo(String name, int age, String addr) {
		super();
		this.name = name;
		this.age = age;
		this.addr = addr;
	}
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getAddr() {
		return addr;
	}
	public void setAddr(String addr) {
		this.addr = addr;
	}
	
}
<%@page import="vo.PersonVo"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	PersonVo p = new PersonVo("홍길동",30,"서울 관악 남부순환로");
	pageContext.setAttribute("p", p);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	p.s info
	<hr>
	<!-- 객체내의 속성표현방법 : .(dot)표현법 -->
	<!--  -->
	이름:
	<input type="button" value="${ pageScope.p.name }">님 반갑습니다 <br>
	나이:
	<input type="button" value="${ p.age }">살 <br>
	<!-- square bracket [] -->
	주소: ${ p['addr'] } <br>
	
</body>
</html>

<%@page import="vo.PersonVo"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
	List<PersonVo> p_list = new ArrayList<PersonVo> ();
	p_list.add(new PersonVo("일길동",30,"서울 관악 신림1동"));
	p_list.add(new PersonVo("이길동",31,"서울 관악 신림2동"));
	p_list.add(new PersonVo("삼길동",32,"서울 관악 신림3동"));
	p_list.add(new PersonVo("사길동",33,"서울 관악 신림4동"));
	p_list.add(new PersonVo("오길동",34,"서울 관악 신림5동"));
	
	// request binding
	request.setAttribute("p_list", p_list);
%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<table border="1">
	<!-- table title -->
		<tr>
			<th>순번</th>
			<th>이름</th>
			<th>나이</th>
			<th>주소</th>
		</tr>
	<!-- table data -->
	<!-- for(PersonVo p : p_list) 동일함 -->
	<c:forEach var="p" items="${ p_list }" varStatus="i">
		<tr>
			<td>${ i.count } <%-- or ${ i.index+1 } --%></td>
			<td>${ p.name }</td>
			<td>${ p.age }</td>
			<td>${ p.addr }</td>
		</tr>
	</c:forEach>
	</table>
</body>
</html>

 

반응형