다연이네

[days07] EL(표현 언어) 본문

JSP

[days07] EL(표현 언어)

 다연  2021. 1. 4. 22:05
반응형

  1. Expression Language


  2. 형태가 다른 스크립트 언어 (스크립트 요소 중 하나 - 선언문, 표현식, 스크립트릿)


  3. 표현식보다 간결하고 편리하기 때문에 EL 사용


  4. 톰캣(우리:8.5.60) 버전따라 JSP/Servlet/EL버전 달라진다. (아마 EL 3.0, JSP는 2.3)


  5. EL 선언 형식
      ${el표현식}
      #{el표현식} (기억안해도 됨)


  6. EL 기능
      1) JSP 4가지 Scope 영역 사용
      2) 수치, 관계, 논리 연산자 제공
      3) 자바 클래스 메소드 호출 가능 ***
      4) 쿠키, 기본 객체 사용
      5) 람다식 사용 
      6) 정적 메소드 (static) 호출 가능 ***


  7. EL 표현식에서 사용할 수 있는 자료형과 상수(리터럴)
      1) boolean : true,false ${true}
      2) 정수 : -9, 8 자바의 long 형 ${10}
      3) 실수 : 3.14 자바의 double형 ${3.14}
      4) 문자열 : "홍길동" \'홍길동\' 자바의 String형 ${"홍길동"} 
      5) null 타입 존재 ${null}

 ${true}
 ${10}
 ${3.14}
 ${"홍길동"} 

  8. EL에서 사용할 기본 객체                    JSP 기본 객체  
      1) pageContext                       /        pageContext
      2) key/value [Map 객체]
          pageScope
          requestScope                     /        request .setAttribute()
          sessionScope                     /        session
          applicationScope                /        application
          
      3) param                              /       request .getParameter()
      4) paramValues                     /       request .getParameterValues()
      5) cookie 
      6) initParam                          /       application .getInitParameter()
      7) header                             /       request .getHeader()
      8) headerValues                    /      request .getHeaderValues()

 

 

 

 <%
   session.setAttribute("auth", "admin");
%>
  <a href="ex08_02.jsp?empno=7566&ename=smith">ex08_02.jsp</a>

<body>
<%
//       /jspPro/days07/ex08_02.jsp 
String uri = request.getRequestURI();
%>
uri = <%=uri %><br>
<!-- EL 표현식에서 request 객체 얻어오는 코딩 pageContext.request. -->
EL uri = ${pageContext.request.requestURI }<br>

<!-- ?empno=7566&ename=smith -->
<%
String empno = request.getParameter("empno");
String ename = request.getParameter("ename");
%>
empno = <%=empno %><br>
ename = <%=ename %><br>

EL empno = ${param.empno}<br>
EL ename = ${param.ename}<br>

<%
  String name= (String)session.getAttribute("auth");
%>
auth = <%=name %><br>
EL auth = ${sessionScope.auth}<br>
EL auth = ${sessionScope["auth"]}<br>
EL auth = ${auth}<br>
</body> 

 

 

 

<body>
<%
   //쿠키 쓰기/읽기 -> EL cookie 기본 객체
   Cookie cookie = Cookies.createCookie("user", "admin");
   response.addCookie(cookie);
   
   cookie = Cookies.createCookie("id", "hong");
   response.addCookie(cookie);
   
   cookie = Cookies.createCookie("age", "10");
   response.addCookie(cookie);
     
%>

<a href="ex09_02.jsp">ex09_02.jsp</a>
</body>

 

<%@page import="com.util.Cookies"%>
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<%
   Cookies cookies = new Cookies(request); //Cookies 클래스의 생성자에 request 주러 감

   Cookie cookie = cookies.getCookie("user");
   String user = cookie.getValue();

   String id = cookies.getCookie("id").getValue();
   String age = cookies.getCookie("age").getValue();
%>

user: <%=user%><br>
id: <%=id%> <br>
age: <%=age%> <br>

EL을 사용해 출력

<!-- EL 기본 객체 : cookie 기본 객체 <쿠키이름, Cookie 객체> 맵 -->
<!-- 쿠키.쿠키명하면 쿠키 객체를 돌림 -->

EL user: ${cookie.user.value }<br> 
EL id: ${cookie.id.value }<br>
EL age: ${cookie.age.value } <br>

쿠키 목록 출력하기

<h3>쿠키 목록 출력 : EL+JSTL</h3>
<c:forEach items="${cookie }" var="entry">
  <li>${entry.key } - ${entry.value.value }</li> 
  <!-- getValue()에서 get떼고 value -->
</c:forEach>

 또는 이렇게

<c:forEach items="${cookie }" var="entry">
  <c:set value="${entry.value}" var="cobject"></c:set>
  <li>${entry.key } - ${cobject.value }</li>
</c:forEach>

 

 

 

EL 연산자

 

