티스토리 뷰

Back-end/Spring

Spring EL & JSTL

이안_ian 2019. 1. 30. 23:26




반응형

EL(Expression Language)

JSP 2.0 버전에서 추가된 것으로 <%=%>, out.print()와 같이 JSP에 쓰이는 Java코드를 간결하게 사용하는 방법으로, 화면에 표현 하고자 하는 코드를 ${value}의 형식으로 표현하여 작성하는 것을 말한다.


문법 : ${value} 내장객체, bean객체, 객체속성 올 수 있음

값 접근 : . 이나 [ ] 접근

예시: <%=request.getParameter("name")%>, ${param.name}, ${param["name"]}, 

.으로 접근시에는 map이나 bean형식 / [ ]는 list,map,배열,bean형식


EL 연산자 기호


EL 내장 객체

객체 명 

설명 

pageScope 

page 영역의 객체에 접근 

requestScope 

request 영역의 객체에 접근 

sessionScope 

session 영역의 객체에 접근 

applicationScope 

application 영역의 객체에 접근 

param 

전달된 파라미터값을 받아올 때 사용 

paramValues 

전달된 파라미터들을 배열로 받아올 때 사용 

header 

사용자의 특정 헤더 정보를 받아올 때 사용 

headerValues

사용자의 헤더 정보를 배열로 받아올 때 사용 

cookie 

${cookie.key명}으로 쿠키값을 조회한다. 

initParam 

초기 파라미터를 조회한다 

pageContext 

pageContext 경로를 조회한다 

*Scope 시리즈는 중복 이름의 객체가 존재할 때 구분하기 위해 사용


사용예)


사용예2)

서블릿에서 데이터를 넘기면 페이지에서 어떻게 받을 수 있나 보자

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 
        request.setAttribute("name""유병승");
        request.setAttribute("age"19);
        request.setAttribute("job""강사");
        request.setAttribute("person"new Person("강길동",29,"남"));
        request.getSession().setAttribute("name""길라임");
        
        ArrayList<String> item = new ArrayList();
        item.add("갑옷");
        item.add("신발");
        item.add("칼");
        item.add("방패");
        
        ArrayList<Person> persons = new ArrayList();
        persons.add(new Person("장나라",21,"여"));
        persons.add(new Person("청하",25,"여"));
        request.setAttribute("persons", persons);
        request.setAttribute("items", item);
        request.getRequestDispatcher("/views/EL/elView.jsp").forward(request, response);
    }
cs


jsp 페이지

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
<body>
 
    <h2>기본 EL을 이용하여 출력하기</h2>
    <h2>request, session 값 출력</h2>
    <h3>저장된 값을 불러와보자</h3>
    <!-- 같은 name인데 request라는 작은 값부터 먼저 불러온다. -->
    이름(request) : ${name}<br>
    <!-- 스코프로 영역을 지정해주면 같은 name이여도 다른 값을 가져온다. -->
    이름(session) : ${sessionScope.name}<br>
    이름(application) : ${applicationScope.name}<br>
    
    나이 : ${age}<br>
    직업 : ${job }<br>
    <h3>객체 값을 불러와보자</h3>
    서버에서 보내준 사람: ${person }<br/>
    <!-- 개터의 접근법과 연관되어있어 개터의 명칭을 분명하게 잘 써줘야한다 -->
    서버에서 보내준 사람 개별 멤버변수 접근: ${person.name }<br/>
    <!-- 값을 불러와서 연산도 가능하다. -->
    서버에서 보내준 사람 개별 멤버변수 접근: ${person.age+15 }<br/>
    <h3>Collection 값을 불러와보자</h3>
    보내준 값: ${items }<br>
    <!-- 리스트는 get으로 불러오는 것 똑같음 -->
    보내준 값: ${items.get(0) }<br>
    보내준 값: ${items.get(1) }<br>
    사람들 : ${persons }<br>
    <!-- 객체도 스코프로 꺼내올 수 있다. -->
    사람들 : ${requestScope.persons.get(0).name }<Br>
 
</body>
cs


결과 창


