JSP - 표현언어(EL) Expression Language (2022.10.12)

2022. 10. 12. 11:013층 1구역 - 개발의 장/JSP

1. 서론

Spring 프레임워크를 배우기 전 jsp에서 좀 더 간결하게 <%= "hello"%>를

나타낼수 있는 EL 언어에 대해 알아보도록 하자.

 

2. 본론

표현 언어(Expression Language)

 값(데이터)을 웹 페이지에 표시(표현)하는데 사용되는 태그

JSP 출력에 대한 부분을 쉽게 하기 위해 개발한 태그

 표현 언어는 표현식보다 사용방법이 간단하고 문법체계가 직관적으로 쉬운 편이다. 표현 언어는 “${ }”를 사용하여 값을 표현한다.

 

2-1. 출력하는 다양한 방법

 

표현식 == <%="hello"%>

메소드 == <%out.print("hello"); %>

표현 언어(EL) == ${"hello"} >> 자동완성(추천)에 뜨진 않음...;;

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Ex1</title>
</head>
<body>
<!-- http://localhost:8085/jspExam/el/ex1.jsp -->

<%="표현식으로 출력" %><br>
<%out.print("메소드로 출력"); %><br>
${"표현언어 EL로 출력"}

</body>
</html>

 

 

2-2. 다양한 문자열 정수형 표현

EL태그도 물론 정수형이나 문자열을 표현할 수 있다...............만 null의 데이터일 경우 조금 다르다.

null의 경우는 EL로 출력할 경우 그냥 빈 데이터로 인식해 버린다.

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Ex2</title>
</head>
<body>
<!-- http://localhost:8085/jspExam/el/ex2.jsp -->
	정수형 : ${10}<br>
	실수형 : ${10.123}<br>
	문자열형 : ${"홍길동" }<br>
	논리형 : ${true}<br>
	null 데이터 : ${null}<br>
	연산 : ${10 + 123 }<br>
</body>
</html>

 

2-3. 연산하기

 산술 : +, -, *, /(or div), %(or mod)

 

관계 : ==(or eq), !=(or ne), <(or lt), >(or gt), <=(or le), >=(or ge)

 

조건 : a ? b : c

 

논리 : &&(or and), ||(or or), !(or not)

 

null 검사 : empty

 

연산 또한 가능하다.

여기서 div는 /와 같은 값을 (몫의 값을 결과로 도출)

mod는 %와 같은 값을(나머지의 값을 결과로 도출)

하게 된다.

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Ex3</title>
</head>
<body>
<!-- http://localhost:8085/jspExam/el/ex3.jsp -->
	<h1>연산자들</h1>
	\${5 + 2}(역슬래시가 있어서 EL태그로 인식 몬함.) : ${5 + 2}<br>
	\${5 - 2} : ${5 - 2}<br>
	\${5 * 2} : ${5 * 2}<br>
	
	\${5 % 2} : ${5 % 2}<br>
	\${5 mod 2} : ${5 mod 2}<br>
	
	\${5 / 2} : ${5 / 2}<br>
	\${5 div 2} : ${5 div 2}<br>

</body>
</html>

위 코드를 복붙해서 붙이면 div구간에서 오류가 날 텐데(이클립스 기준) 신경 쓸 거 없이 바로 출력을 해보자.

 

다음은 비교연산자.

비교연산자도 다양한 표현이 있으나 아마 필자는 왼쪽으로 많이 쓸 거 같다.

하지만 오른쪽으로 쓰는 사람도 분명 있을테니 알아두도록 하자.

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Ex4</title>
</head>
<body>
<!-- http://localhost:8085/jspExam/el/ex4.jsp -->
	<h1>비교 연산자들</h1>
	
	\${5 == 2} : ${5 == 2} => \${5 eq 5} : ${5 eq 5}<br>
	\${5 != 2} : ${5 != 2} => \${5 ne 5} : ${5 ne 5}<br>
	\${5 < 2} : ${5 < 2} => \${5 lt 2} : ${5 lt 2}<br>
	\${5 > 2} : ${5 > 2} => \${5 gt 2} : ${5 gt 2}<br>
	\${5 <= 2} : ${5 <= 2} => \${5 le 2} : ${5 le 2}<br>
	\${5 >= 2} : ${5 >= 2} => \${5 ge 2} : ${5 ge 2}<br>

</body>
</html>

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Ex5</title>
</head>
<body>
<!-- http://localhost:8085/jspExam/el/ex5.jsp -->
	<h1>논리 연산자들</h1>
	\${(5>2) || (5<2)} : ${(5>2) || (5>2)} => \${false or true} : ${false or true}<br>
	\${(5>2) && (5>2)} : ${(5>2) && (5>2)} => \${false and true} : ${false and true}<br>
	\${ !(5>2) } : ${ !(5>2) } => \${ not false} : ${ not false }<br>
	

</body>
</html>

 

2-4. EL를 사용할 경우 request.getParameter();를 param으로 축약할 수 있다.

