본문 바로가기
서블릿 JSP

EL

by 영카이브 2024. 2. 27.

EL이란?

Controller에서는 데이터를 가공하게 되고 그 가공한 것을 request저장소에 담아 View에서 사용하게 된다. View에서는 가능하면 자바코드를 사용하지 않는 것이 MVC를 구현하는 가장 좋은 방법이다.이를 쉽게 하는 방법이 EL이다. 

 

왜 View에서는 자바코드를 사용하지 않는 것이 MVC를 구현하는데 가장 좋은 방법인가?

  • 분리된 역할 :  MVC는 모델, 뷰, 컨트롤러로 역할을 분리하는데, 뷰는 사용자 인터페이스를 담당하고 모델은 응용프로그램의 상태와 로직을 처리하며, 컨트롤려는 사용자 입력을 처리하고 모델 및 뷰를 관리한다. 자바코드가 뷰에 들어가게되면 이러한 역할에 혼란이 온다.
  • 향상되는 가독성
  • 유지보수 용이

EL에서는 getter를 사용하지 않고 속성을 가져온다.

ex) 

public class Person {
    private String name;

    public String getName() {
        return name;
    }
}
${person.name}

 

 

기존 코드

Spag.java ( Controller단 )

@WebServlet("/spag")
public class Spag extends HttpServlet{
	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		int num = 0; 
		String num_=  request.getParameter("n"); 
		if(num_ != null && !num_.equals(""))
			num = Integer.parseInt(num_); 
		String result; 
		if(num%2!=0)
			result="홀수"; 
		else
			result="짝수"; 
		
		request.setAttribute("result", result);
		// redirect - 현재 작업과 상관없는 새로운 요청을 함
		// forward - 현재 작업한 내용을 이어가게 해줌
		RequestDispatcher dispatcher = request.getRequestDispatcher("spag.jsp");
		// 현재 작업한 내용을 인자로 담아 그 내용이 dispatcher경로인 spag.jsp로 이어지게 함
		// forward관계에 있는 Spag.java와 spag.jsp의 저장소는 request가 사용된다.
		dispatcher.forward(request, response); 
	}
}

 

spag.jsp( View단 )

<%@ 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>
	<%=request.getAttribute("result") %> 입니다. 
</body>
</html>

 

 

EL 적용

Spag.java ( Controller단 )

@WebServlet("/spag")
public class Spag extends HttpServlet{
	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		int num = 0; 
		String num_=  request.getParameter("n"); 
		if(num_ != null && !num_.equals(""))
			num = Integer.parseInt(num_); 
		String result; 
		if(num%2!=0)
			result="홀수"; 
		else
			result="짝수"; 
		
        // EL적용
		request.setAttribute("result", result);
		String[] names = {"newlec", "dragon"};
		request.setAttribute("names", names);
		Map<String, Object> notice = new HashMap<>(); 
		notice.put("id", 1); 
		notice.put("title", "EL은 좋아요");
		request.setAttribute("notice", notice);
		// redirect - 현재 작업과 상관없는 새로윤 요청을 함
		// forward - 현재 작업한 내용을 이어가게 해줌
		RequestDispatcher dispatcher = request.getRequestDispatcher("spag.jsp");
		// 현재 작업한 내용을 인자로 담아 그 내용이 dispatcher경로인 spag.jsp로 이어지게 함
		// forward관계에 있는 Spag.java와 spag.jsp의 저장소는 request가 사용된다.
		dispatcher.forward(request, response); 
	}
}

 

spag.jsp( View단 )

<%@ 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>
	<%=request.getAttribute("result") %> 입니다. 
	${result}
	${names[1]}
	${notice.id}
	${notice.title}
	
</body>
</html>

 

<%=request.getAttribute("result") %> 를  ${result} 로 받은 것이 동일한 출력을 나타내는것을 확인하였다. 

 

EL을 통해 page객체,  request객체, session객체, application객체에 담긴 값을 뽑아낼 수 있다. 

우선순위는 page - request - session - application 순이다. 우선순위에 상관없이 특정 저장소에서 뽑아내고 싶은 경우 scope한정사를 붙인다. 따라서 pageScope, requestScope, sessionScope, applicationScope라고 한다. 

<%
	pageContext.setAttribute("result", "hello");
	
%>
<body>
	${requestScope.result}<br>
	${result}
</body>
</html>

 

page객체에 담긴값은 "hello", request에 담긴 값은 홀수, 짝수 판별 값이다. 

 

 requestScope를 붙인 경우 짝수, 이를 붙이지 않았을 경우 page객체가 우선순위가 더 높으므로 hello가 출력되었다. 

 

그 외 내장 객체

  • param :

    String num_= request.getParameter("n"); 일 때 

    String num_= request.getParameter("n");  대신

    ${param.n} // parameter 정보 꺼냄 

  • header : ${header.accept} / / header정보 꺼냄

 

 

 

 

참고 자료 출처 :

https://youtube.com/watch?v=VPvs6SGQ9yY&list=PLq8wAnVUcTFVOtENMsujSgtv2TOsMy8zd&index=48

https://www.youtube.com/watch?v=TAgXBpfJ4-o&list=PLq8wAnVUcTFVOtENMsujSgtv2TOsMy8zd&index=49

 

'서블릿 JSP' 카테고리의 다른 글

MVC model1 & model2  (0) 2024.02.27
JSP 기본 구조  (0) 2024.02.26
두 개의 서블릿을 하나로 합치기  (0) 2024.02.26
서블릿 동적인 페이지  (0) 2024.02.25
redirect  (0) 2024.02.24