사용예3)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<!-- 넘길 데이터 폼-->
<body>
    <form action="paramEnd.jsp" method="post">
        제품명 <input type="text" name="pname" placeholder="제품명"><br>
        수량 <input type="number" name="pcount" placeholder="수량"><br>
         옵션1<input type="text" name="option" placeholder="옵션1"><br>
         옵션2<input type="text" name="option" placeholder="옵션2"><br>
        <input type="submit" name="제출"><br>
    </form>
</body>
<!-- 데이터 받을 jsp-->
<body>
<!-- 파라미터로 넘기는건 반드시 명시를 해줘야함 -->
    <h2>주문내역</h2>
    상품명 : ${pname }<br>
    상품명 : ${param.pname }<br>
    상품수 : ${param.pcount }<br>
    <!-- name이 같은 경우에는 values로 받는다 -->
    옵션1 : ${paramValues.option[0] }<br>
    옵션2 : ${paramValues.option[1] }<br>
     
</body>
cs



JSTL (JSP Standard Tag Library)

JSP에서 사용하는 커스텀 태그로, 공통으로 사용하는 코드의 집합을 사용하기 쉽게 태그화하여 표준으로 제공한 것을 말한다.


선언 방식과 사용 예

선언 방식: <%@ taglib prefix="c" uri=" http://java.sun.com/jsp/jstl/core " %>

사용 예 : <c:out value="${'Welcom to javaTpoint'}" />


JSTL 라이브러리 등록 하는 방법

http://tomcat.apache.org/


위에 4개를 다운 받아 lib에 넣어준다


JSTL 태그 종류

태그명 

설명 

Core Tags 

변수와 url, 조건문, 반복문 등의 로직과 관련된 JSTL 문법을 제공

선언: <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

Formatting Tags

메시지 형식이나 숫자, 날짜 형식과 관련된 포맷 방식을 제공

선언: <%@ taglib prefix="fmt" uri=" http://java.sun.com/jsp/jstl/fmt " %>

Function 

trim, substring 과 같은 여러 문자열 처리 함수를 제공
선언: <%@ taglib prefix="fn" uri=" http://java.sun.com/jsp/jstl/functions " %> 


JSTL Core Tags

종류 <c:???>

 태그명

내용 

set 

변수를 만들어서 값을 저장하는 태그 

out 

페이지에 값을 출력하는 태그 

if  

조건문의 if와 비슷, 반드시 test 속성 값으로 비교 

choose 

조건문의 switch문과 비슷, 내부에 <c:when>, <c:otherwise>태그와 같이 쓰임 

forEach 

제어문 for each문와 비슷 반복문 수행하는 태그 

forTokens 

StringTokenizer객체와 비슷 token값을 기준으로 문자열 분할하는 태그 

url  

변수에 url값과 쿼리스트링 값을 저장하고 호출할 수 있게 하는 태그 

redirect 

페이지 재요청하는 태그 


<c:set> 태그

<c:set>은 변수를 선언하고 나서 그 변수에 초기값을 대입하는 기능의 태그로, 자바에서 변수를 선언하는 방법과 비슷하다.


속성 

내용 

var="문자" 

값을 저장할 변수명 

value="값" 

저장할 값, 값은 *표현식, EL도 가능 

target="객체명" 

저장할 객체 대상 

property = "객체 멤버변수명"

저장할 객체의 멤버변수 

scope="범위" 

범위(request, session, application) 


사용법

<c:set>에서의 변수 타입은 별도로 선언하지 않는다.

초기값은 반드시 기술해야 한다.

EL식 안에서 사용할 수 있지만 <% %> 같은 곳에선 사용 불가 

ex) <c:set var="num" value="100"/>

${num}


<% %>에서는 사용이 불가하지만 거기 안에 선언한 변수는 사용가능하다.

ex) <% int num1=10, num2=20; %>

<c:set var="sum" value="<%=num1+num2%>"/>

${sum}


<c:set>태그 scope 속성

scope 속성을 이용하면 page 영역뿐만 아니라 request, session, application 영역에 속성을 저장하는 것이 가능. 디폴트는 page다.

<c:set var="num" value="100" scope="request"/>


<c:set>태그 배열 설정

body 부분에 ","를 이용해서 배열이나 Collection과 같이 여러개의 값을 지정할 수 있다.

<c:set var="array" scope="request">

yellow, blue, pink, red, green

