EL (Expression Language)에 관한 개념을 설명해드릴게요.

EL 개요

  • EL은 데이터를 출력하기 위한 언어: JSP (JavaServer Pages)에서 데이터를 쉽게 출력하기 위해 사용되는 언어입니다.
  • 문법이 직관적이고 사용이 용이: 변수와 속성에 쉽게 접근하고 출력할 수 있습니다.
  • JSP에서 변수를 출력할 때 사용: 자바 빈즈(Java Beans), Map, List, 배열 등의 데이터를 손쉽게 출력할 수 있습니다.

자바 빈즈(JavaBeans)는 자바에서 재사용 가능한 소프트웨어 컴포넌트를 만들기 위한 표준이다.
특정한 명명 규칙을 따르며, 다양한 개발도구와 환경에서 사용할 수 있도록 설계되어 있다.
<자바 빈즈가 되기 위한 구성요소>
1.직렬화 가능(Serializable)
자바빈즈는 직렬화 가능해야 한다. 직렬화는 객체의 상태를 저장하고, 네트워크를 통해 전송하거나 파일로 저장하는 기능을 의미한다. 이를 통해 자바빈즈는 객체의 상태를 유지하고 복원할수 있따.
2.기본 생성자(No-Arg Constructor)
자바빈즈는 파라미터가 없는 기본 생성자를 가져야 한다. 이는 자바빈즈가 쉽게 인스턴스화될 수 있로록 한다.
3.프로퍼티 접근자 메소드(Getter/Setter Methods)
자바빈즈의 프로퍼티는 접근자 메소드를 통해 접근가능하다. 접근자 메소드의 명명 규칙은 다음과 같다.
- 프로퍼티의 값을 읽는 메소드 : getPropertyName()
- 프로퍼티의 값을 설정하는 메소드 : setPropertyName()
- 논리형 프로퍼티의 값을 읽는 메소드 : isPropertyName()

  • 처리 가능한 데이터형:

    • 프리미티브 타입 (기본형 데이터)
    • Map, List, 배열, 자바 빈즈 등의 복합 데이터 구조

    EL 내장 객체

  • pageScope: 페이지 영역에 존재하는 변수 참조 시 사용합니다.

  • requestScope: 요청 영역에 존재하는 변수 참조 시 사용합니다.

  • sessionScope: 세션 영역에 존재하는 변수 참조 시 사용합니다.

  • applicationScope: 애플리케이션 영역에 존재하는 변수 참조 시 사용합니다.

  • param: 파라미터 값을 참조 시 사용합니다.

  • paramValues: 파라미터 배열 값을 참조 시 사용합니다.

  • header: 헤더 정보를 참조 시 사용합니다.

  • headerValues: 헤더 배열 정보를 참조 시 사용합니다.

  • cookie: 쿠키 정보를 참조 시 사용합니다.

  • initParam: 초기화 파라미터를 참조 시 사용합니다.

  • pageContext: 페이지 컨텍스트를 참조 시 사용합니다.

이와 같은 EL의 개념과 사용 방법을 통해 JSP 페이지에서 동적으로 데이터를 출력하고 다양한 연산을 수행할 수 있습니다. EL은 JSP의 표현식을 간결하게 작성하는데 유용한 도구입니다.

EL 연산자

  • . (점 연산자): 자바 빈 또는 Map에 접근할 때 사용합니다.
  • [] (대괄호 연산자): 배열 또는 List에 접근할 때 사용합니다.
  • () (소괄호 연산자): 우선 순위 연산자로 사용됩니다.
  • empty 연산자: 값이 null인지 판단하는 연산자로서 true를 반환합니다.
  • 산술 연산자: +, -, *, /, %와 같은 기본 산술 연산자입니다.
  • 논리 연산자: && (AND), || (OR), ! (NOT)와 같은 논리 연산자입니다.
  • 비교 연산자: ==, >, <, >=, <=, !=와 같은 비교 연산자입니다.

EL 기본 문법

< ${표현식} >

• 내장 객체나 scope에 저장된 속성을 지정하여 사용.
• 예: ${member.name} => member객체에서의 getName속성을 호출
• member는 내장 객체나 scope에 저장된 객체.
• name은 해당 객체의 속성(property).

• <%= %>와의 차이
완전히 다른 메커니즘이다.
• <%= %>는 JSP 변수를 출력하는 데 사용되는 전통적인 표현 방식.
• ${표현식}은 EL의 표현 방식으로, 주로 내장 객체나 scope의 속성 값을 출력할 때 사용.


EL (Expression Language) 실습 과정과 각 코드의 기능 및 개념을 상세히 설명하겠습니다.

1. login_form.jsp

코드

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body>
<form action="login" method="get">
    <fieldset>
        <legend>로그인 폼</legend>
        <ul>
            <li>
                <label for="userid">아이디</label>
                <input type="text" id="userid" name="userid">
            </li>
            <li>
                <label for="passwd">비밀번호</label>
                <input type="password" id="passwd" name="passwd">
            </li>
            <li>
                <input type="submit" value="전송">
            </li>
        </ul>
    </fieldset>
</form>
</body>
</html>

설명

  1. HTML 폼 생성: 사용자로부터 아이디와 비밀번호를 입력받기 위한 HTML 폼을 생성합니다.

  2. <form> 태그: action 속성은 데이터를 제출할 서블릿 URL (/login)을 지정하고, method는 GET 방식을 사용합니다.

GET 방식은 HTTP 요청 방법 중 하나로,
주로 데이터를 서버로 보내기 위해 URL에 쿼리 문자열을 포함하여 서버에 요청하는 방식을 의미합니다.
GET 방식은 다음과 같은 특징이 있습니다:
<주요 특징>

