toggle menu

JSP 정리 - 익스프레션 언어

2012.08.21 17:19 JAVA/JSP
request.setAttribute("id", "ahn");

이면 이것을 ${id} 로 값을 가져올 수 있다.
그런데 만약 request 외에도
session.setAttribute("id", "korea");
라고 되어 있으면, 두개의 네임값이 같으므로 문제가 생길 수 있다. 이런때에는 좀더 작은 개체단위부터 찾는다는 것을 기억하자.
같은 이름이면 page의 것을 먼저 참조하게 된다.

page  <  request  <  session  <  application

 

만약 구체적으로 어떤 범위인지 지정하고 싶다면,

${applicationScope.id} 이런식으로 지정해줄 수 있다.

따라서 동일한 이름을 갖는 경우 위와 같이 정확하게 내장객체의 이름을 지정해주고 사용할 필요가 있다.




request.getParameter("name");
 이런 파라메터값은

${param.name} 의 형식으로 가져올 수 있다.

혹은 ${param["COLOR"]}

위에서 requestScope 도 존재하기 때문에 이 둘간의 관계에 대해 혼동할 수 있는데,

get이나 post방식으로 넘어온 값들은 ${param.이름} 형식으로 가져와야하고,

request.setAttribute("이름", "값"); 으로 저장한 값들은 ${requestScope.이름} 형식으로 가져온다는 사실을 기억하자.




체크박스나 셀렉트 등으로 여러개를 가져왔을 경우,

${paramValues.ANIMAL[0]}

의 형태로 가져올 수 있다.





아래는 익스프레션 언어를 활용한 간단한 예이다.
HTML폼으로 선택한 값을 받는 JSP 파일에서 특별한 JSP 문법 없이 바로 값을 출력해주고 있다.

test.html 파일
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action=petresult.jsp>
		아이디 : <input type=text name=id><br>
		<br> 다음중 회원님이 키우고 있는 동물은?<br>
		<br> 개<input type=checkbox name=animal value="개"> 고양이<input
			type=checkbox name=animal value="고양이"> 금붕어<input
			type=checkbox name=animal value="금붕어"><br>
		<br> <input type=submit value="확인">
	</form>
</body>
</html>


petresult.jsp 파일
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title></title>
		<style></style>
		<script type="text/javascript"></script>
	</head>

	<body>
		아이디 : ${param.id}<br>
		선택한 동물: ${paramValues.animal[0]} ${paramValues.animal[1]} ${paramValues.animal[2]} 
	</body>
</html>




이번에는 조금더 익스프레션 언어의 활용을 볼 수 있다.
대괄호 안에서 약간의 연산이 가능하다는 것을 확인할 수 있다.
테스트는 get방식으로 파라메터를 넣어서 확인할 수 있다.

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title></title>
		<style></style>
		<script type="text/javascript"></script>
	</head>

	<body>
		X = ${param.NUM1}, Y = ${param.NUM2}<br><br>
		X + Y = ${param.NUM1 + param.NUM2 }<br>
		X가 더 큽니까? ${param.NUM1 - param.NUM2 > 0}<br>
		X와 Y가 모두 양수입니까? ${ (param.NUM1 > 0) && (param.NUM2 > 0) }<br>
		X와 Y가 같습니까? ${ param.NUM1 == param.NUM2 ? "예" : "아니오" }<br>
	</body>
</html>




간단한 연산 외에 empty 라는 키워드를 통해 해당값의 존재 유무를 판별할 수 있다.
${empty id ? "guest" : id} 님, 반갑습니다 ^^

id값이 존재할 경우 id이름으로, 아니면 guest 라고 보여주는 예이다.




배열이나 ArrayList에 있는 값을 가져올 때의 예도 살펴보자.
<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title></title>
		<style></style>
		<script type="text/javascript"></script>
	</head>

	<body>
<%
	ArrayList<String> arrayList = new ArrayList<String>();

	arrayList.add("사과");
	arrayList.add("딸기");
	arrayList.add("포도");
	
	//이렇게 선언한 변수는 익스프레션 언어에서 가져올 수 없다.
	//따라서 어트리뷰트로 추가해주어야 한다.
	
	request.setAttribute("addedList", arrayList);
%>
	
	${requestScope.addedList}<br><br>
	
	${requestScope.addedList[0]}<br>
	${requestScope.addedList[1]}<br>
	${requestScope.addedList[2]}<br>
	
	</body>
</html>

실행 결과는 아래와 같다.


[사과, 딸기, 포도]

사과
딸기
포도









자바빈에서의 사용

자바빈을 사용할 때도 익스프레션 언어를 사용할 수 있다.

${자바빈객체.프로퍼티이름} 혹은 ${자바빈객체["프로퍼티 이름"]}

예를들어 ${bean.name} 이라고 쓴다면, 실제 내부적으로는, bean 객체 안의 getName() 메소드를 호출하여 값을 가져오게 된다.


그런데 만약 프로퍼티이름에 _(언더바)나 &(앤드) 등의 특수문자가 존재하는 경우, 

${자바빈객체.프로퍼티이름} 형태는 사용할 수 없고, 반드시 ${자바빈객체["프로퍼티 이름"]} 형태로만 사용가능하다는 것을 기억하자.







JAVA/JSP 관련 포스팅 더보기