</c:set>


<c:remove>태그 배열 설정

<c:set>을 이용해서 선언한 변수는 page, request, session, application 영역에 속성으로 저장되기 때문에 삭제해야 할 필요가 있다.

이때 사용한다. 예시)

<c:remove var="num1" scope="request">

num1이라는 이름의 속성을 제거하는데 scope를 지정하지 않으면 모든 속성을 제거하고 스코프를 지정하면 해당 범위만 삭제


<c:out>태그

데이터를 출력 할 때 사용하는 태그다.

속성 

내용 

value="값" 

출력할 값을 지정하는 속성 

default="값" 

값이 빈값이면 출력될 값을 지정하는 속성 

escapeXml="false" 

태그 형식의 문자를 태그로 출력하게 만드는 속성 


사용예)

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
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>데이터 출력 및 입력하기</title>
</head>
<body>
 
    <h2>JSTL 출력하기</h2>
    <p>c:out 태그를 이용하여 출력할 수 있다. 속성값으로 value가 있으며, value에 대입된 값을 출력함.<br>
    value에는 " " 리터럴값이 들어갈 수도 있거, EL표현으로 들어갈 수 있음</p>
    <c:out value="안녕 JSTL은 처음이지? 난 core태그야!"/>
    <h1><c:out value="안녕 JSTL은 처음이지? 난 core태그야!"/></h1>
    <c:out value="<h2>이거는 될까??</h2>" escapeXml=""/>
    <c:out value="<h2>이거는 될까??</h2>" escapeXml="true"/>
    <c:out value="<h2>이거는 될까??</h2>" escapeXml="false"/>
    
    
    <c:set var="msg" value="이거 출력해봐~"/>
    <c:out value = "${msg }"/>
    <c:out value = "<h1>${msg }</h1>" escapeXml="false"/>
    
    <h1>출력에 대한 예외처리</h1>
    <c:out value="${yoo }" default="아직 아무것도 넣지 않았음!"/><br>
    <c:set var="yoo" value="유리병"/>
    <c:out value="${yoo }" default="아직 아무것도 넣지 않았음!"/>
    
    <h2>값 대입하기</h2>
    <p>값을 대입하기 위해서는 c:set 태그를 이용함. 속성값은 var, value가 있으며 var는 변수명, value는 값으로 보면됨<br>
    대입값은 리터럴, 객체 상관없음. 자료형을 별도로 명시하지 않음 대입된 값은 EL로 출력함.</p>
    
    <c:set var="name" value="김수현"/>
    <c:out value="${name }"/>
    ${name }
    <!-- 객체 넣기 -->
    <c:set var="p" value='<%= new jstl.model.vo.Person("김지혁",26,"남") %>'/>
    <c:out value="${p.name} ${p.age }"/>
    <%-- ${result } --%>
    <!-- scope영역을 지정하여 저장할 수 있음 -->
    <c:set var="age" value='19' scope="request"/>
    <c:set var="age" value='21' scope="session"/>
    ${age }
    ${sessionScope.age }
    
    <!-- 객체의 매개변수에 값을 저장, 위에 있는 p를 타켓으로 잡고 해당값을 바꿈 -->
    <c:set target="${p}" property="name" value="유병승"/><br>
    <c:out value="${p.name }"/>
    
    <!-- 지우기 -->
    <c:set var="delete" value="지워봐~!"/>
    <c:out value="지우기전 ${delete}"/>
    <c:remove var="delete"/>
    <c:out value="지운 후 ${delete}"/>
    <c:remove var="age" scope="request"/>
    <c:out value="${requestScope.age }" />
    <c:out value="${sessionScope.age }" />
    
</body>
</html>
cs


결과 창



반응형

'Back-end > Spring' 카테고리의 다른 글

Spring STS 설치하기!!  (0) 2019.02.14
MyBatis List와 Map으로 데이터 불러오기  (4) 2019.02.11
Mybatis 데이터 삽입하기  (0) 2019.02.02
Spring JSTL Formatting Tags  (0) 2019.02.01
Spring Action Tag  (0) 2019.01.29
댓글
반응형
최근에 달린 댓글
글 보관함
Total
Today
Yesterday
최근에 올라온 글
«   2024/05   »
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