View 단의 자바 코드를 마저 들어내고 EL을 통해 통일성을 맞출 수 있게 한다.
위와 같이 변수, 리스트, 맵 등등 다양한 값들을 편리하게 불러낼 수 있다
아래와 같이 서버상에 존재하는 저장소들에게서 값을 추출해 올 수 있게 된다. application, session은 기본적인 저장소 역할을 수행하며 request의 경우 forwarding 작업을 할 때 서블릿 간 모델을 전달할 때 사용되며 page는 pageContext 객체로 페이지 전역에서 사용된다.
cnt라는 변수의 값을 찾을 때 변수명들이 각 저장소에 모두 있다고 하더라도 아래와 같이 우선순위대로 검색하기 때문에 우선순위를 고려하거나 Scope를 통해 해당 저장소의 값을 꺼내도록 한정사를 붙인다.
EL을 통해 상기 저장소의 값들을 쉽게 뽑아낼 수 있다.
위의 4대 저장소 뿐만아니라 기타 저장된 값들을 아래와 같은 객체들로부터 가져올 수 있다.
EL 연산자들은 여타 연산자들과 거의 동일하지만 대신 축약어들도 사용할 수 있도록 설계되어 있다. 그 이유는 html 자체가 태그<>
를 포함하고 있기에 가독성 등의 이유로 연산자들의 기호보다는 축약어들을 권장한다. (xml 등에서는 허용이 안되는 부분도 있음)
empty 연산자는 자주 쓰이며 null 이나 ""(빈문자열)일 경우 true 반환
package com.newlecture.web;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@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 저장소를 통해 전달
request.setAttribute("result", result);
// 배열 전달
String[] names = {"newlec", "dragon"};
request.setAttribute("names", names);
// Map 전달
Map<String, Object> notice = new HashMap<>();
notice.put("id", 1);
notice.put("title", "EL GOOD");
request.setAttribute("notice", notice);
// Forward - 동일한 디렉토리 내 있기에 경로 지정 안함
RequestDispatcher dispatcher
= request.getRequestDispatcher("spag.jsp");
dispatcher.forward(request, response);
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
pageContext.setAttribute("result", "hello");
%>
<%=request.getAttribute("result") %>입니다.
${requestScope.result}<br>
${names[1]}<br>
${notice.title}<br>
${result}<br>
${empty param.n?'값이 비어있습니다.':param.n}<br>
${param.n/2}<br>
${header.accept}<br>
</body>
</html>
EL에서는 정수(문자열)를 정수로 나눠도 실수가 반환 됨 (JSTL에서 컨트롤 가능)