Development/JSP

[Expression Language] 웹 서버 구축하기 (16)

Go0G 2021. 12. 9. 20:00

개요

View를 위한 데이터 추출 표현식 사용

환경

  • WAS Server: CentOS Linux release 7.9 - Tomcat 7.0 - JDK 1.8.0_312

관련 경로

servelt-api 라이브러리 /[Tomcat Directory]/java/tomcat-servlet-api.jar
ROOT Directory /[Tomcat Directory]/tomcat/webapps/ROOT/

개념

  • MVC 패턴에서 View를 사용하기 위해서 Java가 사용되는 문제 발생
    • Controller에서 request.setAttribute를 수행하면, View에서 request.getAttribute를 사용하는 방식
  • View에서 자바코드사용을 지양하기 위해 사용 
  • 방법: EL(Expression Language) 사용
    • 일반 변수: ${}
    • 리스트: ${list[0]}
    • HashMap: ${n.title}

EL의 데이터 저장소

Page -> Request -> Session -> Application 저장소 순서로 값을 찾아감

한정사를 이용해 특정 객체의 값 추출 가능: ${sessionScope}, etc.

  • Page: Jasper에서 만든 Page Context 저장소
  • Requset: 서블릿간 통신을 위한 저장소
  • Session
  • Application

EL의 내장 객체

  • pageScope: Page 영역의 생명 주기에서 사용되는 저장소
  • requestScope: Request 영역의 생명 주기에서 사용되는 저장소
  • sessionScope: Session 영역의 생명 주기에서 사용되는 저장소
  • applicationScope: Application 영역의 생명 주기에서 사용되는 저장소
  • param: 파라미터 값을 저장하고 있는 저장소
  • paramValues: 파라미터 값을 배열로 저장하고 있는 저장소
  • header: 헤더 정보를 저장하고 있는 저장소: ${header.host}
  • headerValues: 헤더 정보를 저장하고 있는 저장소
  • cookie: 쿠키 정보를 저장하고 있는 저장소: cookie.JSESSIONID.value
  • iniParam: 컨텍스트 초기화 파라미터를 저장하고 있는 저장소
  • pageContext: 페이지 범위의 컨텍스트 저장소

EL의 연산자

  • <(lt), >(gt), <=(le), >=(ge)

실습

EL(Expression Language) 사용

MVC_Model2.java

import javax.servlet.annotation.WebServlet;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.lang.*;
import java.util.*;

@WebServlet("/MVC_Model2")
public class MVC_Model2 extends HttpServlet{
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
    {
    int num = 0;
    String num_ = request.getParameter("n");
    if(num_ != null&&!num_.equals(""))
        num = Integer.parseInt(num_);
    String result;
    if(num%2!=0)
        result = "홀수";
    else
        result = "짝수";

    request.setAttribute("result",result); 
    //리스트 생성
    String[] name = {"GYG","Dragon"};
    request.setAttribute("name",name); 

    //Hash Map
    Map<String, Object> notice = new HashMap<String, Object>();
    notice.put("id",1);
    notice.put("title","EL MAP으로 표현");
    request.setAttribute("notice",notice); 

    //forward: 공유
    RequestDispatcher dispatcher = request.getRequestDispatcher("MVC_Model2.jsp");
    dispatcher.forward(request, response);
    }
}

MVC_Model2.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding = "UTF-8"%>

<!DOCTYPE html>
<head>
    <meta charset="UTF-8">
    <title>MVC and EL</title>
</head>
<%
    pageContext.setAttribute("result","PageContext");
%>
<body>
    Requset.getAttribute 사용: <%= request.getAttribute("result") %>입니다. <br>
    Expression Language(변수) 사용: ${requestScope.result} 입니다. <br>
    Expression Language(배열) 사용: ${name[0]} 입니다.<br>
    Expression Language(MAP) 사용: ${notice.id} 입니다.<br>
    Expression Language(MAP) 사용: ${notice.title} 입니다.<br>
    현재 페이지에서 PageContext의 setAttribute사용: ${result}<br>
    쿠키 값 출력: ${cookie.JSESSIONID.value}<br>
    헤더 값 출력(웹 서버 내부의 정보 확인 가능): ${header.host}<br>
</body>
</html>

컴파일

#javac -classpath /[Tomcat Directory]/java/tomcat-servlet-api.jar [Java File Name].java
#mv ./[Java File Name].class ../WEB-INF/classes/
#systemctl restart tomcat

Reference

더보기

[1] https://www.youtube.com/watch?v=VPvs6SGQ9yY&list=PLq8wAnVUcTFVOtENMsujSgtv2TOsMy8zd&index=48

[2] https://www.youtube.com/watch?v=TAgXBpfJ4-o&list=PLq8wAnVUcTFVOtENMsujSgtv2TOsMy8zd&index=49

[3] https://www.youtube.com/watch?v=fprA9EePanQ&list=PLq8wAnVUcTFVOtENMsujSgtv2TOsMy8zd&index=50