일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- BOJ
- 웹
- 서버
- P Stage
- 웹 프로그래밍
- 부스트캠프
- boostcourse
- 2021 Dev-matching 웹 백엔드 개발자
- Customer service 구현
- 백준
- sts
- 서블릿
- 구현
- 백엔드
- 4기
- 레벨2
- cs50
- 프로그래밍
- QNA 봇
- AI Tech
- Django
- 프로그래머스
- 파이썬
- AI Tech 4기
- 장고
- 대회
- Naver boostcourse
- 네이버
- Naver boostcamp
- 풀스택
- Today
- Total
daniel7481의 개발일지
[웹 프로그래밍(풀스택)] JSTL & EL - BE 본문
1. EL(Expression Language)-1
표현언어(Expression Language)는 값을 표현하는데 사용되는 스크립트 언어로써 JSP의 기본 문법을 보완하는 역활을 한다. JSP에 자바가 등장하면 디자이너 혹은 프론트엔드 개발자가 혼란스러울 수도 있다. 이를 보안하기 위해 나온 것이 EL이다. 복잡한 코드 없이 직관적으로 로직을 나타낼 수 있는 표현법이라고 생각하면 되겠다.
표현언어가 제공하는 기능
- JSP의 스코프에 맞는 속성 사용
- 집합 객체(컬렉션, 프레임워크)에 대한 접근 방법 제공
- 수치 연산, 관계 연산, 논리 연산자 제공
- 자바 클래스 메소드 호출 기능 제공
- 표현언어만의 기본 객체 제공
표현 방법
문법: ${expr(표현언어가 정의한 문법에 따라 값을 표현하는 식)}
표현 언어의 기본 객체
위를 살펴보면 우리가 Scope을 공부할 때 사용했던 Scope 변수들을 그대로 사용할 수 있는 것을 알 수 있다.
또한 표현 언어는 불리언 타입, 정수 타입, 실수 타입, 문자열 타입, 널 타입 등을 사용할 수 있다.
객체 접근 규칙
문법: ${<표현1>.<표현2>}로 작성이 되면 다음과 같은 규칙이 있다.
- 표현1이나 표현2가 null이면 null값을 반환한다.
- 표현1이 map일 경우 표현2를 key로한 값을 반환한다.
- 표현1이 리스트나 배열이면 표현2가 정수일 경우 해당 정수번째 인덱스에 해당하는 값을 반환한다. 만약 정수가 아니면 오류를 발생시킨다
- 표현1이 객체면 표현2에 해당하는 getter메소드에 해당하는 메소드를 호출한 결과를 반환한다.
수치 연산자는 +, -, *, /(div), %(mod)를 사용할 수 있다. 여기서 몇 가지 특징이 있다.
- 숫자가 아닌 객체와 수치 연산자를 사용할 경우 객체를 숫자 값으로 변환후 연산자 수행(ex: ${"10"+1} = ${10+1}
- 숫자로 변환할 수 없는 객체일 경우 에러 발생
- 수치 연산자에서 사용되는 객체가 null이면 0으로 처리
비교 연산자
- == 또는 eq
- != 또는 ne
- < 또는 lt
- > 또는 gt
- <= 또는 le
- >= 또는 ge
- 문자열 비교: ${str =='값'}str.copareTo("값") == 0과 동일
empty 연산자, 비교 선택 연산자
연산자 사이의 우선순위
- [] .
- ()
- - (단일) not ! empty
- * / div % mod
- + -
- < > <= >= lt gt le ge
- == != eq ne
- && and
- || or
- ? :
표현언어를 비활성화 하기
<%@ page isELIgnored = "true" %> (기본 default 값은 false이다)
2. EL(Expression Language)-2
이번에는 EL 실습을 위하여 각 스코프에 변수를 선언하고 설정한 값을 EL 코드를 통하여 출력을 해보자. 먼저 jsp파일을 만들고, 네 가지 스코프에 대한 객체를 p1, r1, s1, a1으로 선언을 하자. 그런 다음 jsp로 이 변수들을 호출하려면 pageContext.getAttribute("p1");이런식으로 불러와야 한다. 하지만 EL을 이용하면 훨씬 수월하게 불러올 수 있다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
pageContext.setAttribute("p1", "page scope value");
request.setAttribute("r1", "request scope value");
session.setAttribute("s1", "session scope value");
application.setAttribute("a1", "application scope value");
%>
<!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>
pageContext.getAttribute("p1") : ${pageScope.p1 }<br>
request.getAttribute("r1") : ${requestScope.r1 }<br>
session.getAttribute("s1") : ${sessionScope.s1 }<br>
application.getAttribute("a1") : ${applicationScope.a1 }<br>
jsp에서는 출력되는 부분은 모두 body에 작성해줘야 한다. 위 같이 적으면 제대로 출력이 되는 것을 알 수 있다. 그러나 여기서 변수명이 겹치지 않았기 때문에, 앞에 클래스를 생략해도 된다.
pageContext.getAttribute("p1") : ${p1 }<br>
request.getAttribute("r1") : ${r1 }<br>
session.getAttribute("s1") : ${s1 }<br>
application.getAttribute("a1") : ${a1 }<br>
물론 변수명이 겹치는 경우는 처음처럼 클래스.메소드 이런식으로 정확하게 작성을 해줘야 한다. 만약 변수명이 겹치게 되면 작은 scope(page scope부터) 찾게 된다. 가독성이 좋게 되려면 scope.변수로 쓰는 것이 효율적이다.
3. EL(Expression Language)-3
이번에는 사칙연산을 EL 코드로 실행시켜보자. k라는 request scope의 객체를 선언해주고, + - / *를 해보자
k : ${k } <br>
k + 5 : ${ k + 5 } <br>
k - 5 : ${ k - 5 } <br>
k * 5 : ${ k * 5 } <br>
k / 5 : ${ k div 5 } <br>
/는 html코드로 인식이 되어 실행이 되지 않을 수 있으니 나누기는 div, 나머지는 mod로 표기해주자.
이제 비교연산자 실습을 해보자. 참 값을 가지는 m 객체를 선언하고 밑 과정을 실습해보자.
k : ${k }<br>
m : ${m }<br>
k > 5 : ${ k > 5 } <br>
k < 5 : ${ k < 5 } <br>
k <= 10 : ${ k <= 10} <br>
k >= 10 : ${ k >= 10 } <br>
m : ${ m } <br>
!m : ${ !m } <br>
10, true, true, false, true, true, true, false가 출력이 될 것이다. EL-1에서 EL을 사용하지 않을 수 있다고 했는데, jsp 페이지 위에 <%@ page isELIgnored = "true" %>를 넣으면 EL로 썼던 부분이 모두 html로 바뀌게 되는 것을 볼 수 있다.
4. JSTL(JSP Standard Tage Library) -1
JSTL은 JSP 페이지에서 조건문 처리, 반복문 처리 등을 html tage형태로 작성하게 해줄 수 있게 한다. 이를 이용하는 이유는 JSP에서 HTML과 java 코드가 섞여 있으면 프론트엔드 개발자가 유지 보수에 어려움을 겪었고 이를 해결하기 위해 JSTL이 등장했다.
먼저 JSTL을 사용하기 위해서는 tomcat 홈페이지에서 3가지 파일을 다운한 후에, WEB-INF 폴더 밑의 lib 디렉토리에 저장해줘야 한다.
위 표는 JSTL에서 제공하는 태그들이다. 본 강의에서는 코어 태그를 중점으로 다룬다고 한다.
먼저 set과 remove를 알아보자. c 태그를 사용하고 set, remove로 변수를 선언하고 제거할 수 있다. 여기서 속성명, scope, 값을 저장할 수 있다.
이클립스 프로젝트의 lib 디렉토리에 다운받은 3개의 파일을 넘겨준 후 JSP 파일에 우리가 JSTL의 코어 태그를 사용한다는 것을 알려야하기 때문에 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 을 입력해줘야 한다. 그 다음 다음과 같이 set, remove를 실습해보자.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="value1" scope="request" value="kang"/>
<!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>
성 : ${value1} <br>
<c:remove var="value1" scope="request"/>
성 : ${value1 }
</body>
</html>
'Naver Boostcourse' 카테고리의 다른 글
[웹 프로그래밍(풀스택)] SQL - BE (0) | 2022.02.15 |
---|---|
[웹 프로그래밍(풀스택)] MySQL - BE (0) | 2022.02.14 |
[웹 프로그래밍(풀스택)] Scope - BE (0) | 2022.02.13 |
[웹 프로그래밍(풀스택)] redirect&forward-BE (0) | 2022.02.09 |
[웹 프로그래밍(풀스택)] JSP (0) | 2022.02.09 |