일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 자바
- Servlet
- github
- CSS
- redux
- media query
- 변수
- java
- HTML
- 그럼에도 불구하고
- TypeScript
- 프론트엔드
- node.js
- 자바문제풀이
- frontend
- JavaScript
- JS
- 코드업
- git
- @media
- 그럼에도불구하고
- webpack
- coding
- cleancode
- node
- react-router-dom
- max-width
- 코딩테스트
- 반응형 페이지
- react
- Today
- Total
그럼에도 불구하고
[Servlet/JSP] EL (Expression Language) 본문
EL에 대해 알아보자
[ EL : Expression Language) ]
View를 위한 데이터 추출 표현식
우선, EL을 사용하기 전에 java file과 jsp file로 값을 출력해보자
spag.java
package com.zenghyun.web;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
// controller
@WebServlet("/spag")
public class spag extends HttpServlet{
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
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); // 여기에 result를 담음
RequestDispatcher dispatcher = request.getRequestDispatcher("spag.jsp");
dispatcher.forward(request, response);
// request에 result가 저장됨
}
}
spag.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%=request.getAttribute("result") %>
</body>
</html>
출력
실행하면 짝수가 출력된다.
spag.java에서 num이 0으로 선언되었고, num이 짝수면 짝수를 출력하기 때문
여기서
? n=3을 입력하면
num이 홀수이기 때문에 홀수가 출력된다.
여기서 EL을 사용하게 되면
view에 코드 블록을 쓸 필요가 없고, java 코드도 안써도 되니까 view를 완전히 분리할 수 있다.
즉, request에서 데이터를 쉽게 꺼낼 수 있다.
ex) requestgetAttrubute(“cnt”) -> ${cnt}
${}를 사용하면 된다.
그렇다면 EL은 어떤 방식으로 사용하는 걸까?
[ EL의 데이터 저장소 ]
내장 객체 | 기능 |
pageScope | Page 영역의 생명주기에서 사용되는 저장소 |
requestScope | Request 영역의 생명주기에서 사용되는 저장소 |
sessionScope | Session 영역의 생명주기에서 사용되는 저장소 |
applicationScope | Application 영역의 생명주기에서 사용되는 저장소 |
param | 파라미터 값을 저장하고 있는 저장소 |
paramValues | 파라미터 값을 배열로 저장하고 있는 저장소 |
header | Header 정보를 저장하고 있는 저장소 |
headerValues | Header 정보를 배열로 저장하고 있는 저장소 |
cookie | 쿠키 정보를 저장하고 있는 저장소 |
initParam | 컨텍스트의 초기화 파라미터를 저장하고 있는 저장소 |
pageContext | 페이지 범위의 컨텍스트 저장소 |
ex) <%=pageContext.getRequest(). getMethod() %> //객체를 얻고 싶을 때
el에서는 함수를 호출하는 방식으로 무언갈 사용할 수 없다. 속성을 쓰는 것처럼 써야 함
단 el에서는 함수를 호출할 수 없는데 getter는 사용할 수 있다.
단, get이라는 method명은 빼야 한다.
함수 호출이 아닌 것처럼 소괄호를 빼야 함
-> ${pageContext.request.method}
저장소 종류 4가지: page객체, request객체, session객체, application객체
4개의 저장소에 우연히 같은 키워드를 심으면 어떻게 될까?
오류가 나지 않는다는 건, 충돌이 나지 않는다는거고, 충돌이 나지 않는다는건, 우선순위가 있다는 뜻
page -> request -> session -> application 순서로 진행된다.
Q) page, request, session에 cnt가 있을 때, session 객체에만 있는 cnt를 뽑아오고 싶다면?
-> ${sessionScope.cnt}!
[ EL의 연산자 ]
[].
()
not!, Empty
*, /, div, %, mod
+, -
<lt(less then), > gt(greater then), <=(less equal) , >=(greater equal)
==(equal), !=(not equal)
&&, and
||, or
? : (삼항 연산자)
여러 가지 값들을 ${}로 받아보자.
spag.java
package com.zenghyun.web;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
// controller
@WebServlet("/spag")
public class spag extends HttpServlet{
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
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); // 여기에 result를 담음
String [] names = {"zenghyun", "hi"};
request.setAttribute("names", names);
Map<String, Object> notice = new HashMap<String,Object>();
notice.put("id", 1);
notice.put("title", "zenghyun");
request.setAttribute("notice", notice);
RequestDispatcher dispatcher = request.getRequestDispatcher("spag.jsp");
dispatcher.forward(request, response);
// request에 result가 저장됨
}
}
spag.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<%
pageContext.setAttribute("aa","hello");
pageContext.setAttribute("result","hello");
%>
</head>
<body>
<!-- <%=request.getAttribute("result") %>입니다. -->
<!-- view -->
${result}<br>
${names[0]}<br>
${names[1]}<br>
${notice.id}<br>
${notice.title}<br>
${aa}<br>
<!-- 페이지 객체 뽑아냄 -->
${requestScope.result}
<!-- 얘는 짝수 홀수를 가져오고 -->
${result}<br>
<!-- 얘는 hello를 출력함 -->
${param.n}<br>
${header.host}<br>
${header.accept}<br>
<!-- accept란? 브라우저에 요청을 할 때 내가 읽을수 있는 문서의 종류,타입을 서버에 알려줌
때에 따라서는 클라이언트의 환경을 확인해서 그 클라이언트에게 전문화된 내용을 보내주고 싶을 때는 서버 프로그래머가 확인해야한다. -->
${param.n > 3}<br>
<!-- 꺽음쇠를 쓰는건 바람직하지 않다. -->
${param.n gt 3}<br>
${empty param.n }<br>
<!-- null이거나 빈 문자열이면 true 값 있으면 false -->
${empty param.n? '값이 비어있습니다':param.n }<br>
${param.n/2}<br>
<!-- 정수를 정수로 나눠도 소수점이 나온다. -->
</body>
</html>
출력
'Java, Servlet > Servlet, Jsp' 카테고리의 다른 글
[JSP] JSTL (JavaServer Pages Standard Tag Library) (0) | 2022.11.11 |
---|---|
[Servlet] service / doGet / doPost (0) | 2022.11.05 |
[Servlet/JSP] 내장 객체 (1) | 2022.11.04 |
[Servlet] 한글깨짐 해결 / Servlet Filter (0) | 2022.11.03 |
[Servlet] get / post 사용하기 (0) | 2022.11.03 |