본문 바로가기

서버/Servlet-JSP
[Servlet-JSP] EL(Expression Language)

// EL(Expression Language)

- 저장 객체에서 값을 추출해서 출력하는 표현식

- 표현식 또는 액션 태그를 대신해서 값을 표현하는 언어

Controller View
request.setAttribute("cnt", 30) <%=request.getAttribute("cnt")%>  →  ${cnt}
List list = new ArrayList(){"1", "test"};
request.setAttribute("list", list);
<%=((List)request.getAttribute("list")).get(0)%>  →  ${list[0]}
Map n = new HashMap("title", "제목")
request.setAttribute("n", n);
<%=((Map)request.getAttribute("n")).get("title")%>  →  ${n.title}

package com.sorrel012.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.valueOf(num_);
	}

	String result;

	if(num%2 != 0) {
	    result = "홀수";
	}
	else {
	    result = "짝수";
	}

	request.setAttribute("result", result);

	String[] names = {"sorrel", "hanee"};
	request.setAttribute("names", names);

	Map<String, Object> notice = new HashMap<String, Object>();
	notice.put("id", 1);
	notice.put("title", "EL");
	request.setAttribute("notice", notice);


	RequestDispatcher dispatcher
	= request.getRequestDispatcher("spag.jsp");
	dispatcher.forward(request, response);

    }
}

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title> spaghetti </title>
</head>
<body>
	${result}입니다.<br>
	${names[0]}<br>
	${names[1]}<br>
	${notice.title}
</body>
</html>

// EL의 내장 객체

- 저장 객체에서 값을 추출하는 순서: page -> request -> session -> application

- 모든 저장소를 뒤지지 않고 특정 저장소에서만 값을 꺼내고 싶을 때 사용하는 한정사 : Scope
    ~ pageScope : page 객체를 참조하는 객체
    ~ requestScope : request 객체를 참조하는 객체
    ~ sessionScope : session 객체를 참조하는 객체
    ~ applicationScope : application 객체를 참조하는 객체

~ param : 요청 파라미터를 참조하는 객체
~ paramValues : 요청 파라미터(배열)를 참조하는 객체
~ initParam :  초기화 파라미터를 참조하는 객체
~ cookie : cookie 객체를 참조하는 객체

- EL에서는 메서드를 호출하는 방식으로는 사용할 수 없다. 
    ~ <%=pageContext.getRequest().getMethod()%> → ${pageContext.request.method}


package com.sorrel012.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.valueOf(num_);
	}

	String result;

	if(num%2 != 0) {
	    result = "홀수";
	}
	else {
	    result = "짝수";
	}

	request.setAttribute("result", result);

	String[] names = {"sorrel", "hanee"};
	request.setAttribute("names", names);

	Map<String, Object> notice = new HashMap<String, Object>();
	notice.put("id", 1);
	notice.put("title", "EL");
	request.setAttribute("notice", notice);


	RequestDispatcher dispatcher
	= request.getRequestDispatcher("spag.jsp");
	dispatcher.forward(request, response);

    }
}

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title> spaghetti </title>
</head>
<%
pageContext.setAttribute("result", "hello");
%>
<body>
	${requestScope.result}입니다.<br>
	${names[0]}<br>
	${names[1]}<br>
	${notice.title}
</body>
</html>

package com.sorrel012.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.valueOf(num_);
	}

	String result;

	if(num%2 != 0) {
	    result = "홀수";
	}
	else {
	    result = "짝수";
	}

	request.setAttribute("result", result);

	String[] names = {"sorrel", "hanee"};
	request.setAttribute("names", names);

	Map<String, Object> notice = new HashMap<String, Object>();
	notice.put("id", 1);
	notice.put("title", "EL");
	request.setAttribute("notice", notice);


	RequestDispatcher dispatcher
	= request.getRequestDispatcher("spag.jsp");
	dispatcher.forward(request, response);

    }
}

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title> spaghetti </title>
</head>
<%
pageContext.setAttribute("result", "hello");
%>
<body>
	${requestScope.result}입니다.<br>
	${names[0]}<br>
	${names[1]}<br>
	${notice.title}<br>
	${param.n}<br>
	${header.accept}
</body>
</html>

// EL 연산자

[]

()

not ! empty

* / div % mod

+ -

< lt > gt <= le >= ge

== eq !=  ne

&& and

|| or

? :

EL Result
${1 > (4/2)} false
${4.0 >= 3} true
${100.0 == 100} true
${(10*100 ne 100)} false
${'a' < 'b'} true
${'hip' gt 'hit'} false
${4 > 3} true
${1.2E4 + 1.4} 12001.4
${3 div 4} 0.75
${10 mod 4} 2

package com.sorrel012.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.valueOf(num_);
	}

	String result;

	if(num%2 != 0) {
	    result = "홀수";
	}
	else {
	    result = "짝수";
	}

	request.setAttribute("result", result);

	String[] names = {"sorrel", "hanee"};
	request.setAttribute("names", names);

	Map<String, Object> notice = new HashMap<String, Object>();
	notice.put("id", 1);
	notice.put("title", "EL");
	request.setAttribute("notice", notice);


	RequestDispatcher dispatcher
	= request.getRequestDispatcher("spag.jsp");
	dispatcher.forward(request, response);

    }
}

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title> spaghetti </title>
</head>
<%
pageContext.setAttribute("result", "hello");
%>
<body>
<%-- 	${requestScope.result}입니다.<br>
	${names[0]}<br>
	${names[1]}<br>
	${notice.title}<br>
	${header.accept}<br> 
	${param.n gt 3}<br> 
	${empty param.n? '값이 비어 있습니다.' : '값이 비어 있지 않습니다.'}<br> --%>
	${param.n / 2}<br> 
	
</body>
</html>