Expression Language
:훨씬 더 단순한 표현이 가능하다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>EL(Expression Language)</title>
<style>
body{ font-size:small;}
table{
border:thin solid gray;
border-collapse: collapse;
}
td, th{
border:thin dotted gray;
padding: 2px;
}
th{ background-color: lightgray}
</style>
</head>
<body>
<p><a href="el02.jsp">[다음]</a></p>
<h2> EL - 리터럴 표현식</h2>
<table>
<tr>
<th>데이터형</th>
<th>EL 코드</th>
<th>실행 결과</th>
</tr>
<tr>
<td>문자열</td>
<td>\${"test"}</td>
<td>${"test"}</td>
</tr>
<tr>
<td>정수</td>
<td>\${20}</td>
<td>${20}</td>
</tr>
<tr>
<td>부동소수점</td>
<td>\${3.14}</td>
<td>${3.14}</td>
</tr>
<tr>
<td>boolean</td>
<td>\${true}</td>
<td>${true}</td>
</tr>
<tr>
<td>null 값</td>
<td>\${null}</td>
<td>${null}</td>
</tr>
</table>
<p><a href="el02.jsp">[다음]</a></p>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="spms.vo.Member" %>
<%@ page import="java.util.HashMap" %>
<%@ page import="java.util.Map" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.LinkedList" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>EL - 객체 꺼내기</title>
<style>
body{ font-size:small;}
table{
border:thin solid gray;
border-collapse: collapse;
}
td, th{
border:thin dotted gray;
padding: 2px;
}
th{ background-color: lightgray}
pre{ font-size: 90%;}
</style>
</head>
<body>
<p>
<a href="el01.jsp">[이전]</a>
<a href="el03.jsp">[다음]</a>
</p>
<h2>EL - 값 꺼내기</h2>
<%
// java 객체를 공유공간에 저장하자
/*
applicationScope -> ServletContext
sessionScope -> HttpSession
requestScope -> ServletRequest
pageScope -> JspContext
1) EL 표현
${member.no} or ${member["no"]}
2) EL을 java로 변환
Member member =
(Member)pageContext.findAttribute("member");
int value = member.getNo();
3) EL이 공유 공간을 탐색하는 순서 ( 같은 변수를 가질 때 jspContext부터 탐색 )
JspContext -> ServletRequest -> HttpSession
-> ServletContext -> null
*/
//서블릿에서 이렇게 저장했을 때 jsp에서는 어떻게 꺼낼 것이냐?를 설명하기 위한 코드이다.
// 테스트를 위한 데이터 객체를 공유공간에 저장하자
session.setAttribute("scores",
new int[]{90,80,70,100});
List<String> nameList = new LinkedList<String>();
nameList.add("홍길동");
nameList.add("임꺽정");
nameList.add("장길산");
session.setAttribute("nameList", nameList);
Map<String,String> map = new HashMap<String,String>();
map.put("s01", "홍길동");
map.put("s02", "임꺽정");
map.put("s03", "장길산");
session.setAttribute("map", map);
session.setAttribute("member",
new Member()
.setNo(100)
.setName("홍길동")
.setEmail("hong@test.com"));
%>
<table>
<tr>
<th>대상</th>
<th>EL 코드</th>
<th>설명</th>
</tr>
<tr>
<td>배열</td>
<td>\${myArray[1]}</td>
<td>배열에서 해당 인덱스 값을 꺼낸다.<br>
<pre>
[자바 코드]
pageContext.setAttribute("scores", new int[]{90,80,70,100});
[실행 결과]
\${scores[2]} = ${scores[2]}
</pre>
</td>
</tr>
<tr>
<td>리스트</td>
<td>\${myList[2]}</td>
<td>List 객체에서 인덱스로 지정된 항목 값을 꺼낸다
<pre>
[자바 코드]
List<String> nameList = new LinkedList<String>();
nameList.add("홍길동");
nameList.add("임꺽정");
nameList.add("장길산");
pageContext.setAttribute("nameList", nameList);
[실행 결과]
\${nameList[1]} = ${nameList[1]}
</pre>
</td>
</tr>
<tr>
<td>맵</td>
<td>\${myMap.keyName}</td>
<td>Map 객체에서 키에 해당하는 값을 꺼낸다.
<pre>
[자바 코드]
Map<String,String> map = new HashMap<String,String>();
map.put("s01", "홍길동");
map.put("s02", "임꺽정");
map.put("s03", "장길산");
pageContext.setAttribute("map", map);
[실행 결과]
\${map.s02} = ${map.s02}
<%-- \${map.s02} = 임꺽정 --%>
</pre>
</td>
</tr>
<tr>
<td>자바Bean</td>
<td>\${myObj.propName}</td>
<td>자바 객체에서 프로퍼티의 값을 꺼낸다.
<pre>
[자바 코드]
pageContext.setAttribute("member",
new Member()
.setNo(100)
.setName("홍길동")
.setEmail("hong@test.com"));
[실행 결과]
<!-- getEmail을 의미한다. (setter나 getter의 set,get을 빼고 표현 가능하다. 필드가 아니다!!) -->
\${member.email} = ${member.email}
<%-- ${member.email} = hong@naver.com --%>
</pre>
</td>
</tr>
</table>
<p>
<a href="el01.jsp">[이전]</a>
<a href="el03.jsp">[다음]</a>
</p>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>EL - 연산자</title>
<style>
body{ font-size:small;}
table{
border:thin solid gray;
border-collapse: collapse;
}
td, th{
border:thin dotted gray;
padding: 2px;
}
th{ background-color: lightgray}
pre{ font-size: 90%;}
</style>
</head>
<body>
<p>
<a href="el02.jsp">[이전]</a>
<a href="el04.jsp">[다음]</a>
</p>
<h2>연산자</h2>
<%
pageContext.setAttribute("title", "EL 연산자!");
%>
<table>
<tr>
<td>분류</td>
<td>연산자</td>
<td>EL 코드 = 실행 결과</td>
</tr>
<tr>
<td>산술</td>
<td>+, -, *, /, %</td>
<td>
<pre>
\${10+20} = ${10+20}
\${10-20} = ${10-20}
\${10*20} = ${10*20}
\${10/20} = ${10/20}
\${10%20} = ${10%20}
</pre>
</td>
</tr>
<tr>
<td>논리</td>
<td>and(&&), or(||), not(!)</td>
<td>
<pre>
\${true && false} = ${true && false}
\${true and false} = ${true and false}
\${true || false} = ${true || false}
\${true or false} = ${true or false}
\${!true} = ${!true}
\${not true} = ${not true}
</pre>
</td>
</tr>
<tr>
<td>관계</td>
<td>==(eq), !=(ne), <(lt), >(gt),<br>
<=(le), >=(ge)
</td>
<td>
<pre>
\${10 == 11} = ${10 == 11}
\${10 eq 11} = ${10 eq 11}
\${10 != 11} = ${10 != 11}
<!-- \${10 ne 11} = ${10 ne 11} -->
\${10 < 11} = ${10 < 11}
\${10 lt 11} = ${10 lt 11}
\${10 > 11} = ${10 > 11}
\${10 gt 11} = ${10 gt 11}
\${10 <= 11} = ${10 <= 11}
\${10 le 11} = ${10 le 11}
\${10 >= 11} = ${10 >= 11}
\${10 ge 11} = ${10 ge 11}
</pre>
</td>
</tr>
<tr>
<td>Empty검사</td>
<td>empty</td>
<td>
<pre>
\${empty title} = ${empty title}
\${empty title2} = ${empty title2}
</pre>
</td>
</tr>
<tr>
<td>조건 연산자</td>
<td>조건 ? A : B</td>
<td>
<pre>
\${10 > 20 ? "크다" : "작다"} = ${10 > 20 ? "크다" : "작다"}
</pre>
</td>
</tr>
</table>
<p>
<a href="el02.jsp">[이전]</a>
<a href="el04.jsp">[다음]</a>
</p>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>예약어는 식별자로 사용할 수 없다</title>
<style>
body{ font-size:small;}
table{
border:thin solid gray;
border-collapse: collapse;
}
td, th{
border:thin dotted gray;
padding: 2px;
}
th{ background-color: lightgray}
pre{ font-size: 90%;}
</style>
</head>
<body>
<p><a href="el03.jsp">[이전]</a></p>
<h2>예약된 키워드</h2>
<table>
<tr>
<td>and</td>
<td>or</td>
<td>not</td>
<td>eq</td>
</tr>
<tr>
<td>ne</td>
<td>lt</td>
<td>gt</td>
<td>le</td>
</tr>
<tr>
<td>ge</td>
<td>true</td>
<td>false</td>
<td>null</td>
</tr>
<tr>
<td>instanceof</td>
<td>empty</td>
<td>div</td>
<td>mod</td>
</tr>
</table>
<%
// ne는 예약어 이므로 꺼낼 쓸 수 없다.
//pageContext.setAttribute("ne", "실수!");
pageContext.setAttribute("se", "잘된다!");
%>
${se}
<p><a href="el03.jsp">[이전]</a></p>
</body>
</html>
적용
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<jsp:useBean id="member"
scope="request"
class="spms.vo.Member"/>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원 정보</title>
</head>
<%-- request 영역에서 찾으려면 이렇게 명시적으로 표현해도 된다
${requestScope.member.no}
그냥 쓰면 작은 영역에서부터 찾아 올라간다--%>
<body>
<h1>회원 정보2</h1>
<form action='update' method='post'>
번호: <input type='text' name='no' value='${member.no}' readonly><br>
이름: <input type='text' name='name' value='${member.name}'><br>
이메일: <input type='text' name='email' value='${member.email}'><br>
가입일: ${member.createdDate}<br>
<input type='submit' value='저장'>
<input type='button' value='삭제'
onclick='location.href="delete?no=${member.no}";'>
<input type='button' value='취소' onclick='location.href="list"'>
</form>
</body>
</html>
하지만 el에서는 for문과같은 반복문은 표현할 수 없다.
선생님 프로젝트를 통째로 다운받을 시에 tomcat의 저장경로가 달라서 오류가 난다. 그 때 여기서 tomcat 라이브러리 삭제 후 다시 추가해주면 된다.