jnk1m
Foliage IT
jnk1m
전체 방문자
오늘
어제
  • 분류 전체보기 (209)
    • Today I Learned (34)
    • Java (47)
    • Database (15)
    • [NHN Academy] (27)
    • Spring (47)
    • HTML + CSS + JavaScript (11)
    • JSP (3)
    • Node.js (10)
    • React Native (2)
    • 기타 (8)
    • 스크랩 (5)

인기 글

최근 글

티스토리

hELLO · Designed By 정상우.
글쓰기 / 관리자
jnk1m

Foliage IT

Spring

[Spring] Day04 (Note): EL, JSTL, Model

2022. 3. 22. 00:42

2022/3/21

 

표현 언어 Expression Languqge EL
:
모든 웹에서 사용되는 웹 언어 (스크립트 언어)
표현에만 초점을 맞춘 언어. 값을 저장하고 대입한다는 개념이 아님.
출력문을 더 쉽게, 간결하게 사용할 수 있는 언어. 범용적인 공용 언어.

EL
기능

1.   JSP 네 가지 내장 객체가 제공하는 영역의 속성 사용 가능 (request, session, etc)

2.   수치 연산, 관계 연산, 논리 연산자 제공

3.   자바 클래스 메서드 호출 기능 제공

4.   쿠키, 내장 객체의 속성 등 JSP를 위한 표현 언어의 내장 객체 제공

5.   람다식 이용한 함수 정의와 실행 (EL3.0)

6.   스트림 API를 통한 컬렉션 처리 (EL 3.0)

7.   정적 메서드 실행 (EL3.0)

 

구조
스크립트 표현식과 비교: <%= num %> <%= vo.getId()%>
EL                             : ${num}          ${vo.id} 참조 변수명. 변수명
*JSP
의 스트립트 태그(스트립틀릿<%%>, 표현식 <%=%>, 선언부 <%!%>)를 제외한 나머지 부분에서 사용 가능.
*
문자형 홑/겹 따옴표 구분 없음

 

#연산자
:
산술, 논리, 비교 등 존재
산술: +, - ,*, (/ 또는 div), (% 또는 mod)
산술 연산자는 정수와 실수 타입에만 동작.
숫자 + 객체(문자) -> 숫자로 변환해서 연산 결과 출력.
객체가 null일 경우 Long타입의 0으로 연산 처리되며, 연산 없이 단순 null이면 출력을 아예 안 함. 예: java: syso(“10”+10)  --> 1010
EL: ${“10”+10} -->20 숫자로 변환됨.
${“
일”+10} --> 숫자로 변환 불가. 에러!
${null
인 객체 + 10} --> 10
${null} -->
출력 안 함. 만약 null이라고 출력이 된다면, “null”이라는 문자열이 들어가 있는 것.

 

#비교 연산자
== 또는 eq 또는 = ${10 == 10} ${10 qu 10} ${10 =10}
!=
또는 ne
<
또는 lt (less than)
>
또는 gt (greater than)
<=
또는 le
>=
또는 ge
영문 비교 연산 표기법 알아두자

#논리 연산자
&&
또는 and
||
또는 or
!(
반전) 또는 not

 

#empty 연산자
empty
값/ 변수
값/ 변수가 빈 객체인지 검사할 때 주로 사용 (ArrayList나 배열)
값이 null, 빈 문자열, 길이 0, 빈 Map, 빈 Collection 객체인 경우 true 리턴.

#삼항 연산자

 

EL 객체
#
객체

1.   requestScope: request 내장 객체에 저장된 속성의 ‘속성명, 값’ 매핑을 저장한 Map 객체

2.   sessionScope: session 내장 객체에 저장된 속성의 ‘속성명, 값’ 매핑을 저장한 Map 객체

3.   param: 요청 파라미터의 ‘파라미터명, 값’ 매핑을 저장한 Map 객체. 값 타입 String String request.getParameter(“파라미터명”)의 결과와 동일