표현 언어로 요청 파라미터 처리하기

 

 사용자가 폼에 입력한 값을 얻어오기 위해서 JSP 내장 객체인 request의 getParameter() 메소드를 사용.

 표현 언어에서는 request.getParameter() 대신 param 객체를 사용.

param 객체는 “.” 또는 “[ ]”를 사용하여 사용자가 입력한 값을 얻어옴.

 

param : JSP의 내장 객체인 request의 getParameter()와 동일한 역할인 파라미터 값을 알려준다.

paramValues : 파라미터 값들을 배열 형태로 얻어오는데 사용하는 request의 getParameterValues()와 동일한 역할을 한다

 

 

EL를 사용할 경우 param을 통해 request.getParameter(); 와 같은 값을 출력할 수 있다.

 

ex6_form.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Ex5</title>
</head>
<body>
<!-- http://localhost:8085/jspExam/el/ex6_form.jsp -->
	<h1>로그인</h1>
	<form method="get" action="ex6_result.jsp">
	<input type="text" name="id" placeholder="아이디"><br>
	<input type ="password" name="pw" placeholder="비밀번호"><br>
	<input type="submit" value="로그인">
	</form>
	

</body>
</html>

 

ex6_result.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

    	<%
    	
    	String id = request.getParameter("id");
    	String pw = request.getParameter("pw");
    	%>
    	
    	아이디 : <%=id%><br>
    	비밀번호 : <%=pw%> <br>
    	<br>
    	아이디 : ${param.id}<br>
    	비밀번호 : ${param.pw}<br>

 

 

2-5. scope를 이용한 내장객체의 출력

 

EL 방식으로 내장객체 사용하기

 

 어트리뷰트에 저장된 값을 표현 언어에서는 다음과 같은 형태로 접근해서 사용할 수 있다.

 

pageScope : page 객체에 저장된 속성의 <속성, 값> 매핑을 저장한 객체

requestScope : request 객체에 저장된 속성의 <속성, 값> 매핑을 저장한 객체

sessionScope : session 객체에 저장된 속성의 <속성, 값> 매핑을 저장한 객체

applicationScope : application 객체에 저장된 속성의 <속성, 값> 매핑을 저장한 객체

 

 JSP와 EL의 내장 객체 비교 내장 객체 설명

 

 page 어트리뷰트(어트리뷰트) - pageContext(JSP 내장 객체 ) - pageScope(표현 언어의 내장 객체 )

request 어트리뷰트(어트리뷰트) - request(JSP 내장 객체 ) - requestScope(표현 언어의 내장 객체 )

session 어트리뷰트(어트리뷰트) - session(JSP 내장 객체 ) - sessionScope(표현 언어의 내장 객체 )

application 어트리뷰트(어트리뷰트) - application(JSP 내장 객체 ) - applicationScope(표현 언어의 내장 객체 )

 

 

예전에 jsp 수업을 했을 때, pageContext, request, session, application에 대해 알아본적이 있는데 

2022.09.24 - [3층 - 개발의 장/JSP] - JSP - pageContext, request, session, application forwaed(2022-09-24)

 

JSP - pageContext, request, session, application forwaed(2022-09-24)

1. 서론 pageContext, request, session, application forward의 법칙에 대해 알아보도록 하자. 2. 본론 일단 들어가기 전에 pageContext, request, session, application 이 4가지 객체는 뒤에 .setAttribute(Str..

sukw9512.tistory.com

EL을 통해 scope를 사용하여 출력이 가능하다.

 

ex7_A.jsp

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!-- http://localhost:8085/jspExam/el/ex7_A.jsp -->
  <%
  	pageContext.setAttribute("data", "pageContext"); //>>이 페이지 안에서만 효력있음.
  	request.setAttribute("data", "request"); //>>새로운 request가 발생할 경우 기존꺼는 사용불가
  	session.setAttribute("data", "session");
  	application.setAttribute("data", "application");
  %>
  범위 지정 없음 : ${data} <br>
  pageContext : ${pageScope.data }<br>
  request : ${requestScope.data }<br>
  session : ${sessionScope.data }<br>
  application : ${applicationScope.data }<br>
  
  <a href="ex7_B.jsp">이동</a>

ex7_B.jsp

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!-- http://localhost:8085/jspExam/el/ex7_B.jsp -->
  
  범위 지정 없음 : ${data} <br>
  pageContext : ${pageScope.data }<br>
  request : ${requestScope.data }<br>
  session : ${sessionScope.data }<br>
  application : ${applicationScope.data }<br>

 

 

 

3. 결론

프로젝트를 진행하면서 코드를 어떻게 사용해야할지 모르겠는 부분을 찾아볼 때 구글 검색을 자주하는데

검색하면서 ${}가 대체 무엇인지 궁금했었다. 대개 '에이젝스'나 '제이쿼리' 라는 툴을 사용할 때 자주 나오는 형태라

그냥 그 때 사용하는 코드인갑다. 생각하고 있었는데 이게 그거였구나....