본문 바로가기
개발자/백엔드 웹 개발자 과정(국비)

[디자인패턴] EL(Expression Language) & JSTL

by 초응 2023. 2. 20.

jstl : 키워드화 시켜 제시.(뷰단에 있는 내용들은 개발자 입장에서가 아닌 디자이너와 퍼블리셔 입장에서 생각해야함.)

 

jstl을 쓰기 위해선 라이브러리가 필요하다.

1. 톰캣 사이트 들어가기

https://tomcat.apache.org/

2. 메뉴의 taglibs 들어가기

3. Servlet 2.4, JavaServer Pages 2.0 다운로드

4. binaries /   jakarta-taglibs-standard-1.1.2.zip     (933k)다운로드

5.압축풀고 jar 파일 복사

-> 원본은 항상 보관해 놓도록 한다!

 


- 선언부 <%!%> 클래스 내부에 번역됨

-스크립트릿 <%%> : 서블릿으로 번역될 때 서비스에서 번역, 비지니스 로직을 구현한다.

-익스프레션 <%=%> out.println의 생략형(표현식)

==> ${값}

 

Expressio languge (표현언어): 값을 표현하기위해서만 나온언어

 

[EL (Expression Language) 표현언어란?]

1) JSTL(JSP Standard Tag Library)1.0 규약에 소개된 내용으로써 JSP 2.0 규약에 새롭게 추가된 기능.

2) 값을 표현하는데 사용되는 새로운 스크립트 언어로써 JSP의 기본 문법을 보완하는 역할을 한다.

3)표현언어가 제공하는 기능

-  JSP 네가지 기본 객체가 제공하는 영역의 속성 사용(page,request,session,application)

- 집합 객체에 대한 접근 방법 제공

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

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

ㄴ(메서드를 써도 된다고 생각할수 있는데 MVC를 쓰면서 지켜야할 약속은 view(jsp)에서는 자바 메서드를 실행해서는 안된다.기능호출X)

ㄴ(여기서의 메서드 호출 기능은 데이터를 반환받는 getter 호출을 의미함)

-표현 언어만의 기본 객체 제공

 

[표현언어의 표현 방법]

표현언어는 $와 표현식 그리고 괄호{}를 사용하여 값을 표현한다.

${값}

값 부분에는 표현언어가 정의한 문법에 따라 값을 표현하는 식이 온다.

(표현 언어는 커스텀 태그의 속성이나 비 스크립트 요소 부분에서도 사용 가능)

 

[El의 기본객체] - 기억할 것

- requestScope : request 기본 객체에 저장된 속성의 <속성,값> 매핑을 저장한 Map 객체

- sessionScope: session 기본 객체에 저장된 속성의 <속성,값> 매핑을 저장한 Map 객체

- param : 요청 파라미터의 <파라미터 이름, 값> 매핑을 저장한 map 객체, 값의 타입은 String[]으로서, request.getParameterValue(이름)의 결과와 동일하다.

-Cookie : <쿠키 이름, Cookie>매핑을 저장한 Map 객체, request.getCookies()로 구한 Cookie배열로부터 매핑을 생성한다.

 

[El의 데이터타입]

-자바의 모든 자료형은 출력이 가능하다.(boolean, 정수, 실수, 문자열)- "", '' 둘 다 문자열로 인식한다.-null 은 아무것도 보여주지 않는다. (조건 판단을 하지 않아도된다.)

El의 수치 연산자 El의 비교 연산자 El의 논리 연산자
덧셈 : +
뺄셈 : -
곱셈 : *
나눗셈 : / 또는 dix
나머지: % 또는 mod
== 또는 eq
!= 또는 ne
< 또는 lt
> 또는 le
>= 또는 ge
&& 또는 and
|| 또는 or
!  또는 not

- EL 사용시 주의점

1. null은 빈문자열이 출력된다.

2. +를 하게 되면 문자연결이 아닌 산술연산이 된다. ( 문자가 들어오면 파싱을 함, 파싱이 안될경우 에러남)

3. el은 연산하기 위한 목적으로 나온것이 아니고 표현하기 위해 나옴. 

ㄴ / 몫이 아닌 몫과 함께 나머지 값도 출력됨.

 

***VIEW에서는 비지니스 로직을 구현하지 않기로 함 . 비지니스 로직은 action이나 컨트롤러에서 해야함**

 

[empty연산자 ]

형식 : empty<값>empty 연산자는 검사할 객체가 텅 빈 객체인지 검사하기 위해 사용됨.1) 값이 null 이면 true2) 값이 빈 문자열("")이면 true3) 값이 길이가 0인 배열이면 true4) 값이 빈 Map이면 true 5) 값이 빈 Collection이면 true( 컬렉션에는 List, Set, Array등이 모두 포함됨)6)  이외의 경우 false 리턴ex) ${empty param.name} 


[JSTL(표준 태그 라이브러리)]

-JSTL은 계속적으로 사용이 증가되고 있는 추세다.

- 많이 사용되는 사용자 정의 태그를 모아서 JSTL 이라는 규약이 만들어짐.

- 스크립틀릿, 표현식을 사용하는 것 보다 훨씬 간결한 문법 구조를 지원.

-JSTL은 5가지 태그를 지원.(외울거는 Core)

 

jstl을 사용하기 위해선 라이브러리가 필요함+ 선언 필요

 

[Core Tag]

- 변수 지원 / set  : JSP에서 사용될 변수를 설정.(컨트롤러에서 넘어온 데이터 저장해서 사용, 변수 선언할 때 사용된다.)

- 흐름제어 / if : 조건에 따라 내부 코드를 수행

- 흐름제어 / choose: 다중 조건을 처리할 때 사용.

- 흐름제어 / forEach : Collection의 각 항목을 처리할 때 사용.

- 흐름제어 / forTokens : 구분자로 분리된 각각의 토큰을 처리할 때 사용.

-url처리 /  url : url을 재작성.

 

 

[Core Tag - 변수지원/

<c:set>]

- EL 변수의 값이나 EL변수의 프로퍼티의 값을 지정할 때 사용 된다.

- 자료형은 쓸 필요 없다. 자동적으로 형을 잡음.

- 보관을 하고 출력한다는 목적을 가지고 있다.

-대괄호를 이용해서 특수문자 접근 가능.

 

 

자바 스크립트 :  코어, dom , bom


[Core Tag - 흐름태그 /

<c:if> ]

-단일 if문이라고 생각하기

-중첩된 if~else 블록과 같은 효과를 낼 순 없다.

 


[Core Tag - 흐름태그 /

<c:choose>&<c:when>&<c:otherwise>]

-자바의 switch구문과 if-else 블록을 혼합한 형태로 다수의 조건문을 하나의 블록에서 수행하고자 할 때 사용된다.


 

[Core Tag - 흐름태그 /

<C:forEach>]

형식: <c:forEach var="변수" items="아이템"> items속성 :  map, 배열, Collection등

- break와 continue가 없다. (중간에 멈출 수 없다)

- 증감이 양수로만 된다.

-확장된 for문을 기반으로 만들어짐.


[Core Tag - 흐름태그 /

<C:forTokens>]

형식: <c:forTokens var-"token" items="문자열" delims="구분자">