4.   paramValues: 요청 파라미터의 ‘파라미터명, 값 배열’ 매핑을매핑을 저장한 Map 객체
String [] request.getParameter(“
파라미터명”)의 결과와 동일

5.   cookie: ‘쿠키 명, cookie’ 매핑 저장한 Map 객체.
request.getCookies()
로 구한 쿠키 배열로 매핑 생성

6.   pageContext: 내장 객체 page context와 동일

7.   pageScope: 내장 각체 pageContext의 ‘속성, 값’ 매핑을 저장한 Map 객체

8.   applicationScope: application 내장 객체에 저장된 속성 매핑하여 저장한 Map 객체

9.   header: request.getHeader() 결과와 동일

10. headerValues

11. initParam: 초기화 파라미터 매핑 저장한 Map
application.getInitParameter(
파라미터명)의 결과와 동일

 

#객체 접근
Java: <%= session.getAttribute(“member”)%>
EL: ${sessionScope.member}
${member}
전체를 통틀어 member라는 이름의 값이 한 개라면 xxxScope 생략도 가능
속성 명이 유일하거나 구분 가능하다면 이름만 기술하여 사용 가능
(
찾는 순서: page, request, session, application 순서대로 검색하여 찾음)
*
쿠키: ‘쿠키 이름, Cookie객체’
‘id, cookie 객체’가
있다면, ${cookie.id.value} 쿠키 객체에 저장된 데이터가 나옴.

 

JSTL : JSP Standard Tag Library

JSP로 만들어진 커스텀 태그 중에서 많이 사용하는 것들을 모아서 JSTL이라는 표준을 만듦. 커스텀 태그라고도 부르며 EL과 함께 사용된다.
JSTL
을 이용하면 스크립트 코드에서 적용한 기능을 태그로 만들어서 치환 가능. 자바를 태그화.

XML 기반으로 작성되어, 시작 태그와 종료 태그 쌍으로 이루어져 있고, 홑 태그 /> 마지막에 꼭! 닫아줘야 한다. 대소문자대소문자 구분.

라이브러리 배치
jstl-1.2.jar
(Spring Legacy Project
로 프로젝트 생성하면 기본적으로 배치되어 있음. 추가 배치 필요 x)

 

JSTL 태그 종류
Core:
가장 기본적인 태그:
<%@ taglib prefix=”태그 식별자” uri=”외부 라이브러리 경로”%>
                               
접두어 c       http://java.sun.com/jsp/jstl/core
국제화: 포매팅, 숫자나 날짜 관련 태그: 접두어 fmt: http://java.sun.com/jsp/jstl/fmt
XML: xml
분리하기 위해 만들어졌으나, 이제 사용 안 함

데이터베이스: 태그, 우리는 사용 안 함. DAO(자바)에서 처리.
함수: 함수 처리.우리는 사용 안 함. 모든 연산은 MVC 패턴에 따라 Model에서 처리하고 결과물만 JSP로 보내줄 것.

1. Core
태그
: Attribute(
속성) 변수 선언, 삭제 등 변수 관련 작업과 if, for 같은 제어문, URL 처리 등에 사용

*core
태그 선언:
이 JSP 파일에서 core 태그를 사용하겠다고 디렉티브 태그 이용하여 선언해줘야 사용 가능.
<%@ taglib prefix=”c” uri=” http://java.sun.com/jsp/jstl/core”%>

*core
태그 사용
<c:
태그명 속성명= “값”></c:태그명> : 쌍 태그
<c:
태그명 … /> : 홑 태그 (닫는 / 표시 필수)

*
태그 종류
변수 지원

set: JSP
에서 사용할 변수 설정
remove:
설정한 변수 제거

흐름 제어
if:
조건문 (자바 if와 비슷)
choose:
자바 if~switch와 비슷
forEach:
반복문. 자바 for~forEach문
forTokens:
반복문. for문, 구분자로 분리된 각각의 토큰 처리.

URL
처리
import: <%@ include
와 비슷, url을 사용하여 다른 자원 결과 삽입.
redirect:
지정한 경로로 페이지 지동 (요청)
url: url
작성

