티스토리 뷰
Overview
- jsp에는 스크립트의 값을 간결하고 편리하게 사용할 수 있는 표현언어를 사용할 수 있다.
- jsp에는 개발자가 직접 정의한 커스텀 태그라는 것도 사용할 수 있는데, 커스텀 태그들중 많이 사용되는 것들을 모아서 제공하는 JSTL(JSP Standard Tag Library 표준태그 라이브러리)이라는 커스텀 태그가 있다.
1. EL
① EL 표현식
EL은 "$"와 "{}"를 사용하여 값을 표현한다. {}안에는 값으로 표현되는 것만 와야 한다.
ex)
x변수의 값을 출력하고 싶으면 ${x}
배열변수 arr의 1번째 인덱스의 값을 출력하고 싶으면 ${arr[0]} or ${arr['0']}
member변수의 getName()값을 출력하고 싶으면 ${member.name} or ${member['name']}
② EL 기본객체(내장객체)
EL에는 jsp/servlet의 객체(pageContext제외)의 속성값이나 파라미터 값등을 쉽게 표현하기 위해서 기본객체를 제공한다.
* EL(Expression Language)이 제공하는 11개의 기본 객체
기본 객체 | 설 명 |
pageContext | pageContext 객체 참조 |
pageScope | page 영역 참조 |
requestScope | request 영역 참조 |
sessionScope | session 영역 참조 |
applicationScope | application 영역 참조 |
param | 요청 파라미터의 값을 String으로, request.getParameter()의 결과와 동일 |
paramValue | 요청 파라미터의 값을 String[]으로, request.getParameterValues()의 결과와 동일 |
header | 요청 header 정보, request.getHeader()의 결과와 동일 |
headerValues | 요청 header 정보를 배열, request.getHeaders()의 결과와 동일 |
cookie | 쿠키 참조, request.getCookies()결과와 동일 |
initParam | 컨텍스트의 초기화 파라미터, application.getInitParameter(이름)의 결과와 동일하다. |
ex)
${requestScope.data} --> request.getParameter("data");
${sessionScope.id} --> session.getParameter("id");
${applicationScope.address} --> application.getParameter("address");
※ scope는 생략이 가능하다. ${sessionScope.id}를 ${id}라고 표현할 수 있다. 생략하면 작은 영역순으로 찾게 된다.
request에서 id를 찾고, 없으면 session 없으면, application순으로...
③ EL의 연산자
표현식 {}안에서 연산자(수치, 비교, 논리, empty, !empty) 사용이 가능하다.
- 수치연산자 : +, -, *, /(div를 사용해도 된다), %(mod를 사용해도 된다)
- 비교연산자 : ==(eq를 사용해도 된다) , !=(me를 사용해도 된다), <(lt를 사용해도 된다), >(gt를 사용해도 된다), <=(le를 사용해도 된다), >=(ge를 사용해도 된다)
- 논리연산자 : &&(and를 사용해도 된다), ||(or를 사용해도 된다), !(not를 사용해도 된다)
- empty연산자 : 참조값이 null, 문자값이 "", 배열의 길이가 0, 비어있는 List/Set/Map 인경우에는 true를 리턴하고 그외의 경우에는 false를 리턴
ex)
${1+2} --> 3
${"1"+2} --> 3 : "1"을 숫자 1로 변환후 연산
${"일"+2} --> 에러!
${null + 1} --> 1 : null을 숫자 0로 변환후 연산
${3/2} --> 1.5 나누기 연산은 double타입으로 변환뒤 연산
${2==2} --> true
${2!=2} --> false // ${2 ne 2} 도 사용가능
${2>1} --> true
${true && false} --> false // && 대신 and 사용가능
${true || false} --> true // ||대신 or 사용가능
${!false} --> true
${empty x} --> x의 값이 null이면 true
${!empty x} --> x의 값이 null이 아니면 true
2. JSTL
jsp 페이지에 스크립트릿과 표현식, html 코드등이 뒤섞이면 가독성이 낮아지는데, 이때 태그 형태인 el과 jstl이나 커스텀태그를 사용하면 스크립트릿을 사용하는 것보다 가독성을 높일 수 있다.
el같은 경우는 다음과 같이 톰켓라이브러리에 기본적으로 배포되기에 라이브러리를 추가하지 않지만, jstl같은 경우는 따로 라이브러리를 추가해야 한다.
-jstl 라이브러리 다운로드
① jstl 1.1.x 버전
http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/jakarta-taglibs-standard-1.1.2.zip
다운받을 파일의 압축을 풀면 lib폴더 아래 jstl.jar 와 standard.jar파일이 있다. 톰켓 설치폴더 아래 lib폴더에 복사
② jstl 1.2.x 버전(1.2버전부터는 이쪽으로 이사 갔네요 --;)
jstl api(javax.servlet.jsp.jstl-api-1.2.1.jar)와 jstl implementation(javax.servlet.jsp.jstl-1.2.1.jar)을 각각 다운로드 후 톰켓 설치폴더 아래 lib폴더에 복사
* jstl태그
※ core부분 사용 예는 아래의 소스를 참조하고, jstl 각각 태그의 자세한 내용은 이 후 단원에서 설명한다.
3. EL, JSTL 예제
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63 |
package controller;
import java.io.IOException;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import domain.Member;
@WebServlet("/el_action")
public class ELAction extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String requestStr = "reqeust el test";
String sessionStr = "session el test";
String applicationStr ="application el test";
request.setAttribute("r", requestStr);
request.getSession().setAttribute("s", sessionStr);
getServletContext().setAttribute("a", applicationStr);
///////////////////////////////////////////
String[] arr = {"a", "b", "c"};
request.setAttribute("arr", arr);
///////////////////////////////////////////
Member member = new Member();
member.setName("zeroDay");
member.setAge(20);
request.setAttribute("member", member);
////////////////////////////////////////
ArrayList<Member> list = new ArrayList<Member>();
Member m1 = new Member();
m1.setName("zeroDay");
m1.setAge(20);
list.add(m1);
Member m2 = new Member();
m2.setName("ace");
m2.setAge(19);
list.add(m2);
request.setAttribute("list", list);
/////////////////////////////////////
request.getSession().setAttribute("login_id", "admin");
request.getRequestDispatcher("/el_test.jsp").forward(request, response);
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 |
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.ArrayList" %>
<%@ page import="domain.Member" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
</head>
<body>
<c:choose>
<c:when test="${empty login_id}">
로그인 하세요!<br/>
</c:when>
<c:otherwise>
${login_id}님 방가<br/>
</c:otherwise>
</c:choose>
<!--
속성 스코프는 생략가능
값은 request, session, application
순으로 작은 영역부터 찾게됨.
중복되면 더 작은 스코프 값을 가져옴.
-->
- reqeust속성값 : ${r}<br/>
- session속성값 : ${s}<br/>
- application속성값 : ${a}<br/>
<hr>
- reqeust속성(배열)값 : ${arr[0]}<br/>
- reqeust속성(객체)값 : ${member.name}
<hr>
- reqeust속성(list)값 : ${list[0].name}
<hr>
<c:forEach items="${list}" var="m">
${m.name}<br/>
</c:forEach>
</body>
</body>
</html> |
'program' 카테고리의 다른 글
오라클 sequence 정보 (0) | 2014.10.23 |
---|---|
Spring source 배포 및 Tomcat Server 셋팅 (0) | 2014.10.22 |
[34] JSTL core : 변수 설정 태그 <c:set> <c:remove> (0) | 2014.09.04 |
[35] JSTL core : 조건,반복 태그 <c:if> <c:choose> <c:forEach> <c:forTokens> (0) | 2014.09.04 |
eclipse 메모리 및 옵션 설정 (0) | 2014.08.31 |