Servlet & Jsp

[ JSP 표현식 언어(EL) 사용하기 ] - Head Frist Servlet & Jsp

사과씨앗 2020. 12. 26. 17:30
728x90
반응형

안녕하세요 이번 글에서는 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를 위와 같이 코딩하여 준 다음 실행시켜 봅시다.

index.jsp
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

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도 위처럼 수정하여 준다음 실행시켜 봅시다.

 

next.jsp

그럼 위 화면처럼 값이 나오는 것을 확인할 수 있습니다.

 

※<h1> list 2 =  ${list ["1"] } <br> </h1>  이 부분에 인덱스 값에 ""을 넣은 이유는 EL표현식에서 인덱스 번호가 ""안에 숫자를 대입해도 알아서 찾아오는 것을 보여드리기 위해 사용했습니다. 

 

마지막으로 연산자의 종류를 정리하고 마무리하겠습니다.

 

오늘도 봐주셔서 감사합니다 ^^

728x90
반응형