기타
catch:
익셉션 처리 시 사용 (사용 안 함) 화면 출력 (보안 면에서는 el보다 낫다)

<c:forEach var="i" items="${arr}" varStatus="status"> <%--
배열이 가진 요소를 반복하면서 i에 담아준다 --%>

           <h3>${i}</h3>

</c:forEach>
varStatus
속성은 루프  정보를 담는 변수를 지정할 수 있고, 속성 값 (변수 명)을 명칭으로 각 상태 정보를 꺼낼 수 있다.
status.index:
실행 중인 현재 index (0~시작)
status.count:
루프 현재 실행 횟수 (1~시작)
status.begin: begin
속성 값
status.end: end
속성 값
status.step: step
속성 값
status.first:
현재 실행이 첫 번째 실행인 경우 true
status.last:
현재 실행이 마지막 실행인 경우 true
status.current:
컬렉션 중 현재 루프에서 사용할 객체

2. fmt 국제화

#fmt 태그 선언
<%@ taglib prefix=”fmt” uri=” http://java.sun.com/jsp/jstl/fmt”%>

#
태그 종류
로케일 지정 setLocale : local
인코딩: requestEncoding: 요청 파라미터 캐릭터 인코딩 지정


숫자 및 날짜
formatDate: Date
객체 포매팅
parseDate:
문자열로 표시된 날짜를 분석해 Date 객체로 변환
formatNumber:
숫자 포매팅
parseNumber:
문자열로 표시된 데이터를 분석해서 숫자로 변환
setTimezone:
시간대 정보 특정 변수에 저장
timeZone:
시간대 지정

3. Model
웹페이지의 구조는 Request에 전달된 데이터를 가지고 필요하다면 추가적인 데이터를 생성해서 화면으로 전달하는 방식으로 동작한다.
Model
의 경우는 파라미터로 전달된 데이터는 존재하지 않지만, 화면에서 필요한 데이터를 전달하기 위해서 사용한다.
예를 들어, 사용자: “게시판 3페이지 보여줘” 페이지 번호는 파라미터로 전달되지만, 해당 페이지에 보여줘야 할 결과를 뷰에 전달하려면 Model에 담아서 전달함.

스프링 MVC의
Controller는, 기본적으로 Java Beans 규칙에 맞는 객체를 다시 화면으로 객체를 전달함. (자바빈즈 규칙: 캡슐화, 변수 private + getter/setter)
좁은 의미의 Java Beans의 규칙은 단순히 생성자가 없거나 매개변수 없는 생성자를 가져야 하며, getter/setter를 가진 클래스의 객체들을 의미함.
(
예제에서와 같이) TestDTO의 경우는 JavaBeans 규약에 맞기 때문에 자동으로 다시 화면까지 전달된다. 이때 클래스명 앞글자 소문자로 데이터 넘기는 이름이 처리됨.

반면, 기본 자료형의 경우는 파라미터로 선언하더라도 화면까지는 전달되지 않는다. 전달하고 싶으면 Model 객체에 addAttribute(“이름”, 값); 으로 추가해주거나 어노테이션을 매개변수 앞에 붙여주어야 한다.

 

1.   @ModelAttribute
요청 시 넘어오는 데이터를 JSP 화면까지 보내주기 위해 Model 객체에 속성 값으로 주입하거나 바인딩할 때 사용되는 어노테이션

#1.
메서드의 매개변수 앞에 붙이기
요청 시 넘어온 데이터를 바인딩 (변수에 매칭) 해주고, Model 속성에 주입까지 되어 view에서 꺼낼 수 있음.

#2.
메서드 위에 붙이기
현재 클래스 안에서 연결되는 모든 view에서 공통적으로 필요한 객체가 존재할 경우 사용된다.

    'Spring' 카테고리의 다른 글
    • [Spring] Day05 (Note): MyBatis, DB 연동, 패키지 정리
    • [Spring] Day04 (Code)
    • [Spring] Day03 (Code)
    • [Spring] Day03 (Note): 테스트, 스프링 빈, 파라미터 전달, Model

    티스토리툴바