EL (Expression Language) (23.06.30)

·2023년 7월 2일
0

Server

목록 보기
3/35
post-thumbnail

📝 EL (Expression Language)

JSP의 표현식(Expression)을 조금 더 효율적이고 간단하게 작성할 수 있도록 고안된 언어

  • 화면에 표현하고자 하는 자바코드를 ${ value } 형식으로 작성함
    (value 작성법이 여러 가지 존재)

📌 절대 경로와 상대 경로

💡 절대 경로

변하지 않는 절대적인 한 위치를 기준으로 해서 경로를 표현
-> C드라이브 기준

/JSPProject/EL/result

💡 상대 경로

현재 위치를 기준으로 목표하는 곳의 경로를 표현

EL/result

🔎 상대 경로 기호

기호의미
/root
./현재 위치
../상위 경로

📌 EL의 특징

  1. get이라는 단어를 사용하지 않음
    표현 언어 == 출력용 언어 == 출력은 얻어와서밖에 할 수 없기 때문에

  2. null을 빈칸으로 출력함
    (null과 관련된 값은 모두 빈칸)

📌 EL로 Parameter 얻어와서 출력하는 방법

${ param.name속성값 }

📌 request에서 속성(Attribute) 얻어오는 방법

Servlet에서 추가된 속성을 표현(출력)하려는 경우 request에 세팅된 속성(Attribute)의 key값만 작성하여 출력할 수 있다.
(import, getAttribute(), 다운캐스팅, 변수 저장 모두 생략)

${ 속성key }

${ 속성key.필드명 }
(단, getter가 작성되어 있어야만 가능함)

🔎 코드로 살펴보기

VS Code

  • EL.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>1.EL</title>
</head>
<body>
  
    <pre>
        절대 경로 : /JSPProject/EL/result

        상대 경로 : 
        - 현재 : /JSPProject/EL.html

        - 작성법 : EL/result
    </pre>

    <form action="EL/result" method="post">

        이름 : <input type="text" name="inputName"> <br>
        
        나이 : <input type="number" name="inputAge"> <br>
        
        주소 : <input type="text" name="inputAddress" size="50"> <br>

        
        <button>제출하기</button>
    </form>

</body>
</html>

Eclipse

  • Person.java
package edu.kh.jsp.model.vo;

public class Person {
	private String name;
	private int age;
	private String address;
	
	public Person() {} // 기본 생성자
	
	// getter / setter
	public String getName() {
		return name;
	}
	
	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}

	@Override
	public String toString() {
		return "Person [name=" + name + ", age=" + age + ", address=" + address + "]";
	}
	
}
  • ELResultServlet.java
package edu.kh.jsp.controller;

import java.io.IOException;

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;

import edu.kh.jsp.model.vo.Person;

@WebServlet("/EL/result")
public class ELResultServlet extends HttpServlet{

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		
//		POST 방식 요청 -> 한글 깨짐 -> 문자 인코딩 처리 필요
		req.setCharacterEncoding("UTF-8");
		
//		새로운 임의의 값
		String menu = "돈까스";
		
//		파라미터 얻어오기
		String inputName = req.getParameter("inputName");
		int inputAge = Integer.parseInt(req.getParameter("inputAge"));
		String inputAddress = req.getParameter("inputAddress");
		
		// Person 객체에 파라미터를 변경한 값을 대입
		Person p = new Person();
		p.setName(inputName + "님");
		p.setAge(inputAge + 100);
		p.setAddress("대한민국" + inputAddress);
		
		// 응답 화면 작성 코드를 JSP로 위임
		
		// 1) 요청 발송자
		String path = "/WEB-INF/views/el/result.jsp";
				
		RequestDispatcher dispatcher = req.getRequestDispatcher(path);
		
		// 2) 요청 위임 시 추가할 값 세팅
		req.setAttribute("person", p);
		
		req.setAttribute("menu", menu);
		
		// 3) 요청 위임
		dispatcher.forward(req, resp);
	}
}
  • result.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<!-- Person 클래스 import -->
