안녕하세요 이번 글에서는 JSP의 표현식 언어인 EL(Expression Language)에 대해서 알아보겠습니다.
1. 사용방법
사용방법을 간단히 살펴보면 $ 기호를 앞에 선언하고 {} 중괄호 안에 식을 넣어 주면 됩니다. ${ }
중괄호 내부 문법은 도트 연산자와 [] 연산자가 있습니다.
도트 연산자는 . 을 기준으로 첫 번째 변수는 내장 객체, 맵, 속성 등을 선언하며 두 번째 변수는 맵의 키값이나 객체 속성의 프로퍼티를 선언하여 주어야 합니다.
그렇다면 배열의 값을 구하고 싶을 때는 어떻게 해야 할까요??
이럴 때 사용되는 것이 [] 연산자입니다.
※ 따로 명명규칙은 없고 그냥 [] 연산자로 표기되어 있다고 하네요
코드를 사용하여 확인해 보겠습니다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="test.do" method="post">
<h1>이름</h1> <input type="text" name="name"> <br>
<h1>나이</h1> <input type="number" name="age"> <br>
<input type="submit" value="전송">
</form>
</body>
</html>
index.jsp 에서 간단하게 위와 같이 코딩하여 줍시다.
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//한글깨짐 방지
request.setCharacterEncoding("UTF-8");
//Member 객체에 전달받은 파라미터 값을 셋팅하여 줍니다.
Member m = new Member(request.getParameter("name"),(Integer.parseInt(request.getParameter("age"))));
//request 객체에 Member객체에 셋팅하여 줍니다.
request.setAttribute("Member", m);
//RequestDispatcher 객체를 호출하여 요청을 보낼 jsp 경로를 호출하여 줍니다.
RequestDispatcher view = request.getRequestDispatcher("view/next.jsp");
//초기화한 객체를 forward 방식으로 request , response를 jsp에서 사용할 수 있도록 넘겨 줍니다.
view.forward(request, response);
}
모델 객체를 만들어서 서블릿에서 받은 요청을 request 객체에 담아 보내 줍시다.
<%@page import="com.main.model.Member"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<jsp:useBean id="Member" class="com.main.model.Member" scope="request" />
<h1>이름 : ${Member.name }</h1> <br>
<h1>나이 : ${Member.age }></h1><br>
</body>
</html>
next.jsp를 위와 같이 코딩하여 준 다음 실행시켜 봅시다.
위 화면처럼 값이 전달되는 것을 확인할 수 있습니다.
객체의 생존 범위 별로 구별하여 보겠습니다.
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//한글깨짐 방지
request.setCharacterEncoding("UTF-8");
//Member 객체에 전달받은 파라미터 값을 셋팅하여 줍니다.
Member m = new Member(request.getParameter("name"),(Integer.parseInt(request.getParameter("age"))));
//request 객체에 Member객체에 셋팅하여 줍니다.
request.setAttribute("Member", m);
//request 생존범위
request.setAttribute("name", "request");
//session 생존범위
HttpSession session = request.getSession();
session.setAttribute("name", "session");
//application 생존법위
request.getServletContext().setAttribute("name", "application");
//RequestDispatcher 객체를 호출하여 요청을 보낼 jsp 경로를 호출하여 줍니다.
RequestDispatcher view = request.getRequestDispatcher("view/next.jsp");
//초기화한 객체를 forward 방식으로 request , response를 jsp에서 사용할 수 있도록 넘겨 줍니다.
view.forward(request, response);
}
서블릿을 위처럼 수정하여 준 다음
<%@page import="com.main.model.Member"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<jsp:useBean id="Member" class="com.main.model.Member" scope="request" />
<h1>이름 : ${Member.name}</h1> <br>
<h1>나이 : ${Member.age }</h1><br>
<h1> request = ${requestScope.name } <br> </h1>
<h1> session = ${sessionScope.name } <br> </h1>
<h1> application = ${applicationScope.name } <br> </h1>
</body>
</html>
next.jsp를 위처럼 수정한 뒤 실행시켜 봅시다.
next.jsp로 이동하게 되면 위화면처럼 같은 name이라는 속성의 키값을 가지더라도 Scope를 이용하여 생존 범위를 따로 지정하여 찾아갈 수 있습니다.
다음은 배열의 값을 찾아오는 방법을 알아보겠습니다.
위에서 말했듯 도트 연산자는 맵의 키 값이나 속성의 프로퍼티 값만 두 번째 변수로 받을 수 있기 때문에 배열의 인덱스 번호를 받을 수 없습니다 ${list.1} 이런 식으로 말이죠 이때 사용되는 것이 [] 연산자입니다.
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//한글깨짐 방지
request.setCharacterEncoding("UTF-8");
//Member 객체에 전달받은 파라미터 값을 셋팅하여 줍니다.
Member m = new Member(request.getParameter("name"),(Integer.parseInt(request.getParameter("age"))));
//request 객체에 Member객체에 셋팅하여 줍니다.
request.setAttribute("Member", m);
//request 생존범위
request.setAttribute("name", "request");
//session 생존범위
HttpSession session = request.getSession();
session.setAttribute("name", "session");
//application 생존법위
request.getServletContext().setAttribute("name", "application");
//배열 보내기
ArrayList<String> list = new ArrayList<String>();
list.add("사과씨앗");
list.add("사과쥬스");
list.add("사과파이");
request.setAttribute("list", list);
//RequestDispatcher 객체를 호출하여 요청을 보낼 jsp 경로를 호출하여 줍니다.
RequestDispatcher view = request.getRequestDispatcher("view/next.jsp");
//초기화한 객체를 forward 방식으로 request , response를 jsp에서 사용할 수 있도록 넘겨 줍니다.
view.forward(request, response);
}
서블릿을 위처럼 수정하여 줍니다.
<%@page import="com.main.model.Member"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<jsp:useBean id="Member" class="com.main.model.Member" scope="request" />
<h1>이름 : ${Member.name}</h1> <br>
<h1>나이 : ${Member.age }</h1><br>
<h1> request = ${requestScope.name } <br> </h1>
<h1> session = ${sessionScope.name } <br> </h1>
<h1> application = ${applicationScope.name } <br> </h1>
<h1> list1 = ${list[0] } <br> </h1>
<h1> list2 = ${list["1"] } <br> </h1>
<h1> list3 = ${list[2] } <br> </h1>
</body>
</html>
next.jsp도 위처럼 수정하여 준다음 실행시켜 봅시다.
그럼 위 화면처럼 값이 나오는 것을 확인할 수 있습니다.
※<h1> list 2 = ${list ["1"] } <br> </h1> 이 부분에 인덱스 값에 ""을 넣은 이유는 EL표현식에서 인덱스 번호가 ""안에 숫자를 대입해도 알아서 찾아오는 것을 보여드리기 위해 사용했습니다.
마지막으로 연산자의 종류를 정리하고 마무리하겠습니다.
오늘도 봐주셔서 감사합니다 ^^
'Servlet & Jsp' 카테고리의 다른 글
[JSP에서 JSTL사용하기 <c:out> & <c:forEach> ] - Head Frist Servlet & Jsp (7) | 2020.12.28 |
---|---|
[JSP에서 JSTL사용하기 설치편] - Head Frist Servlet & Jsp (0) | 2020.12.28 |
[JSP 에서 자바코드사용(스크립틀릿)] - Head Frist Servlet & Jsp (0) | 2020.12.25 |
[ HttpSession 교환방식 & TimeOut 설정] - Head Frist Servlet & Jsp (0) | 2020.12.24 |
[servletContext & HttpSession & Request] - Head Frist Servlet & Jsp (0) | 2020.12.23 |