[[ EL ]] ( Expression Language )
: 화면에 출력 쉽게 도와주는 JSP 전용언어
( HTML 단에서 사용 )
[ isELIgnored ]
<%@ page isELIgnored="false" %> (default)
: 이엘 코드 있으면 무시 = false
- true 로 하면 이엘코드 무시
- EL 은 기본적으로 <% Java 코드 %> 를 타도할 목적을 갖고 있다.
[ 화면출력 ]
${123}
${"문자"}
${true/false} : true 표시
${null} : 공백취급
=> 바로 웹에 출력이 된다.
( == 자바 out.print )
- 단순한 출력은 HTML로 바로 출력하면 되지만, EL 의 강점은 따로 있다.
[ EL 기능 ]
1. 연산 기능 제공
2. 쉬운 get 표현 제공
- request.getParameter ( " id " ) => ${ param.id }
- session.getAttribute ( "key값" ) => ${ (scope.) "key값" }
- m1.getId( ) => ${ m1.id }
자바의 코드들을 간단하게,
자바가 아닌 JSP 코드로 사욯할 수 있게 해준다.
- 여기에 JSTL 을 사용하면,
자바를 사용하지 않고도, 조금 더 자바처럼,
다양한 기능들 ( if 문 반복문 등 ) 을 사용할 수 있는데,
EL ${ } 로, 이 JSTL 값들을 바로 받아서 사용할 수 있다는 것도 강점이다.
[ 연산 ]
- 자바처럼 연산을 가능하게 해주고,
${100 + 100}
=> 200 표시
${ '100' + 100 }
=> 200 표시
( Integer.parseInt 같은 타입변환 자동으로 해준다 )
${ '백' + 100 }
=> NumberFormatException 오류
${ \" 안에서 특수문자표현은 \백슬러쉬 }
- 변수선언
${ j=100 }
${ j } => 100
( 뽑히긴하는데 변수선언 j=100 부분에서도, 변수로 인식을 못하고 100 이 출력된다.
=> 변수선언은 JSTL 을 사용한다. <c:set var = "j" value="100" /> )
[ 자바 메소드 ]
- 자바 => EL 로 변수 넘겨받으면,
String / int 등 타입에 따라
원래 java에서의 메소드들 사용할 수 있다.
(toUpperCase, charAt, Integer ... )
<% String id= "back";
pageContext.setAttibute( "userid", id ); %>
${ userid.toUppercae( ); }
[ empty X ] 연산자
: X값이 null 인지 boolean 해줌
${empty 1} => false ( 1 이 있으니까 false 다 )
${empty null} => true
=> 3항연산자 하고 연계해서 사용하면
if null 조건문 효과를 낼 수 있다.
<% if (request.getParameter("id") != null ) { }%>
==
${empty param.id ? "Guest" :
param.id } 회원님 어서오세요!
: param.id 값이 empty, 즉 null 이면 Guest 출력
null 이 아니면 param.id 출력
[[ EL <= 배열 / List / Map ]]
: 배열 / List / Map 값 EL 로 get 하기
<% ArrayList list = new ArrayList();
pageContext.setAttribute( "list" , list ); %>
==
<jsp:useBean id="list" class="java.util.ArrayList" />
- List 나 Map 도 생성자 있는 객체다. useBean 으로 가져올 수 있다.
( 단, useBean 에서는 Generic은 사용 불가능 )
< EL 로 값뽑기 >
[배열]
<% array[ index ]; %>
==
${ array[ index ] }
[ List ]
<% list.get ( index ); %>
<% list.get ( index ).name; %>
==
${ memberlist[2] }
${ memberlist[2].name }
- 배열처럼 [index] 대괄호로 뽑을 수 있다
[ Map ]
<% membermap.get("key값"); %>
==
${membermap.get("key값")} 똑같이도 되고
==
${membermap["key값"]} 배열처럼 대괄호에 key값넣어도 된다.
- 배열 List Map => 값 하나씩 뽑을 때는 이렇게 뽑으면 되지만, 전체 / 여러개 뽑을 때는
반복문을 사용해야 한다. => JSTL 반복문 문법 <c:foreach /> 를 사용해서 뽑아준다.
--------------------------------------------------------------------
[[ get 편하게 해주는 EL ]]
1. - request.getParameter ( " id " ) => ${ param.id }
2. - session.getAttribute ( "key값" ) => ${ (scope.) "key값" }
3. - m1.getId( ) => ${ m1.id }
[ 1. param ]
: getParameter 극한으로 편하게 줄여줌
(1) param
<%=request.getParameter("id")%>
==
${param.id}
(2) paramValues
: select 등 파라미터값이 복수 개일 때
<% String[ ] lunch = request.getParameterValues("lunch");
for (int i = 0; i < lunch.length; i++) {
out.println(lunch[i] + "<br>"); } %>
==
${paramValues.lunch [0] }
: 일단 인덱스로 사용가능
JSTL=> EL 전용 반복문 사용해서 쉽게 뽑을 수 있다.
[ 2. getAttribute ]
: 자바 <=> EL 변수/객체 공유
<% int a = 10;
pageContext.setAttribute( "el", a ); %>
<%=pageContext.getAttribute("el") %>
==
${ el }
=> 10
=> 자바변수값을 EL로 가져와서 사용가능 ( 연산 등 조작 가능 )
( EL 에 b=100 라는 변수값이 있다면, 거꾸로
${ b }
( pageContext.setAttribute("b" , b ); <= 자동 )
<%=pageContext.getAttribute("b") %>
=> 100
자바에서도 가져다가 쓸 수 있다.
하지만, JSP 에서는 자바를 최대한 안쓰려고 하기때문에,
자바 => EL 로, 가져와서 사용하는 경우가 많다. )
< pageContext >
: 현재 페이지 내에서 변수 공유
=> 자바와 EL 사이에 변수/객체를 공유 가능.
- 해당 페이지 내에서만 사용 가능
- 단순히 변수 공유 용도
( pageContext < request < session < application )
pageContext => EL 과 Java 사이에서 변수 공유 가능하게 해준다.
=> 이게 얘만 가능한게 아니라, setAttribute 메소드 쓸 수 있는 애들은 다 가능하다.
[ pageContext < request < session < application ]
해당페이지< 선택한한놈 < 모두30분 < 모두섭종전까지
( 다만 pageContext 는 현재 페이지 내에서 변수 공유목적을 주 목적으로 사용하는 애고,
request, session 등은 주목적은 다른 페이지로 넘기는건데, 그 와중에 setAttibute 해둔 값을
EL 도 편하게 가져다 쓸 수 있는 것. )
pageConext.setAttribute("a", 10 )
request.setAttribute("a", 20 )
session.setAttribute("a", 30 )
application.setAttribute("a", 40 )
<% ~.getAttribute("a") %>
== ${ a }
근데, 이렇게 get해서 쓰는거 너무 편하게 "key값" 만 툭 쓰다보니,
key값 이름이 겹칠 수 있으므로 구별해줘야한다
=> Scope 사용
${pageScope.a} => 10 ( 같은 페이지에서 사용했을 경우 )
${requestScope.a} => 20
${sessionScope.a} =>30
${applicationScope.a} =>40
- scope 안주고 그냥 ${a} 로만 찾을 경우 순서
1. page 2. request 3.session 4.application
순서로 찾는다. 그리고도 없으면 공백표시
[ 객체 공유 ]
- 객체도 마찬가지다.
<% MemberDTO m1 = new MemberDTO( );
pageContext.setAttribute( "m1", m1 ); %>
==
<jsp:useBean id="m1" class="dto.MemberDTO" (scope="page") />
(* useBean 사용시 자동으로 scope.setAttribute 된 효과 ) => 바로 가져다 쓸 수 있다.
담아두고
get 할때
<% request.getAttribute( "m1" )%>
==
${ (pageContext.) m1 }
하면 쉽게 객체 자체를 뽑을 수 있다.
[ 3. getter ]
- 객체안에 property (변수) 를 get 할 땐
(1) 자바
<% m1.getId( ) %>
(2) JSP
<jsp:getProperty name="m1" property="id">
(3) EL
${ m1.id }
- 이렇게 EL 로, 자바코드를 사용하지 않으면서도, 편하게 사용할 수 있게 해준다.
[ useBean VS 자바객체생성 ]
<jsp:useBean id=" a1 " class= "dto.A" scope = "page" >
- useBean으로 가져온 객체는 EL으로 바로 가져다 쓸 수 있다.
( pageContext.setAttribute ( "a1", a1 ); 이 자동으로 되어있는 효과 )
=> ${ a1 }
- 자바문법으로 생성한 객체는
pageContext 등을 이용해서 setAttribute로 공유해둬야 한다.
<%A a1 = new A( );
pageContext.setAttrbite ( "a1", a1 ); %>
=> ${ a1 }
------------------------
- EL 은 변수/파라미터/객체/property 등을 get 할 때 특히나 강점을 지닌다.
- JSTL 의 var 변수 값을 바로 가져다 사용할 수 있다.
'Back to the JSP' 카테고리의 다른 글
[JSTL] 반복문 <c: forEach items var varStatus /> (0) | 2022.08.13 |
---|---|
[JSTL] <c: set /> 변수 : Java 와 EL 중개자 (0) | 2022.08.13 |
jsp:useBean 사용시 jasperException 컴파일 오류. cannot be resolved to a type (0) | 2022.08.11 |
[JSP] action태그 useBean / get||setProperty (0) | 2022.08.11 |
[ 서블릿 + JSP ] 효율적으로 섞어쓰기 (0) | 2022.08.10 |