<%@page import="edu.kh.jsp.model.vo.Person" %>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>EL 확인하기</title>
</head>
<body>

	<!-- 
		EL의 특징
		
		1. get이라는 단어를 사용하지 않음
		 왜? 표현 언어 == 출력용 언어 == 출력은 얻어와서밖에 못 함
	
		2. EL은 null을 빈칸으로 출력함
		 	(null과 관련된 값은 모두 빈칸)
	 -->

	<h3>request에서 Parameter 얻어오기</h3>
	
	<pre>
		EL로 Parameter 얻어와서 출력하는 방법
		\${ param.name속성값 }
	</pre>
	
	1) JSP 표현식 :
	<%= request.getParameter("inputName") %> / 
	<%= request.getParameter("inputAge") %> /
	<%= request.getParameter("inputAddress") %>
	
	<%= request.getParameter("inputAddress2") %>
	<!-- null -->
	
	<br><br>
	
	2. EL(표현 언어) :
	${ param.inputName } /
	${ param.inputAge } /
	${ param.inputAddress }

	${ param.inputAddress2 }
	<!-- 빈칸  -->
	
	<h3>request에서 속성(Attribute) 얻어오기</h3>
	
	<pre>
		Servlet에서 추가된 속성을 표현(출력)하려는 경우
		request에 세팅된 속성(Attribute)의 key값만 작성하여 출력할 수 있다!
		(import, getAttribute(), 다운캐스팅, 변수 저장 모두 생략)
			
		\${ 속성key }
		
		\${ 속성key.필드명 }
		(단, getter가 작성되어 있어야만 가능함)
		
	</pre>
	
	<%
		String menu = (String)request.getAttribute("menu");
	
		Person person = (Person)request.getAttribute("person");
		
	%>
	
	1) JSP 표현식 :  <%= menu %>
	
	<!-- Person 클래스의 toString() 출력 -->
	<br> <%= person %>
	
	<!-- Person 클래스의 getter를 이용해 얻어와서 출력 -->
	<br> <%= person.getName() %>
	<br> <%= person.getAge() %>
	<br> <%= person.getAddress() %>
	
	<br><br>
	
	2) EL(표현 언어) : ${ menu }
	
	<br> ${ person.name }
	<br> ${ person.age }
	<br> ${ person.address }
	
	
	
</body>
</html>

🔎 출력 화면

  • '제출하기' 버튼을 클릭했을 때


📌 null 처리 방법

EL에서 null을 출력해야 되는 경우 ""(빈 문자열)을 출력한다.
+ NullPointerException이 발생하는 코드에서도 ""(빈 문자열)을 출력한다.
+ EL은 null인 경우를 확인할 때 empty를 통해서 확인할 수 있다.

  • EL을 이용해서 컬렉션 요소를 다룰 때 null인지 비어 있는지 확인하는 방법이 동일하기 때문에 코드 작성 시 이를 잘 구분할 수 있도록 해야 한다.

🔎 코드로 살펴보기

	</pre>

	<% 
		List<String> list = null;
	%>	
	
	1) JSP 표현식 : <%= list %>
		
	<br> <%= list == null %>
	
	<br><br>
	
	2) EL(표현 언어) : ${ list }
	
	<br> ${ empty list }
	
	<h3 style="color:red;"> EL의 empty는 null과 비어 있는 컬렉션을 비어 있는 것으로 취급함</h3>
	
	<%
		list = new ArrayList<String>();
	
		// list가 ArrayList 객체를 참조 == null이 아님
		// 참조하고 있는 ArrayList에 내용은 없음 == 비어 있음
	%>
	
	${ empty list }

	<!-- 
		EL을 이용해서 컬렉션 요소를 다룰 때
		null인지 비어 있는지 확인하는 방법이 동일하기 때문에
		코드 작성 시 이를 잘 구분할 수 있도록 해야 한다.
	 -->

🔎 출력 화면

profile
풀스택 개발자 기록집 📁

0개의 댓글