표현 언어는 변수의 값을 출력할 때 사용하는 스크립트 언어이다.
${ 속성 }
JSP 스크립트 선언부,표현식,스크립틀릿에서는 사용할수 없다.
${ param.name }
${ param.["name"] }
${ param.['name'] }
${ header.["user-agent"] } 가능
${ header.user-agent } 에러
${ King.['한글'] } 가능
${ King.한글 } 에러
ImplicitObjMain.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
pageContext.setAttribute("scopeValue", "페이지 영역");
request.setAttribute("scopeValue", "리퀘스트 영역");
session.setAttribute("scopeValue", "세션 영역");
application.setAttribute("scopeValue","애플리케이션 영역");
%>
<html>
<meta charset="UTF-8">
<head><title>표현 언어(EL) - 내장 객체</title></head>
<body>
<h2>ImplicitObjMain 페이지</h2>
<h3>각 영역에 저장된 속성 읽기</h3>
<ul>
<li>페이지 영역 : ${ pageScope.scopeValue }</li>
<li>리퀘스트 영역 : ${ requestScope.scopeValue }</li>
<li>세션 영역 : ${ sessionScope.scopeValue }</li>
<li>애플리케이션 영역 : ${ applicationScope.scopeValue }</li>
</ul>
<h3>영역 지정 없이 속성 읽기</h3>
<ul>
<li>${ scopeValue }</li>
</ul>
<%--<jsp:forward page="ImplicitForwardResult.jsp" />--%>
</body>
</html>
ImplicitForwardResult.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<meta charset="UTF-8">
<head><title>표현 언어(EL) - 내장 객체</title></head>
<body>
<h2>ImplicitForwardResult 페이지</h2>
<h3>각 영역에 저장된 속성 읽기</h3>
<ul>
<li>페이지 영역 : ${ pageScope.scopeValue }</li>
<li>리퀘스트 영역 : ${ requestScope.scopeValue }</li>
<li>세션 영역 : ${ sessionScope.scopeValue }</li>
<li>애플리케이션 영역 : ${ applicationScope.scopeValue }</li>
</ul>
<h3>영역 지정 없이 속성 읽기</h3>
<ul>
<li>${ scopeValue }</li>
</ul>
</body>
</html>
FormSubmit.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<meta charset="UTF-8">
<head><title>표현 언어(EL) - 폼값 처리</title></head>
<body>
<h2>폼값 전송하기</h2>
<form name="frm" method="post" action="FormResult.jsp">
이름 : <input type="text" name="name" /><br />
성별 : <input type="radio" name="gender" value="Man" />남자
<input type="radio" name="gender" value="Woman" />여자<br />
학력 :
<select name="grade">
<option value="ele">초딩</option>
<option value="mid">중딩</option>
<option value="high">고딩</option>
<option value="uni">대딩</option>
</select><br />
관심 사항 :
<input type="checkbox" name="inter" value="pol" />정치
<input type="checkbox" name="inter" value="eco" />경제
<input type="checkbox" name="inter" value="ent" />연예
<input type="checkbox" name="inter" value="spo" />운동<br />
<input type="submit" value="전송하기" />
</form>
</body>
</html>
FormResult.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<meta charset="UTF-8">
<head><title>표현 언어(EL) - 폼값 처리</title></head>
<body>
<h3>EL로 폼값 받기</h3>
<ul>
<li>이름 : ${ param.name }</li>
<li>성별 : ${ param.gender }</li>
<li>학력 : ${ param.grade }</li>
<li>관심사항 : ${ paramValues.inter[0] }
${ paramValues.inter[1] }
${ paramValues.inter[2] }
${ paramValues.inter[3] }</li>
</ul>
</body>
</html>
폼으로는 객체 전송이 불가능하기에 영역을 사용한다.
ObjectParams.jsp
<%@ page import="common.Person"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<meta charset="UTF-8">
<head><title>표현 언어(EL) - 객체 매개변수</title></head>
<body>
<%
request.setAttribute("personObj", new Person("홍길동", 33));
request.setAttribute("stringObj", "나는 문자열");
request.setAttribute("integerObj", new Integer(99));
%>
<jsp:forward page="ObjectResult.jsp">
<jsp:param value="10" name="firstNum" />
<jsp:param value="20" name="secondNum" />
</jsp:forward>
</body>
</html>
ObjectResult.jsp
<%@ page import="common.Person"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<meta charset="UTF-8">
<head><title>표현 언어(EL) - 객체 매개변수</title></head>
<body>
<h2>영역을 통해 전달된 객체 읽기</h2>
<ul>
<li>Person 객체 => 이름 : ${ personObj.name }, 나이 : ${ personObj.age }</li>
<li>String 객체 => ${ requestScope.stringObj }</li>
<li>Integer 객체 => ${ integerObj }</li>
</ul>
<h2>매개변수로 전달된 값 읽기</h2>
<ul>
<li>${ param.firstNum + param['secondNum'] }</li>
<li>${ param.firstNum } + ${param["secondNum"] }</li>
</ul>
</body>
</html>
OtherImplicitObj.jsp
<%@ page import="utils.CookieManager"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
CookieManager.makeCookie(response, "ELCookie", "EL좋아요", 10);
%>
<html>
<meta charset="UTF-8">
<head><title>표현 언어(EL) - 그 외 내장 객체</title></head>
<body>
<h3>쿠키값 읽기</h3>
<li>ELCookie값 : ${ cookie.ELCookie.value }</li>
<h3>HTTP 헤더 읽기</h3>
<ul>
<li>host : ${ header.host }</li>
<li>user-agent : ${ header['user-agent'] }</li>
<li>cookie : ${ header.cookie }</li>
</ul>
<h3>컨텍스트 초기화 매개변수 읽기</h3>
<li>OracleDriver : ${ initParam.OracleDriver }</li>
<h3>컨텍스트 루트 경로 읽기</h3>
<li>${ pageContext.request.contextPath }</li>
</body>
</html>
CollectionUse.jsp
<%@ page import="java.util.HashMap"%>
<%@ page import="java.util.Map"%>
<%@ page import="java.util.List"%>
<%@ page import="java.util.ArrayList"%>
<%@ page import="common.Person"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<meta charset="UTF-8">
<head><title>표현 언어(EL) - 컬렉션</title></head>
<body>
<h2>List 컬렉션</h2>
<%
List<Object> aList = new ArrayList<Object>();
aList.add("청해진");
aList.add(new Person("장보고", 28));
pageContext.setAttribute("Ocean", aList);
%>
<ul>
<li>0번째 요소 : ${ Ocean[0] }</li>
<li>1번째 요소 : ${ Ocean[1].name }, ${ Ocean[1].age }</li>
<li>2번째 요소 : ${ Ocean[2] }<!--출력되지 않음--></li>
</ul>
<h2>Map 컬렉션</h2>
<%
Map<String, String> map = new HashMap<String, String>();
map.put("한글", "훈민정음");
map.put("Eng", "English");
pageContext.setAttribute("King", map);
%>
<ul>
<li>영문 Key : ${ King["Eng"] }, ${ King['Eng'] }, ${ King.Eng }</li>
<li>한글 Key : ${ King["한글"] }, ${ King['한글'] }, \${King.한글 }<!--에러--></li>
</ul>
</body>
</html>
\${King.한글 } "\"를 사용하면 주석처리를 할 수 있다
&{ numberVar = 10 } 할당과 동시에 출력
&{ numberVar = 10;'' } 할당만 되고 출력은 안됨
Operator1.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
// 예시에서 사용할 변수 선언
int num1 = 3;
pageContext.setAttribute("num2", 4);
pageContext.setAttribute("num3", "5");
pageContext.setAttribute("num4", "8");
%>
<html>
<meta charset="UTF-8">
<head><title>표현 언어(EL) - 연산자</title></head>
<body>
<h3>변수 선언 및 할당</h3>
스크립틀릿에서 선언한 변수 : ${ num1 } <br />
page 영역에 저장된 변수 : ${ num2 } <br />
변수 할당 및 즉시 출력 : ${ num1 = 7 } <br />
변수 할당 및 별도 출력 : ${ num2 = 8;'' } => ${ num2 } <br />
num1 = ${ num1 }, num2 = ${ num2 }, num3 = ${ num3 }, num4 = ${ num4 }
<h3>산술 연산자</h3>
num1 + num2 : ${ num1 + num2 } <br />
num1 - num2 : ${ num1 - num2 } <br />
num1 * num2 : ${ num1 * num2 } <br />
num3 / num4 : ${ num3 / num4 } <br />
num3 div num4 : ${ num3 div num4 } <br />
num3 % num4 : ${ num3 % num4 } <br />
num3 mod num4 : ${ num3 mod num4 }
<h3>+ 연산자는 덧셈만 가능</h3>
num1 + "34" : ${ num1 + "34" } <br />
num2 + "이십" : \${num2 + "이십" }<!-- 에러 발생(주석 처리) --> <br />
"삼십" + "사십" : \${"삼십" + "사십" }<!-- 에러 발생(주석 처리) -->
<h3>비교 연산자</h3>
num4 > num3 : ${ num4 gt num3 } <br />
num1 < num3 : ${ num1 lt num3 } <br />
num2 >= num4 : ${ num2 ge num4 } <br />
num1 == num4 : ${ num1 eq num4 }
<h3>논리 연산자</h3>
num3 <= num4 && num3 == num4 : ${ num3 le num4 and num3 eq num4 } <br />
num3 >= num4 || num3 != num4 : ${ num3 ge num4 or num3 ne num4 }
</body>
</html>
${ 조건문 ? "true일 때 " : "false일 때" }
Operator2.jsp
<%@ page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
// 예시에서 사용할 변수 선언
pageContext.setAttribute("num1", 9);
pageContext.setAttribute("num2", "10");
pageContext.setAttribute("nullStr", null);
pageContext.setAttribute("emptyStr", "");
pageContext.setAttribute("lengthZero", new Integer[0]);
pageContext.setAttribute("sizeZero", new ArrayList());
%>
<html>
<meta charset="UTF-8">
<head><title>표현 언어(EL) - 연산자</title></head>
<body>
<h3>empty 연산자</h3>
empty nullStr : ${ empty nullStr } <br />
empty emptyStr : ${ empty emptyStr } <br />
empty lengthZero : ${ empty lengthZero } <br />
empty sizeZero : ${ empty sizeZero }
<h3>삼항 연산자</h3>
num1 gt num2 ? "참" : "거짓" => ${ num1 gt num2 ? "num1이 크다" : "num2가 크다" }
<h3>null 연산</h3>
null + 10 : ${ null + 10 } <br />
nullStr + 10 : ${ nullStr + 10 } <br />
param.noVar > 10 : ${ param.noVar > 10 }
</body>
</html>
MyELClass.java
package el;
public class MyELClass {
// 주민번호를 입력받아 성별을 반환합니다
public String getGender(String jumin) {
String returnStr = "";
int beginIdx = jumin.indexOf("-") + 1;
String genderStr = jumin.substring(beginIdx, beginIdx + 1);
int genderInt = Integer.parseInt(genderStr);
if (genderInt == 1 || genderInt == 3)
returnStr = "남자";
else if (genderInt == 2 || genderInt == 4)
returnStr = "여자";
else
returnStr = "주민번호 오류입니다.";
return returnStr;
}
// 입력받은 문자열이 숫자인지 판별해줍니다.
public static boolean isNumber(String value) {
char[] chArr = value.toCharArray();
for (int i = 0; i < chArr.length; i++) {
if (!(chArr[i] >= '0' && chArr[i] <= '9')) {
return false;
}
}
return true;
}
// 입력받은 정수까지의 구구단을 HTML 테이블로 출력해줍니다.
public static String showGugudan(int limitDan) {
StringBuffer sb = new StringBuffer();
try {
sb.append("<table border='1'>");
for (int i = 2; i <= limitDan; i++) {
sb.append("<tr>");
for (int j = 1; j <= 9; j++) {
sb.append("<td>" + i + "*" + j + "=" + (i * j) + "</td>");
}
sb.append("</tr>");
}
sb.append("</table>");
} catch (Exception e) {
e.printStackTrace();
}
return sb.toString();
}
}
ELCallMethod.jsp
<%@ page import="el.MyELClass"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="mytag" uri="/WEB-INF/MyTagLib.tld" %>
<%
MyELClass myClass = new MyELClass(); // 객체 생성
pageContext.setAttribute("myClass", myClass); // page 영역에 저장
%>
<html>
<head><title>표현 언어(EL) - 메서드 호출</title></head>
<body>
<h3>영역에 저장 후 메서드 호출하기</h3>
001225-3000000 => ${ myClass.getGender("001225-3000000") } <br />
001225-2000000 => ${ myClass.getGender("001225-2000000") }
</body>
</html>
ELCallMethod.jsp
<h3>클래스명을 통해 정적 메서드 호출하기</h3>
${ MyELClass.showGugudan(7) }
MyTagLib.tld
<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.0"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xml="http://www.w3.org/XML/1998/namespace"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd ">
<tlib-version>1.0</tlib-version>
<short-name>mytag</short-name>
<function>
<name>isNumber</name>
<function-class>el.MyELClass</function-class>
<function-signature>boolean isNumber(java.lang.String)</function-signature>
</function>
</taglib>
ELCallMethod.jsp
<h3>TLD 파일 등록 후 정적 메서드 호출하기</h3>
<ul>
<li>mytag:isNumber("100") => ${ mytag:isNumber("100") }</li>
<li>mytag:isNumber("이백") => ${ mytag:isNumber("이백") }</li>
</ul>