티스토리 뷰
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 라이브러리 등록 하는 방법
위에 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 과 같은 여러 문자열 처리 함수를 제공 |
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 |