# Expression Language

## EL이란?

표현식`<%= %>` 또는 액션 태그`<jsp:></jsp:>`를 대신해서 값을 표현하는 언어이다.

EL은 `${value}` 로 표현된다.

```
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    ${ 10 }<br/>
    ${ 99.99 }<br/>
    ${ "ABC" }<br/>
    ${ true }<br/>
</body>
</html>
```

### EL 연산자

| 연산자 | 종류                    |
| --- | --------------------- |
| 산술  | +, - , \*, /, %       |
| 관계형 | ==, !=, <, > , <=, >= |
| 조건  | a?b:c                 |
| 논리  | &&, \|\|              |

```
${ 1+2 }
${ 1-2 }
${ 1*2 }
${ (1>2)?1:2 }
```

## 액션태그로 사용되는 EL

`<jsp:getProperty name=*"member" property="name"/>*` 를 `${ member.name }` 로 사용할 수 있다.

```java
package com.javalec.ex;

public class MemberInfo {

        private String name;
        private String id;
        private String pw;

        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getId() {
            return id;
        }
        public void setId(String id) {
            this.id = id;
        }
        public String getPw() {
            return pw;
        }
        public void setPw(String pw) {
            this.pw = pw;
        }
}
```

```
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<jsp:useBean id="member" class="com.javalec.ex.MemberInfo" scope="page" />
<jsp:setProperty name="member" property="name" value="이름"/>
<jsp:setProperty name="member" property="id" value="abc"/>
<jsp:setProperty name="member" property="pw" value="123"/>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
    이름 : <jsp:getProperty name="member" property="name"/><br />
    아이디 : <jsp:getProperty name="member" property="id"/><br />
    비밀번호 : <jsp:getProperty name="member" property="pw"/><br />

    <hr />

    이름 : ${ member.name }<br />
    아이다 : ${ member.id }<br />
    비밀번호 : ${ member.pw }<br />

</body>
</html>
```

## 내장 객체

| 내장 객체            | 설명                     |
| ---------------- | ---------------------- |
| pageScope        | page객체를 참조하는 객체        |
| requestScope     | request객체를 참조하는 객체     |
| sessionScope     | session객체를 참조하는 객체     |
| applicationScope | application객체를 참조하는 객체 |
| param            | 요청 파라미터를 참조하는 객제       |
| paramValues      | 요청 파라미터(배열)를 참조하는 객제   |
| initParam        | 초기화 파라미터를 참조하는 객체      |
| cookie           | cookie객체를 참조하는 객체      |

### web.xml

```markup
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>jsp_23_3_ex1_elex</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>

  <context-param>
      <param-name>con_name</param-name>
      <param-value>con_name은 홍길동 입니다.</param-value>
  </context-param>
  <context-param>
      <param-name>con_id</param-name>
      <param-value>con_id는 abcde 입니다.</param-value>
  </context-param>
  <context-param>
      <param-name>con_pw</param-name>
      <param-value>con_pw는 12345 입니다.</param-value>
  </context-param>

</web-app>
```

여러 servlet에서 특정 데이터를 공유해야하는 경우 context parameter를 이용해서 공유하면서 사용할 수 있다.

### obj.jsp

```
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>

    <form action="objelOk.jsp" method="get">
        아이디 : <input type="text" name="id"><br />
        비밀번호 : <input type="password" name="pw">
        <input type="submit" value="login">
    </form>

    <% 
        application.setAttribute("application_name", "application_value");
        session.setAttribute("session_name", "session_value");
        pageContext.setAttribute("page_name", "page_value");
        request.setAttribute("request_name", "request_value");
    %>

</body>
</html>
```

#### objelOk.jsp

```
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>

    <%
        String id = request.getParameter("id");
        String pw = request.getParameter("pw");
    %>

    아이디 : <%= id %> <br />
    비밀번호 : <%= pw %>

    <hr />

    아이디 : ${ param.id } <br />
    비밀번호 : ${ param.pw } <br />
    아이디 : ${ param["id"] } <br />
    비밀번호 : ${ param["pw"] }

    <hr />

    applicationScope : ${ applicationScope.application_name }<br />
    sessionScope : ${ sessionScope.session_name }<br />
    pageScope : ${ pageScope.page_name }<br />
    requestScope : ${ requestScope.request_name }

    <hr />
    <!-- context parameter값을 참조해서 가져 올 수 있다.-->
    context 초기화 파라미터<br />
    ${ initParam.con_name } <br />
    ${ initParam.con_id } <br />
    ${ initParam.con_pw } <br />
</body>
</html>
```

EL표기법을 통해서 코드가 긴 것(가독성이 떨어지는)을 더 간단하게 구현할 수 있다.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://dahye-jeong.gitbook.io/til/web/chap09-el.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
