JSP의 표현식(Expression)을 조금 더 효율적이고 간단하게 작성할 수 있도록 고안된 언어
- 화면에 표현하고자 하는 자바코드를
${ value }
형식으로 작성함
(value 작성법이 여러 가지 존재)
변하지 않는 절대적인 한 위치를 기준으로 해서 경로를 표현
-> C드라이브 기준
/JSPProject/EL/result
현재 위치를 기준으로 목표하는 곳의 경로를 표현
EL/result
기호 | 의미 |
---|---|
/ | root |
./ | 현재 위치 |
../ | 상위 경로 |
get이라는 단어를 사용하지 않음
표현 언어 == 출력용 언어 == 출력은 얻어와서밖에 할 수 없기 때문에
null을 빈칸으로 출력함
(null과 관련된 값은 모두 빈칸)
${ param.name속성값 }
Servlet에서 추가된 속성을 표현(출력)하려는 경우 request에 세팅된 속성(Attribute)의 key값만 작성하여 출력할 수 있다.
(import, getAttribute(), 다운캐스팅, 변수 저장 모두 생략)
${ 속성key }
${ 속성key.필드명 }
(단, getter가 작성되어 있어야만 가능함)
<!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>
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 + "]";
}
}
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);
}
}
<%@ 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>
EL에서 null을 출력해야 되는 경우 ""(빈 문자열)을 출력한다.
+ NullPointerException이 발생하는 코드에서도 ""(빈 문자열)을 출력한다.
+ EL은 null인 경우를 확인할 때 empty를 통해서 확인할 수 있다.
</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인지 비어 있는지 확인하는 방법이 동일하기 때문에
코드 작성 시 이를 잘 구분할 수 있도록 해야 한다.
-->