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