EL (Expression Language)
1. EL ?
1) JSTL(JSP Standard Tag Library) 1.0 규약에 소개된 내용
2) JSP 2.0 에 처음으로 소개
3) ECMAScript(JavaScript)와 XPath의 개념을 이용해서 설계
4) EL 에서는 "." 와 "[' ']" 는 같다.
session.setAttribute("irum", "John");
String name = (String)session.getAttribute('irum'); --> ${sesseonScope.irum}
${expression} ${sessionScope["irum"]}
5) Null 에 대해 관대하다.
6) 자동 형 변환 객체를 제공한다.
${"10" + 1} --> 11 --> <%= 10 + 1 %>
2. EL 이 제공하는 기능
1) JSP 의 기본객체(내장객체) 중 scope 에 관련된 객체
application, session, request, page
2) 집합 객체(배열, 자바의 컬렉션)에 대한 접근 방법
3) 수치, 관계, 논리 연산자를 제공
4) JavaBean 의 메소드에 접근 가능
5) 그 외에 EL 만이 가지는 객체 접근 가능
3. 표현방법
${expression}
${7} --> 7 --> <%= 7 %>
<%= 10 + 20 + 30 %> --> ${10 + 20 + 30 }
Name : <%= (String)session.getAttribute("irum") %>
Name : ${ sessionScope.irum}, or ${sessionScope["irum"]}
<%! %>, <% %>, <%= %>은 사용할 수 없다.
4. EL 의 내장객체
1) pageScope : javax.servlet.jsp.JspContext 객체
2) requestScope : javax.servlet.http.ServletRequest Map 객체
3) sessionScope : javax.servlet.http.HttpSession Map 객체
4) applicationScope : javax.servlet.ServletContext Map 객체
removeAttribute(key), setAttribute(key, value), getAttribute(key)
${pageScope | requestScope | sessionScope | applicationScope .key }
5) pageContext : javax.servlet.jsp.PageContext 객체
6) param : Map 객체
7) paramValues : Map 객체
8) header : Map 객체
9) headerValues : Map 객체
10) cookie : Map 객체
11) initParam : Map 객체
5. EL literal
1) boolean : true, false
2) 정수형 : 4, -6
3) 실수형 : 3.14, 0.5E10, 3e10
4) String : 'DOG', '고양이'
5) Null : null
6. Operator
1) 산술연산자 : +, -, *, /(div), %(mod),
2) 비교연산자 : ==(eq), !=(ne), <(lt), >(gt), <=(le), >=(ge)
3) 논리연산자 : &&(and), ||(or), !(not)
4) Empty 연산자 : 널 여부 판단, empty <값> 예)${empty param["page"] }
5) 삼항연산자
6) 연산자의 우선 순위
- [ ], .
- ( )
- 단항연산자 : -, not, !, empty
- 이항연산자 : 산술연산자, 비교연산자, 관계연산자, 비트연산자
- 삼항연산자
7. 배열 데이터 처리방법
8. List 계열 데이터 처리방법
9. Map 계열 데이터 처리방법
10. JavaBean 의 static method 호출하는 방법
eldemo.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%--
<%
String str_num1 = request.getParameter("num1");
String str_num2 = request.getParameter("num2");
%>
Value 1 : <%=str_num1 %><br />
Value 2 : <%=str_num2 %><br />
<%
out.print(str_num1 + " + " + str_num2 + " = ");
out.println(Integer.parseInt(str_num1) + Integer.parseInt(str_num2));
%>
--%>
Value 1 : ${ param.num1} <br />
Value 2 : ${ param["num2"]} <br />
${ param.num1} + ${ param["num2"]} = ${ param.num1 + param.num2 }
웹브라우저 http://localhost:8080/0626/eldemo.jsp?num1=5&num2=3
출력:
Value 1 : 5
Value 2 : 3
5 + 3 = 8
---------------------------------
eldemo1.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%-- User-Agent : <%=request.getHeader("User-Agent") --%>
<%--
만일 key 가 영문자, 숫자, $, _ 가 아닌 특수문자일 경우에는
. 연산자를 사용하지 못하고 반드시 [스트링]으로 해야 한다.
--%>
<%-- User-Agent : ${ header.user-agent} --%>
User-Agent : ${ header['user-agent']} <br />
<%-- User's Host : <%= request.getHeader("host") --%>
User's Host : ${ header.host } <br />
<%-- 요청메소드 : <%=request.getMethod() --%>
요청메소드 : ${ pageContext.request.method } <br />
<%-- User's IP : <%= request.getRemoteAddr() %> --%>
User's IP : ${ pageContext.request.remoteAddr } <br />
Session ID : ${ cookie["JSESSIONID"].value}
<%-- Session ID :
<%
Cookie [] array = request.getCookies();
if(array != null){
for(int i = 0 ;i < array.length ; i++){
if(array[i].getName().equals("JSESSIONID")){
out.println(array[i].getValue());
}
}
}
%>
--%>
출력:
User-Agent : Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36
User's Host : localhost:8080
요청메소드 : GET
User's IP : 0:0:0:0:0:0:0:1
Session ID : 73632397B338D3464FDB98FD9B4C91A2
---------------
cookieset.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
Cookie c1 = new Cookie("irum", "Sally");
response.addCookie(c1);
Cookie c2 = new Cookie("gender", "female");
response.addCookie(c2);
Cookie c3 = new Cookie("age", "20");
response.addCookie(c3);
%>
<body>
<h1>Cookie 가 잘 저장됐습니다.</h1>
</body>
cookieget.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<body>
Name : ${ cookie.irum.value } <br />
Gender : ${ cookie["gender"].value } <br />
Age : ${ cookie["age"]["value"] }
</body>
cookieset.jsp 실행후 cookieget.jsp 실행
출력:
Name : Sally
Gender : female
Age : 20
-----------------------------
eldemo2.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="eldemo2.jsp" method="post">
Name : <input type="text" name="username" /><br />
Gender : <input type="radio" name="gender" value="남자" />남자
<input type="radio" name="gender" value="여자" />여자<br />
Hobby : <input type="checkbox" name="hobby" value="등산" />등산<br />
<input type="checkbox" name="hobby" value="낚시" />낚시<br />
<input type="checkbox" name="hobby" value="바둑" />바둑<br />
<input type="checkbox" name="hobby" value="독서" />독서<br />
<input type="checkbox" name="hobby" value="영화감상" />영화감상<br />
Favorite Season : <select name="season">
<option>--선택--</option>
<option value="spring">봄</option>
<option value="summer">여름</option>
<option value="fall">가을</option>
<option value="winter">겨울</option>
</select><br />
Language : <select name="language" multiple size="5">
<option>--선택--</option>
<option value="C-language">C-language</option>
<option value="Java">Java</option>
<option value="C#">C#</option>
<option value="Python">Python</option>
</select><br /><br />
Self : <textarea name="self"></textarea><br />
<input type="submit" value="전송" />
</form>
</body>
</html>
eldemo2.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<% request.setCharacterEncoding("utf-8"); %>
Name : ${param.username}<br />
Gender : ${param["gender"]} <br />
Hobby : ${paramValues.hobby[0]},${paramValues.hobby[1]},${paramValues.hobby[2]},${paramValues.hobby[3]},${paramValues.hobby[4]} <br />
Season : ${param["season"]} <br />
Language : ${paramValues.language[0]},${paramValues.language[1]},${paramValues.language[2]},${paramValues.language[3]},${paramValues.language[4]} <br />
Self : ${param.self} <br />
EL은 루프를 돌릴수 없어 하나하나 다써줘야한다.
----------------------------------
eldemo3.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%--
DBUSER : <%=application.getInitParameter("DBUSER") %> <br />
DBPWD : <%=application.getInitParameter("DBPWD") %> <br />
--%>
DBUSER : ${ initParam.DBUSER} <br />
DBPWD : ${ initParam["DBPWD"]}
--------------------
eldemo4.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
session.setAttribute("username", "조성모");
%>
<body>
Name : <%=(String)session.getAttribute("username") %><br />
Name : ${ sessionScope.username }<br />
Name : ${ sessionScope["username"] }<br />
</body>
출력이 같음.
-------------------
eldemo5.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
\${"10" + 1} : ${"10" + 1} <br />
\${5 lt 10} : ${ 5 lt 10} <br />
${ param.num1} + ${ param.num2 } = ${param.num1+ param.num2}<br />
${ param.num1} - ${ param.num2 } = ${param.num1+ param.num2}<br />
${ param.num1} * ${ param.num2 } = ${param.num1* param.num2}<br />
${ param.num1} / ${ param.num2 } = ${param.num1 div param.num2}<br />
${ param.num1} % ${ param.num2 } = ${param.num1 mod param.num2}<br />
웹브라우저 http://localhost:8080/0626/eldemo5.jsp?num1=5&num2=1 접속.
출력:
${"10" + 1} : 11
${5 lt 10} : true
5 + 1 = 6
5 - 1 = 6
5 * 1 = 5
5 / 1 = 5.0
5 % 1 = 0
----------------
eldemo6.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String [] array = new String[3];
array[0] = "나훈아";
array[1] = "조용필";
array[2] = "설운도";
pageContext.setAttribute("ARRAY", array);
%>
<body>
<h1>가수 목록</h1>
1등 : ${ARRAY[0]} <br />
2등 : ${ARRAY[1]} <br />
3등 : ${ARRAY[2]} <br />
</body>
출력:
가수 목록
1등 : 나훈아
2등 : 조용필
3등 : 설운도
---------------------
eldemo7.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<jsp:directive.page import="java.util.ArrayList" />
<%
ArrayList<String> items = new ArrayList<String>();
items.add("딸기");
items.add("복숭아");
items.add("포도");
items.add("수박");
pageContext.setAttribute("FRUITS", items);
%>
<body>
<h1>6월에 가장 많이 팔린 과일</h1>
1위 : ${ FRUITS[0]} <br />
2위 : ${ FRUITS[1]} <br />
3위 : ${ FRUITS[2]} <br />
4위 : ${ FRUITS[3]} <br />
</body>
출력:
6월에 가장 많이 팔린 과일
1위 : 딸기
2위 : 복숭아
3위 : 포도
4위 : 수박
-------------------------
eldemo8.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<jsp:directive.page import="java.util.HashMap" />
<%
HashMap<String ,String> map = new HashMap<String, String>();
map.put("Marketing", "New York");
map.put("Acconting", "Boston");
map.put("Sales", "Seoul");
map.put("Operation", "Cicago");
pageContext.setAttribute("DNAME", map);
%>
<body>
${ param.TEAM } Team 의 도시는 : ${ DNAME[param.TEAM]}
</body>
http://localhost:8080/0626/eldemo8.jsp?TEAM=Marketing 접속
출력:
Marketing Team 의 도시는 : New York
-------------------------------
eldemo9.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<jsp:directive.page import="kr.javaexpert.libs.Product" />
<%--
<%
Product p = new Product();
p.setName("Pencil");
p.setPrice(1000);
%>
--%>
<jsp:useBean id="p" class="kr.javaexpert.libs.Product" />
<jsp:setProperty name="p" property="name" value="Pencil" />
<jsp:setProperty name="p" property="price" value="1000" />
<%
session.setAttribute("PRODUCT", p);
pageContext.forward("eldemo10.jsp");
%>
kr.javaexpert..libs 패키지 Product.java
package kr.javaexpert.libs;
public class Product {
private String name;
private int price;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
}
eldemo10.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>상품정보</h2>
이름 : ${sessionScope.PRODUCT.name }<br />
가격 : ${sessionScope["PRODUCT"]["price"] }
</body>
</html>
eldemo10.jsp를 실행시키나 eldemo9.jsp를 실행시키나 출력은 아래와 같다.
상품정보
이름 : Pencil
가격 : 1000
--------------------------
함수를 정의한 TLD파일 작성
kr.javaexpert.libs 패키지의 DateEL.java
package kr.javaexpert.libs;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateEL {
private static SimpleDateFormat sdf =
new SimpleDateFormat("YYYY-MM-dd");
public static String getFormat(Date date){
return sdf.format(date);
}
}
WebContent-WEB-INF-tlds폴더의 el-function.tld
<taglib xmlns="http://java.sun.com/xml/ns/javaee" version="2.1">
<description>EL 에서 함수 실행하기</description>
<tlib-version>1.0</tlib-version>
<short-name>el-function</short-name>
<function>
<description>Date 객체에서의 포매팅</description>
<name>dateFormat</name>
<function-class>kr.javaexpert.libs.DateEL</function-class>
<function-signature>java.lang.String getFormat(java.util.Date)</function-signature>
</function>
</taglib>
eldemo.11.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="eltest" uri="/WEB-INF/tlds/el-function.tld" %>
<jsp:directive.page import="java.util.Date" />
<%
Date now = new Date();
request.setAttribute("today", now);
%>
<body>
오늘은 <b>${eltest:dateFormat(today) }</b> 입니다.
</body>
출력:
오늘은 2014-06-26 입니다.
---------------------------
EL 안쓰는 방법
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isELIgnored="false" %>
<%@ taglib prefix="eltest" uri="/WEB-INF/tlds/el-function.tld" %>
<jsp:directive.page import="java.util.Date" />
<%
Date now = new Date();
request.setAttribute("today", now);
%>
<body>
오늘은 <b>${eltest:dateFormat(today) }</b> 입니다.
</body>
여기서 isELIgnored="ture" 로 바꿔줌.
페이지에서 뿐아니라 전체적으로 못 써주게 하려면 web.xml에서
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<el-ignored>true</el-ignored>
</jsp-property-group>
</jsp-config>
위처럼 해주고
안 사용하려는 곳에
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" deferredSyntaxAllowedAsLiteral="true" %>
<%--
DBUSER : <%=application.getInitParameter("DBUSER") %> <br />
DBPWD : <%=application.getInitParameter("DBPWD") %> <br />
--%>
DBUSER : ${ initParam.DBUSER} <br />
DBPWD : ${ initParam["DBPWD"]}
위처럼 deferredSyntaxAllowedAsLiteral="true" 를 써주면 된다.
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
'Java & Oracle' 카테고리의 다른 글
자료실(파일업로드), 게시판(하기전세팅) (0) | 2014.06.30 |
---|---|
JSTL, 메일 보내기, 파일 업로드 (0) | 2014.06.27 |
최종 회원가입, 로그인, 회원정보수정, 탈퇴, 방명록 최종본 (0) | 2014.06.26 |
회원가입, 수정 탈퇴, 게시판까지 (0) | 2014.06.25 |
회원가입 (0) | 2014.06.24 |