Developer/JSP EL JSTL

JSP 의 표현언어 EL

단님 2024. 11. 5. 16:37
728x90
EL 이란 ?

Expression Language 는 JSP에서 값을 간단하고 직관적으로 출력하기 위해 사용하는 언어EL 이란 ?

EL 은 자바코드를 거의 사용하지 않고 변수나 객체의 속성 값을 출력할 수있도록 한다.

EL 표현식은 ${...} 형식으로 사용한다

 

자바 표현식과 EL 표현 언어 사용의 비교

 

  • 자바 방식
=> JAVA 표현식 : <%= name %> 
=> JAVA Out 객체 : <% out.print("out.print() =>"+name); %>

  • EL 방식
  => EL 로 JAVA 변수 출력 : \${name} 
  
  \ 를 통해  ${}를 문자열로 인식.

 


EL 에서 사용할 수 있는 기본 객체

EL 에서는 JSP 에서 자주 사용하는 객체들을 미리 정의해 두었기 때문에 , 별도 선언 없이 바로 사용가능.

(Implicit object)

  • pageScope
  • requestScope
  • sessionScope
  • applicationScope

✔️ 동일한 속성명의 호출은 가장 가까운 범위 부터 검색한다.

(page -> request -> session -> application)

동일한 속성명을 사용한 경우 모두 구별해서 출력하려면 속성명을 붙여준다.

▪️ ${pageScope.name}
▪️ ${requestScope.name}
▪️ ${sessionScope.name}
▪️ ${applicationScope.name}

이왕이면 객체명을 붙여서 사용해서 실수를 범하지 않도록 하자.

 

🐻 서로 다른 속성(Attribute)명을 모든 영역에 정의  🐻
    ✔️ 속성명만 사용하여 출력가능
       ▪️ ${pname}
    	 ▪️ ${rname}
    	 ▪️ ${sname}
    	 ▪️ ${aname} 
    ✔️ 그러나 영역(Scope)을 붙여주는것이 효율적 (direct로 인식)
       ▪️ ${pageScope.pname}
    	 ▪️ ${requestScope.rname}
    	 ▪️ ${sessionScope.sname}
    	 ▪️ ${applicationScope.aname}

서블릿에서 전달받은 데이터를 JSP 파일에서 표현하기

 

1. request 객체를 활용하기
서블릿에서 데이터 설정
request.setAttribute("num1", 123);
request.setAttribute("num2", 456);

request 객체는 현재 요청에 관련된 데이터를 담고 있어서, 같은 요청 범위에서 데이터를 다른 페이지로 전달할 수 있다.

서블릿에서 request 객체에 데이터를 설정했으므로,

같은 요청 범위 내에 있는 JSP 페이지에서 이 데이터를 사용할 수 있다.

 

JSP에서 데이터 읽기 및 출력 (자바 방식 - 스크리블릿 방식)
<%
int n1 = (Integer)request.getAttribute("num1");
int n2 = (int)request.getAttribute("num2");
%>
<%=n1 %>+<%=n2 %>=<%=n1+n2 %>

자바 문법을 이용하여 표현한다면 이런 표현이 가능하다.

 

JSP에서 데이터 읽기 및 출력 (EL 방식 - 표현언어 방식)
${requestScope.num1}+${requestScope.num2}=${requestScope.num1 + requestScope.num2}

EL을 이용하면 자바 코드 없이도 값을 간단히 출력할 수 있다.

 

 

EL 방식이 더 간결하고 가독성이 좋아서 JSP에서 자주 사용된다

EL을 사용하면 JSP 파일 내에서 자바 코드가 줄어들어 코드 유지보수가 쉬워진다.


2. param 객체를 활용하기

 

 

동질성 비교
?id=admin&&password=12345!
${param.id=='admin'}
${param.password=='12345'}

 

null 비교
?
${param.id==null} 
${param.password==null}

 

empty ( null 이거나 , 빈문자열 )
?password=
${empty param.id}
${empty param.password}

 

활용 1 : 동질성 활용

URL에 전달된 id와 password 파라미터를 읽어와 활용해 보자.

http://localhost:8080/web01/jsp02/ex03_parameter.jsp?id=admin&password=123
* I D : <span class="red">${param.id}</span>
* Password: <span class="red">${param.password}</span>

 

 

활용 2 : null과 empty 활용
http://localhost:8080/web01/jsp02/ex03_parameter.jsp?id=admin
2. null(값의 존재) 확인: empty, == 
=> 쿼리스트링으로 비교 Test
http://localhost:8080/web01/jsp02/ex03_parameter.jsp?id=admin

2.1) ==null
=> 해당하는 Parameter가 존재하지않으면 true, 존재하지만 값이 없는 경우에는 false
\${param.id==null} => <span class="red"> ${param.id==null} </span>
\${param.password==null} => <span class="red"> ${param.password==null} </span>

2.2) empty
=> 해당하는 Parameter가 존재하지않거나, 존재하지만 값이 없는 경우 모두 true 
\${empty_param.id} => <span class="red"> ${empty param.id} </span>
\${empty_param.password} =>  <span class="red">${empty param.password} </span>


3. pageContent 객체 확인하기
Jsp 페이지에 대한 정보를 저장하는 객체 (pageScope)
기본객체를 return 하는 메서드를 제공
* 요청 URL:  <span class="red">${pageContext.request.requestURL}</span>
* 요청 URI:  <span class="red">${pageContext.request.requestURI}</span>