1.	데이터가 URL에 포함됨:
   •	GET 요청은 데이터를 URL에 쿼리 문자열 형태로 포함시켜 전송합니다.
   •	예: http://example.com/login?userid=hong&passwd=1234
   •	쿼리 문자열은 ? 문자 뒤에 시작되고, 각 키-값 쌍은 & 문자로 구분됩니다.

2.	길이 제한:
   •	대부분의 브라우저와 서버는 URL 길이에 제한을 두고 있습니다. 일반적으로 최대 2048자로 제한되며, 이 때문에 GET 방식은 많은 양의 데이터를 전송하는 데 적합하지 않습니다.

3.	안전성:
   •	GET 요청은 서버의 상태를 변경하지 않는 요청에 사용됩니다. 주로 데이터를 조회하거나 검색할 때 사용합니다.
   •	GET 요청은 여러 번 반복해도 같은 결과를 반환하며, 서버의 상태나 데이터에 영향을 주지 않습니다.

4.	캐싱:
   •	GET 요청은 브라우저 캐시와 서버 캐시에 의해 캐시될 수 있습니다. 따라서 같은 요청이 반복될 경우 서버에 요청을 보내지 않고 캐시된 응답을 사용할 수 있습니다.

5.	북마크 가능:
   •	GET 요청은 URL에 데이터가 포함되기 때문에 브라우저의 주소창에 입력하거나 즐겨찾기(북마크)로 저장할 수 있습니다. 
   
   
   GET 방식은 데이터를 조회하거나 간단한 데이터를 전송할 때 유용하지만, 민감한 정보를 전송할 때는 보안상의 이유로 POST 방식을 사용하는 것이 더 적절합니다. POST 방식은 데이터를 HTTP 메시지의 본문에 포함하여 전송하기 때문에 보안성이 더 높습니다.
  1. 태그 • 개념: 태그는 폼 요소들을 그룹화하는 컨테이너 역할을 합니다. 사용자가 폼을 작성할 때, 서로 관련 있는 항목들을 한 그룹으로 묶어서 가독성을 높이고, 그룹화된 항목들 사이에 시각적인 구분을 제공합니다. • 쓰임새: 여러 폼 항목들을 그룹화하여 논리적인 단위를 만들고, 사용자에게 명확한 폼 구조를 제공하기 위해 사용됩니다.
  1. 태그 • 개념: 태그는 내의 폼 요소 그룹에 대한 제목을 지정합니다. 태그로 지정된 제목은 시각적으로 태그의 경계선 위에 위치하게 되며, 그룹화된 폼 요소들이 어떤 내용인지 설명하는 역할을 합니다. • 쓰임새: 폼 그룹에 제목을 부여하여, 그룹 내 폼 요소들의 의미를 명확하게 전달하고, 사용자 경험을 향상시키기 위해 사용됩니다.
  2. 입력 필드:
    • 아이디 입력 필드 (<input type="text" id="userid" name="userid">): 사용자가 아이디를 입력할 수 있습니다.
    • 비밀번호 입력 필드 (<input type="password" id="passwd" name="passwd">): 사용자가 비밀번호를 입력할 수 있습니다.
    • 제출 버튼 (<input type="submit" value="전송">): 폼 데이터를 서버로 전송합니다.

2. LoginServlet.java

코드

java
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      String userid = request.getParameter("userid");
      String passwd = request.getParameter("passwd");

      request.setAttribute("userid", userid);
      request.setAttribute("passwd", passwd);

      request.getRequestDispatcher("login.jsp").forward(request, response);
  }
}

설명

  1. 서블릿 정의: /login URL 패턴과 매핑된 서블릿을 정의합니다.

  2. doGet 메서드: GET 요청을 처리하는 메서드입니다.

    • request.getParameter("userid"): 폼에서 전송된 userid 값을 가져옵니다.
    • request.getParameter("passwd"): 폼에서 전송된 passwd 값을 가져옵니다.
    • request.setAttribute("userid", userid): userid 값을 request 객체에 속성으로 설정합니다.
    • request.setAttribute("passwd", passwd): passwd 값을 request 객체에 속성으로 설정합니다.
    • request.getRequestDispatcher("login.jsp").forward(request, response): 요청을 login.jsp 페이지로 포워드합니다.

    1) 파라미터 추출
    2) B.L실행
    3) 결과 request scope 저장
    4) forwarding/redirect

3. login.jsp

코드

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h1>EL 실습</h1>
사용자 아이디: ${userid}<br>
사용자 비밀번호: ${passwd}<br>
</body>
</html>

설명

  1. JSP 페이지: 서블릿에서 포워드된 요청을 처리합니다.
  2. EL(Expression Language): EL을 사용하여 request 객체에 설정된 속성 값을 출력합니다.
    • ${userid}: 서블릿에서 설정한 userid 값을 출력합니다.
    • ${passwd}: 서블릿에서 설정한 passwd 값을 출력합니다.

전체적인 논리적 흐름

  1. 사용자 입력: 사용자가 login_form.jsp에서 아이디와 비밀번호를 입력하고 제출합니다.
  2. 서블릿 처리: LoginServlet이 GET 요청을 받아 useridpasswd 값을 추출하고, 이를 request 객체의 속성으로 설정한 후 login.jsp로 포워드합니다.
  3. 결과 출력: login.jspEL을 사용하여 설정된 속성 값을 출력합니다.

이 실습을 통해 사용자는 JSP와 서블릿 간의 데이터 전달과 EL을 사용한 값 출력 방법을 배울 수 있습니다. 각 단계마다 사용자 입력을 서버에서 처리하고 다시 사용자에게 결과를 보여주는 기본적인 웹 애플리케이션 동작 방식을 이해할 수 있습니다.

0개의 댓글