${null+4 }<br> <!-- 4 (null은 0으로 처리한다) -->
${"3"+4 }<br> <!-- 7 -->
<hr />
${3+4 }<br>  <!-- 7 -->
${3-4 }<br>  <!-- -1 -->
${3*4 }<br>  <!-- 12 -->
${3/4 }<br> <!-- 0.75 -->
${3 div 4 }<br>  <!-- 0.75 -->
${3%4 }<br> <!-- 3 -->
${3 mod 4 }<br> <!-- 3 -->
<!-- 문자열 java 비교 "문자열".equals("비교문자열")  -->
<!-- 객체.compareTo(객체) ==0 
       "문자열".compareTo("비교문자열") ==0 -->
${"문자열"=="비교문자열" }<br>


${3>4 }<br>
${3 gt 4 }<br>
${3<4 }<br>
${3 lt 4 }<br>
${3>=4 }<br>
${3 ge 4 }<br>
${3<=4 }<br>
${3 le 4 }<br>
${3==4 }<br>
${3 eq 4 }<br>
${3!=4 }<br>
${3 ne 4 }<br>

전부 알맞게 출력된다.

${true && true }<br> //true
	${true and true }<br> //true
${true || true }<br> //true
	${true or true }<br> //true
${! true }<br> //false 
	${not true }<br> //false
${empty null }<br> <!-- true -->
${empty ''}<br> <!-- true -->
${empty 배열크기 0}<br> <!-- true -->
${empty 맵         0}<br> <!-- true -->
${empty 컬렉션   0}<br> <!-- true -->

그 외는 모두 false이다 

 

EL 문자열 연결 += EL3.0부터 지원하는 연산자

<%
request.setAttribute("title", "JSP 프로그래밍");
%>
<%-- ${"문자" +"열"+"연결" }<br>  이거 불가--%>
${"문자" +="열"+="연결" }<br>
<!-- EL에서 문자열 연결시 += 사용 -->
${"제목: "+=title }<br>

${1+10; 2+3 }<br> <!-- 5 -->
<!-- ${A; B}  B값만 출력된다-->

 

 

 EL 할당 연산자  (자바의 대입 연산자) = += -=

<%
   request.setAttribute("name", "hong");

   int age = 20;
   request.setAttribute("age", age);
%>

name= <%=request.getAttribute("name") %> <br>
EL name = ${name}<br>

age=${age }<br>
<c:set var="vage" value="${age}"></c:set>
EL age = ${vage};<br>

EL 3.0 num변수에 100 할당과 동시에 출력

<!-- EL 3.0 num변수에 100 할당과 동시에 출력-->
${num=100 }<br>
\${num=100 }<br>  <!-- 이러면 코드 그대로 출력됨 -->
${num }<br> <!-- 출력만 -->

- EL 연산자도 우선 순위가 있다. 
- EL 연산자에 삼항 연산자도 사용 가능하다.

JSP에서 \${expression} 출력 
서버단에서 실행되는 구문이기 때문에 앞에 \를 붙히면 그대로 출력된다.

 

EL에서 객체의 메소드 호출

<%
   ELTest obj = new ELTest();
   request.setAttribute("obj", obj);
%>

${obj.getMessage("hi") }

ELTest 클래스

package days07;

public class ELTest {
	
	//instance 메소드
	public String getMessage(String message) {
		return "메시지 : "+message;
	}
	
	//static 메소드
	public static int getLength(int [] m) {
		return m.length;
	}

}

 

 EL에서 정적(static)메소드 호출

<%
	long price = 12345;
%>
price = <%=price %><br>
price = <%=FormatUtil.number(price, "#,##0") %><br>

FormatUtil 클래스

package days07;
import java.text.DecimalFormat;

public class FormatUtil {
	
	//static 메소드
	public static String number(long number, String pattern) {
		DecimalFormat df = new DecimalFormat(pattern);
		return df.format(number);
	}
}

<%
	long price = 12345;

%>
price = <%=price %><br>
price = <%=FormatUtil.number(price, "#,##0") %><br>
EL price = ${price = 12345}<br> <!-- 스크립트릿과는 다른 변수 -->

 

<%
	long price = 12345;

%>
price = <%=price %><br>
price = <%=FormatUtil.number(price, "#,##0") %><br>
EL price = ${price = 12345}<br>  <!-- 스크립트릿과는 다른 변수 -->

EL price = ${FormatUtil.number(price,"#,##0")}<br> <!-- 바로 윗 줄의 EL이 있기 때문에 출력되는 것 -->

<%
	long price = 12345;

%>
price = <%=price %><br>
price = <%=FormatUtil.number(price, "#,##0") %><br>
EL price = ${FormatUtil.number(price,"#,##0")}<br> 

<%
	long price = 12345;

%>
price = <%=price %><br>
price = <%=FormatUtil.number(price, "#,##0") %><br>

<c:set var="price" value="<%=price %>"></c:set> <!-- 위 작업을 해야 스크립트릿 사용 가능 -->
EL price = ${FormatUtil.number(price,"#,##0")}<br> 

 

JSP 페이지에서 EL 비활성화 시키는 방법

1)  page 지시자 추가  - 해당 파일만

<%@page isELIgnored="true" %>

 

2) web.xml  - days07안의 모든 파일들

<jsp-config>
  <jsp-property-group>
    <url-pattern>/days07/*</url-pattern>
    <el-ignored>true</el-ignored>
  </jsp-property-group>
</jsp-config>

 

반응형
Comments