티스토리 뷰

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버전부터는 이쪽으로 이사 갔네요 --;)

http://jstl.java.net

jstl api(javax.servlet.jsp.jstl-api-1.2.1.jar)와 jstl implementation(javax.servlet.jsp.jstl-1.2.1.jar)을 각각 다운로드 후 톰켓 설치폴더 아래 lib폴더에 복사

 

 

* jstl태그

설명 taglib 사용
변수, 제어문등의 자바코드를 대체 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
XML 연동 처리 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/xml" %>
국제화 표준화 형식(날짜, 화폐 등) <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/fmt" %>
데이터베이스 연동 sql 처리 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/sql" %>
함수 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/functions" %>

 

※ 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>


※ <c:if> 사용 예)

<c:if test="${gender == 'f'}">
여자 입니다
</c:if>
<c:if test="${gender == 'm'}">
남자 입니다
</c:if>
 
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
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
글 보관함