Programming/Servlet & JSP

JSP (3) - EL

코딩하는 포메라니안 2022. 3. 27. 20:19

1. EL(Expression Language)이란?

JSP의 표현식(<%= %>)보다 더 쉽게 값을 출력하기 위한 language(${ })

 

 

1. EL에서 사용할 수 있는 기능

1) JSP의 4개의 영역 속성 사용 : PageContext, Request, Session, Application

2) 자바 클래스의 메서드 호출

3) EL의 기본 객체 사용

4) 수치, 관계, 논리 연산 사용

 

 

2. EL 내장객체

category identifier type 설명
JSP pageContext Java Bean 현재 페이지의 Page객체
범위 pageScope Map page 영역에 저장된 객체 추출
requestScope Map request 영역에 저장된 객체 추출
sessionScope Map session 영역에 저장된 객체 추출
applicationScope Map application 영역에 저장된 객체 추출
요청 매개변수 param Map ServletRequest.getParameter(String)으로 값 추출
paramValues Map ServletRequest.getParameterValues(String)으로 여러 값 추출
쿠키 cookie Map HttpServletRequest.getCookie()로 쿠키 정보 추출

 

 

 

2. EL 문법

1. Dot 사용

1) Map 사용

${ Map.Map의 키 }

 

2) Java Bean 사용(자바 객체)

${ Java Bean.Bean속성 }

 

 

2. [] 사용

- 배열과 리스트인 경우, 문자로 된 인덱스 값은 숫자로 변경해서 처리함

ex) arr["0"] => arr[0]으로 처리

request.setAttribute("user.special", user);
${user.special.name} /*에러*/
${requestScope["user.special"].name};

 

 

 

3. EL로 객체 접근

1. 특정 영역에 저장된 값 접근

- 범위 지정 없이 key나 property이름만 쓰면, pageScope > requestScope > sessionScope > applicationScope 순으로 객체를 찾아간다.

 

//request.setAttribute("data", "데이터입니다.");
${requestScope.data}
${pageContext.request.data}
${data}

 

 

2. parameter값 접근

 

//url?name=홍길동&hobby=독서&hobby=게임
${param.name}//홍길동
${paramValues.hobby[0]}//독서
${paramValues.hobby[1]}//게임

 

 

3.  Cookie값 접근

- Cookie가 null이거나, 해당 key에 해당하는 값이 null이라면 return null

- EL은 값이 null이면, 공백을 출력한다.

//스크립트릿을 이용했을 때
Cookie[] cookies = request.getCookie();
for(Cookie cookie : cookies){
	if(cookie.getName().equals("test"){
    	out.println(cookie.getValue();
        break;
    }
}

//EL을 이용했을 때
${cookie.test.value}

 

 

 

4. EL 연산자 사용

*not empty와 같이 keyword로 사용 가능

종류 설명
산술 +, -, *, /(div), %(mod)
관계 ==(eq), !=(ne), <(lt), >(gt), <=(le), >=(ge)
논리 조건 ? 값1 : 값2
3항 &&(and), ||(or), !(not)
존재 검사 empty

- empty가 true를 반환하는 경우
1) 값이 null
2) 빈 문자열("")
3) 길이가 0인 배열([])
4) 빈 객체

 

 

 

5. EL method 호출

1. 객체의 getter메서드 = get 떼고, 맨 앞 철자는 소문자로 수정, ()는 빼고 작성해서 접근한다.

ex) userInfo.name

 

2. 일반 메서드는 그대로! 

ex) list.size()

 

//Data.java 클래스
import java.util.ArrayList;

public class Data {
	private String name;
	private int age;
	private ArrayList<String> hobby;
	
	public Data() {//기본 생성자	
	}

	public Data(String name, int age, ArrayList<String> hobby) {
		super();
		this.name = name;
		this.age = age;
		this.hobby = hobby;
	}

	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 ArrayList<String> getHobby() {
		return hobby;
	}

	public void setHobby(ArrayList<String> hobby) {
		this.hobby = hobby;
	}
	
}

 

<%
ArrayList<String> hobbies = new ArrayList<>();
hobbies.add("맛집탐방");
hobbies.add("독서");
Data data = new Data("홍길동", 30, hobbies);

request.setAttribute("userInfo", data);
%>

${userInfo.name}//홍길동
${userInfo.hobby.size()}//2