EL

jinkyung·2021년 1월 21일
0

JSP

목록 보기
9/20

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;(lt), &gt;(gt),<br> 
				&lt;=(le), &gt;=(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 라이브러리 삭제 후 다시 추가해주면 된다.

0개의 댓글