Criming
코딩으로 업삼기
Criming
전체 방문자
오늘
어제
  • 분류 전체보기 (29)
    • Programming (28)
      • Spring (5)
      • Database (2)
      • JSP (6)
      • Java (10)
      • 탐구 및 해결 (1)
      • 연습문제 (3)
      • 예제 (1)
    • 자격증 (0)
    • 기타 (1)
      • 블로그 운영 (0)
      • 문서 (1)

블로그 메뉴

  • 홈
  • 태그

공지사항

인기 글

태그

  • Java SE
  • redirect
  • Tomcat
  • 자바규칙
  • JDK
  • println()
  • print()
  • jsp
  • HttpuURLConnection
  • jvm
  • 인스턴스
  • ec2
  • forward
  • System.out
  • java
  • printf()
  • try-catch
  • param
  • aws
  • 표현언어
  • Java EE
  • spring
  • sendRedirect
  • main()
  • Eclipse
  • Escape문자
  • ASCII
  • json
  • jre
  • 아스키코드

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Criming

코딩으로 업삼기

Programming/JSP

[JSP] 표현언어(EL, ${ })과 Scope(객체범위)

2022. 10. 12. 16:33

# 표현언어 #param #EL내장객체 #Scope


표현언어(EL: Expression Language)란?

JSP 코드를 작성할 때 편리함을 위한 코드방식으로,

기존 JSP 코드를 작성할 때 스크립트릿(<% %>)이나 표현식(<%= %>)을 HTML코드와 함께 사용하다보면, 자바 객체 선언 등 코드가 복잡해진다.

이런 문법 문제를 직관적이고 쉽게 표현한 코드 방식이 바로 표현언어( ${ } ) 이다.

 

[표현언어 연산자]

 

예제

예제1) 표현식과 표현언어의 차이

<body>
	${"표현 언어로 출력"}<br>
	<%="표현식으로 출력" %><br>
	<!-- 시스템 출력 -->
	<%out.print("메소드로 출력"); %><br> 	
</body>

예제2) 자료형과 연산 

<body>
	<h3>자료형별</h3>
	정수형 : ${10 }<br>
	실수형 : ${10.123 }<br>
	문자열형 : ${"홍길동" }<br>
	논리형 : ${true }<br>
	null데이터 : ${null }<br> <!-- NULL : 결과 화면을 공백을 처리 -->
	연산 : ${10 + 123}<br>
	
	<h3>연산자들</h3>
	\${5 + 2} : ${5 + 2}<br>
	\${5 - 2} : ${5 - 2}<br>
	\${5 * 2} : ${5 * 2}<br>
	
	\${5 / 2} : ${5 / 2}<br>
	\${5 div 2} : ${5 div 2}<br>
	
	\${5 % 2} : ${5 % 2}<br>
	\${5 mod 2} : ${5 mod 2}<br>
</body>

예제3) 비교 연산자

<body>
	<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>

예제4) 논리 연산자

<body>
<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>

param 내장객체

표현언어는 사용자가 폼에 입력한 값을 얻어오기 위해서 JSP 내장 객체인 request의 getParameter() 메소드를 대신 param 객체( . 또는 [])를 사용한다.

내장객체 설명
param jsp의 내장 객체인 request의 getParameter()와 동일한 역할인 파라미터 값을 알려준다.
paramValues 파라미터 값들을 배열 형태로 얻어오는데 사용하는 request의 getParameterValues()와 동일한 역할을 한다.

 

예제1)

<body>
<div align="center">
	<h1>로그인</h1>
	<table>
	<tr><td>
	<form action="ex6_result.jsp" method="post">
		<input type="text" name="id" placeholder="아이디"> <br>
		<input type="password" name="pw" placeholder="비밀번호"><br>
		<input type="submit" value="로그인" ><br>
	</form>
	</td></tr>
	</table>
</div>
</body>
</html>

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

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

Scope (뜻: 범위)

JSP에서는 page(pageContext), request, session, application 등의 네가지 객체 범위를 제공한다.

작은 범위부터 page < request < session < application 순이며,

만약 같은 이름의 변수가 범위 두곳에 저장되어있는 경우 작은 범위에 있는 변수가 불러진다. 

 

- pageScope : 현재 페이지 영역의 변수

- requestScope : 이전 페이지에서 받아온 영역의 변수(생략가능)

- sessionScope : session 영역의 변수

- applicationScope : application 영역의 변수

 

예제1) 변수 범위지정해주고 페이지별 유효범위 출력해보기

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	pageContext.setAttribute("data", "page man");
	request.setAttribute("data", "request man");
	session.setAttribute("data", "session man");
	application.setAttribute("data", "appliction man");
%>
범위 지정 없음 : ${data } <br>
page 속성 : ${pageScope.data } <br>
request 속성 : ${requestScope.data } <br>
session 속성 : ${sessionScope.data } <br>
application 속성 : ${applicationScope.data } <br>
<a href="ex7_B.jsp">이동</a>

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

범위 지정 없음 : ${data } <br>
pageContext : ${pageScope.data } <br>
request : ${requestScope.data } <br>
session : ${sessionScope.data } <br>
application : ${applicationScope.data } <br>

- 첫페이지에서 네가지 객체 범위를 가진 데이터 4개를 선언해주었다.

- 범위 지정하지 않았을 때는 변수의 범위는 기본적으로 page범위이다.

- 두번째 페이지에서는 첫번째 페이지 범위로 해당되는 pageContext, request 변수 두개가 범위를 벗어나서 사용할 수 없어 출력되지 않는다.


예제2) JSTL을 이용해 변수 범위지정해주고 페이지별 유효범위 출력해보기

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

<!-- 기본범위 pageContext -->
<c:set var="data" value="pageContext"/>
<c:set var="data" value="request" scope="request"/>
<c:set var="data" value="session" scope="session"/>
<c:set var="data" value="application" scope="application"/>

범위 지정 없음 : ${data} <br>
pageContext : ${pageScope.data} <br>
request : ${requestScope.data} <br>
session : ${sessionScope.data} <br>
application : ${applicationScope.data} <br>

<a href="ex9_B.jsp">이동</a>

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

범위 지정 없음 : ${data} <br>
pageContext : ${pageScope.data} <br>
request : ${requestScope.data} <br>
session : ${sessionScope.data} <br>
application : ${applicationScope.data} <br>

'Programming > JSP' 카테고리의 다른 글

[JSP] JSP 액션 태그 <jsp:useBean>  (0) 2022.10.17
[JSP] RequestDispatcher().forward();  (0) 2022.10.14
[JSP] Redirect와 forward의 차이점(+sendRedirect )  (0) 2022.10.14
[JSP] JSTL와 JAR 다운방법  (0) 2022.10.13
[JSP] Tomcat을 이용한 Eclipse 웹 자바 개발환경 세팅하기  (0) 2022.09.07
    'Programming/JSP' 카테고리의 다른 글
    • [JSP] RequestDispatcher().forward();
    • [JSP] Redirect와 forward의 차이점(+sendRedirect )
    • [JSP] JSTL와 JAR 다운방법
    • [JSP] Tomcat을 이용한 Eclipse 웹 자바 개발환경 세팅하기
    Criming
    Criming

    티스토리툴바