04. EL
EL(Expression Language)
1
2
3
4
5
6
7
8
9
10
11
12
13
✔️ JSP의 표현식을 조금 더 효율적으로 간단히 작성할 수 있도록 고안된 표현 언어
✔️ 화면에 출력하고자 하는 자바코드를 ${ key } 형식으로 작성하면 해당 위치에 value가 출력됨 (추가적인 작성법도 존재)
✔️ EL의 특징
1) get이라는 단어를 사용하지 않는다
왜?? EL == 화면에 표현하는 언어
== 출력용 언어(setting 불가능)
== set을 못하니까 get도 생략(무조건 get 수행)
2) EL은 null을 빈칸으로 처리한다
${ null인 변수 } ➡️ 빈칸 출력
${ NullPointerExeption 발생 코드 } ➡️ 빈칸 출력(예외 발생 X)
1) index.html 작성
1 2 3
<!-- form 태그를 제외한 모든 요청 방식은 GET --> <a href="/JSPProject2/elTest">1. EL(Expression Language)</a> <!-- 절대 경로 방식 -->
2) servlet 작성(GET)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
@WebServlet("/elTest") public class ELTestServlet extends HttpServlet { // 데이터 전달 방식에 따라서 하나의 요청 주소로 여러가지 처리가 가능하다 // a태그로 요청(GET) @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { RequestDispatcher dispatcher = req.getRequestDispatcher("/WEB-INF/views/el/elTest.jsp"); // WEB-INF 폴더는 외부 접근 방법을 통해서 접근 불가 // 단, 내부 접근(Servlet, JSP에서의 직접 접근)은 가능 dispatcher.forward(req,resp); } }
3) JSP 작성
1 2 3 4 5 6 7 8 9 10 11
테스트1 : <%= request.getParameter("test") %> <br> 테스트2 : ${ param.test } <br> <form action="/JSPProject2/elTest" 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>
4) servlet 작성(POST)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
// form태그 요청(POST) @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 요청 데이터 문자 인코딩 지정 req.setCharacterEncoding("UTF-8"); // 파라미터 얻어오기 String name = req.getParameter("inputName"); int age = Integer.parseInt(req.getParameter("inputAge")); String address = req.getParameter("inputAddress"); String message = name + "님은 " + age + "세 이고, " + address + "에 거주 중입니다."; // Person 객체 생성 ( Person 클래스 필요 ) Person p = new Person(); p.setName(name + "님"); p.setAge(age + 10000);; p.setAddress("대한민국" + address); // 요청 발송자 생성 RequestDispatcher dispatcher = req.getRequestDispatcher("/WEB-INF/views/el/elResult.jsp"); // 요청 위임시 추가할 값 세팅 req.setAttribute("message", message); req.setAttribute("person", p); List<String> list2 = null; // null List<String> list3 = new ArrayList<>(); // 비어있는 리스트 List<String> list4 = new ArrayList<>(); // 값이 있는 리스트 list4.add("테스트"); req.setAttribute("list2", list2); req.setAttribute("list3", list3); req.setAttribute("list4", list4); // JSP로 요청 위임 dispatcher.forward(req, resp); }
5) JSP 작성
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>EL 결과</title> </head> <body> <h3>EL을 이용해서 출력하기</h3> <h4>파라미터</h4> <pre> EL로 request에 세팅된 파라미터를 얻어오는 방법 ${ param.name속성값 } + 데이터 파싱(String -> int)도 자동으로 된다 </pre> 이름 : ${ param.inputName } <br> 나이 : ${ param.inputAge + 100} <br> 주소 : ${ param.inputAddress } <br>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
<h4>추가 세팅된 값</h4> <pre> ${ 세팅한 key 값 } 1) request에 추가 세팅된 값을 얻어올 때 별도의 다운 캐스팅 필요없다 (<% %>의 형태로 불러올 때는 다운캐스팅이 필요했었음) 2) import 구문도 생략 3) 객체에 저장된 값을 얻어올 때 getter를 호출하는데 get필드명()이 아니라 필드명만 작성하면 된다 </pre> 메세지 : ${ message } <br> person의 name : ${ person.name } <br> person의 age : ${ person.age } <br> person의 address : ${ person.address } <br> person.toString() : ${ person }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
<hr> <h3>EL에서 null과 '비어있다'에 대한 처리 방법</h3> <h4>empty : 비어있거나 null인지를 검사하는 연산자</h4> ${ 값 == null } / ${ 값 eq null } : null 인지 검사하는 방법 ${ 값 != null } / ${ 값 ne null } : null 이 아닌지 검사하는 방법 <pre> * list2 : null list2 == null : ${list2 == null} // true list2 eq null : ${list2 eq null} // true list2 != null : ${list2 != null} // false list2 ne null : ${list2 ne null} // false empty list2 : ${empty list2} // true ➡️ empty가 null도 비어있다고 판단 * list3 : null은 아니지만 비어있다 list3 eq null : ${list3 eq null} // false empty list3 : ${empty list3} // true list3에 요소가 추가되어 있는가? ${!empty list3} // false list3에 요소가 추가되어 있는가? ${not empty list3} // false * list4 : null도 아니고, 요소도 1개 추가되어 있음 list4 eq null : ${list4 eq null} // false empty list4 : ${empty list4} // false list4에 요소가 추가되어 있는가? ${!empty list4} //true list4에 요소가 추가되어 있는가? ${not empty list4} // true list4의 0번째 인덱스에 존재하는 값 : ${ list4[0] } ➡️ EL은 List에 존재하는 요소를 얻어올 때 배열처럼 [index번호]를 입력해서 얻어온다 </pre>