관리 메뉴

DeseoDeSeo

[ EL과 JSTL ] EL ( Expression Language ) 본문

JSP

[ EL과 JSTL ] EL ( Expression Language )

deseodeseo 2023. 9. 2. 19:05
  • 새로운 dynamic web project "EL_JSTL" 생성
  • webapp에 elTest.jsp 생성
  •  EL ( Expression Language ) :  값(데이터)을 웹 페이지에 표시(표현)하는 데 사용되는 태그 ( JSP출력에 대한 부분을 쉽게 하기 위해서)               

JSTL (Jsp standard Tag Library) - JSP 표준 태그 라이브러리

 

< EL과 JSTL을 사용하는 이유 >

: JSP파일에 자바형식의 코드를 태그화 하여 사용할 수 있다.

EL, JSTL

 

장점: java값을 가져오기 간단하고, 가독성을 높여준다. ( 비 개발자를 위한 언어)

단점: 디테일한 설정을 하기에는 어려운점이 많다.

< 이전의 방법 > 

session에 저장된 id라는 이름의 값을 웹페이지에 표현 하시오.

<%
	String id = (String)session.getAttribute("id");
%>
<%= id %>

+ Bonus 

내장 객체의 영역(Scope) : 객체의 유효기간

 - 해당 객체를 누구와 공유할 것인가를 나타냄.

 

1. page 영역 

  : 한 번의 클라이언트 요청에 하나의 jsp페이지가 호출 

  : 하나의 jsp페이지를 처리할 때 사용되는 영역

2. request 영역

   : 하나의 요청을 처리할 때 사용되는 영역

3. session 영역

   : 하나의 브라우저와 관련된 영역

4. application영역

  : 하나의 웹 애플리케이션과 관련된 영역

 

EL은 java의 저장된 아무 변수의 값을 사용불가,  Scope에 저장된 값만 꺼내서 사용 가능.

${id}님 환영합니다!

<%
	  pageContext.setAttribute("num",10);
	  pageContext.setAttribute("isCheck",true);
	
%>
${num} <br>
${num + 10}<br>
${num -5}<br>
${num *30}<br>
${num *30}<br>
${num /2} ${num div 2}<br>  <!-- div로도 사용 가능 -->
${num %2} ${num mod 2}<br>  <!-- mod로도 사용 가능 -->
${num >5 && num >3}<br>
${num >5 and num <3}<br>
${num >5 || num <3}<br>
${num >5 or num <3}<br>
	
${isCheck} <br>
${!isCheck} ${not isCheck} <br>

< 출력 결과 >

 

${num >3} ${num gt 3}<br>  <!-- greater?! -->
	${num <20} ${num lt 3}<br>  <!-- little?! -->
	${num >= 3} ${num ge 3}<br>  <!-- greater or equal ?! -->
	${num <= 3} ${num le 3}<br>  <!-- little or equal ?! -->
	
	${num == 10}  ${num eq 10} <br>  <!-- equal -->
	${num != 20}  ${num ne 20} <br> <!-- not equal -->

 EL에서 DTO,VO를 가져오면 어떻게 가져올까? 
<%
		MemberDTO dto = new MemberDTO("yamyam","1234","짜장면","그린");
		pageContext.setAttribute("dto", dto);
%>

 

page 영역에 저장된 dto의 아이디 값을 표현식을 사용하여 웹페이지에 표현하시오.
	<% MemberDTO info = (MemberDTO)pageContext.getAttribute("dto");%>
	<%=info.getId() %>

 

EL사용하여 dto안에 있는 private 필드값을 가져오기 위해서는 반드시 getter메서드가 필요하다.
	${dto.id}
	${dto.pw}
	${dto.nick}
	${dto.addr}  <br>

 

만약 el로 없는 값을 가져오면 아무것도 출력되지 않는다.

${empty good} <!-- empty를 통해서 비어있는지 확인할 수 있다. -->
${not empty good}<br> <!-- empty를 통해서 비어있는지 확인할 수 있다. -->
만약 동일한 이름의 값이 여러 영역에 들어가있다면
EL에서는 가장 작은 영역인 pageContext에서부터 값을 찾음.
pageContext, request, session, application 순서임.

특정영역에서만 찾고자 할때, name앞에 특정영역 scope를 붙여준다.

< 각 영역에 저장하기>

<%
	pageContext.setAttribute("name","박병관");
	request.setAttribute("name", "김미희");
	session.setAttribute("name", "황해도");
	application.setAttribute("name","조준용");
%>
  • 속성 - jsp 내장 객체
  • page 속성 - pageContext
  • request 속성 - request
  • session 속성 - session
  • application 속성 - application
${name} 
${sessionScope.name}