EL은 Expression Language의 약자로 JSP 스크립트의 표현식을 대신하여 속성 값을 쉽게 출력하도록 고안된 언어이다. EL은 출력 및 반복처리를 태그 기반으로 제공한다. JSTL과 함께하면 더욱 효과적이다. pageScope, requestScope, param, ... 등의 내장객체를 지원한다.
jsp 표현식을 대신해 속성 값을 쉽게 출력하기 위한 언어이다.
${표현식}
<%= %>e대신 위와 같이 나타낼 수 있다.
연산부호 | 연산자 |
---|---|
+ | + |
* | * |
/ | div |
\&\& | and |
or | or |
== | eq |
!= | ne |
< | ge |
> | lt |
<= | ge |
>= | le |
객체명 | 설명 |
---|---|
${pageScope} | 한 페이지내에서만 유효함 |
${reqeustScope} | 요청할때 마다 생성해서 jsp가 응답함 |
${sessionScope} | 세션이 지워지기 전까지 유효함 (보통 30분) |
${applicationScope} | 웹 어플리케이션이 종료될때 까지 유효함 |
${param} | Query String의 이름과 값을 저장하고 있는 map 객체 |
${paramValues} | 같은이름으로 전달되는 질의 문자열의 이름과 값을 저장하고 있는 map 객체 |
${header} | 요청정보 헤더의 정보들을 이름과 값으로 저장하고 있는 map 객체 |
${headerValues} | 요청정보 헤더의 정보들을 이름과 값으로 저장하고 있는 map 객체 |
${cookie} | 요청을 보낸 클라이언트의 쿠키 이름과 값을 저장하고 있는 map 객체 |
${initParam} | 웹 애플리케이션에 지정한 초기 파라미터의 이름과 값을 저장하고 있는 map 객체 |
<%
ArrayList<String> list = new ArrayList();
list.add("불고기 피자");
list.add("쉬림프 피자");
request.setAttribute("list", list);
ArrayList<String> list2 = new ArrayList();
list2 = (ArrayList)request.getAttribute("list");
out.println("jsp로 표현 : "+list2.get(0));
out.println("jsp로 표현 : "+list2.get(1));
%>
<br>
EL로 표현 : ${requestScope.list[0]} ${list["1"]} <br>
EL로 표현하면 JSP보다 간결하게 표현이 가능하다.
JavaServer Pages Standard Tag Library의 약자로 JSP 개발을 단순화하기 위한 표준태그 라이브러리이다. 빠른 개발, 코드 재사용성, JSP의 스크립트릿을 최소화해서 코드의 난독을 해결할 수 있다.
JSLT를 사용하기 위해서는 우선 외부라이브러리 지원받아야한다. 구글링해서 다운로드를 받으면 된다.
<%@ taglib uri ="http://java.sun.com/jsp/jstl/core" prefix="c" %>
다음으로 위에 taglib을 추가해주어야 한다. core 태그말고도 다른 태그들도 존재한다.
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> - 숫자 및 날짜 서식
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> - 함수 관련
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %> - 데이터베이스 관련
<%@ taglib uri="http://java.sun.com/jsp/jstl/xml" %> - xml 관련
<c:set>
: 변수 선언, 할당<c:out>
: 출력<c:remove>
: 변수값 제거<c:if>
: else는 쓸 수 없고 if만 사용가능<c:choose>
, <c:when>
, <c:otherwise>
: if-else 문처럼 사용 가능<c:forEach>
: 반복문<c:forTokens>
: 문자열이나 숫자 등을 delims에 따라 구분해서 반복문처럼 사용 가능<table border="1">
<tr><th>code</th><th>sang</th><th>su</th><th>dan</th></tr>
<%
ArrayList<pack.Test12SangpumDto> list = conndb.getDataAll();
for(pack.Test12SangpumDto s:list) {
%>
<tr>
<td><%= s.getCode() %></td>
<td><%= s.getSang() %></td>
<td><%= s.getSu() %></td>
<td><%= s.getDan() %></td>
</tr>
<%
}
%>
</table>
<hr>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<table border="1">
<tr><th>code</th><th>sang</th><th>su</th><th>dan</th></tr>
<% ArrayList<pack.Test12SangpumDto> list2 = conndb.getDataAll();%>
<c:forEach var="s" items="<%=list2 %>">
<tr>
<td>${s.code}</td>
<td>${s.sang}</td>
<td>${s.su}</td>
<td>${s.dan}</td>
</tr>
</c:forEach>
</table>
<hr>
<%@taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
<c:catch var="err">
<sql:setDataSource var="ds" driver="org.mariadb.jdbc.Driver" url="jdbc:mariadb://localhost:3306/test" user="root" password="seoho123"/>
<sql:query var="rs" dataSource="${ds}">
select * from sangdata where code >= ? and code <= ?
<sql:param value="1"/>
<sql:param value="3"/>
</sql:query>
<table border="1">
<tr><th>code</th><th>sang</th><th>su</th><th>dan</th></tr>
<c:forEach var="r" items="${rs.rows}">
<tr>
<td>${r.code}</td>
<td>${r.sang}</td>
<td>${r.su}</td>
<td>${r.dan}</td>
</tr>
</c:forEach>
</table>
</c:catch>
taglib sql을 이용해서 db의 자료를 읽을 수 있다.
_ 참고 : 처음 해보는 Servlet&JSP 웹 프로그래밍 / https://daesuni.github.io/jstl/_
jstl (o) jslt(x)