스크립팅 원소:

1) 선언문(declaration) <%! 자바코드 %>

2) 스트립틀릿(scriptlet) <% 자바코드 %>

3) 출력식, 표현식(expression) <%= 자바코드 %>

 

스크립팅 원소를 더 편하게 쓸수있는 라이브러리->JSTL

 

Servlet / JSP에는 기본적으로 내장되어있는 객체가 존재함. 

        총 4종류가 존재하며 각각 영향을 미칠 수 있는 범위가 다름. 

        1. page scope  현재 페이지(현재 Servlet 또는 현재 JSP 에서만 사용 가능)
        
        2. request scope 
        -> 요청 받은 Servlet/JSP + 요청 위임한 Servlet/ JSP 
        -> (2페이지 이상)
        
        3. session scope
        -> 사이트에 접속한 브라우저당 1개씩 생성됨 
            같은 브라우저끼리 공유가 됨
            브라우저 종료 또는 세션 만료시 소멸
            브라우저가 종료되지 않거나 세션이 만료되지 않으면 계속 유지
            클라이언트가 서버에 접속하면 세션을 1개 생성해서 저장하는 것임

        4. application scope 
            -> 하나의 웹 애플리케이션 당 1개 생성. 
            -> 서버 종료 전까지 웹 애플리케이션 어디서든 사용 가능

JSTL/EL

EL(Expression Language) : JSP의 표현식을 조금 더 효율적이고 간단하게 작성하는 언어

 

JSTL

JSP에서 사용하는 태그 라이브러리로 
JSP에서 자주 사용하거나 공통적으로 사용되는 코드를 쉽게 사용하기 위해
태그화하여 표준으로 제공함.

 

https://tomcat.apache.org/download-taglibs.cgi 접속
jar files -> impl, EL, Spec 다운로드
WEB-INF/lib 폴더에 추가

 

JSTL 사용을 위한 선언 방법

 

JSTL을 사용하고자 하는 JSP가 있을 경우
해당 JSP 최상단에 JSTL 라이브러리를 추가하는 지시자 taglib를 작성해야 한다.

 

EX) /<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>/

 

prefix : 접두사. 다른 태그와 구별할 수 있는 namespace;

 

uri (unifomr resource identifier): 네트워크 상에서 자원을 구변하는 식별자
자원을 구분하는 유일한 주소
(url: uniform resource locator -> 인터넷에서 특정 자원 위치 지정 )
->uri에 작성하는 주소는 네트워크 상의 주소가 아닌 다운로드 받은 라이브러리 상의 주소가 아닌
  다운로드 받은 라이브러리 내부 구분 주소

 

[  변수 선언 c: set 태그  ]

-변수를 선언하고 초기화를 진행하는 태그(초기화 무조건 수행)
-c:set 태그로 선언한 변수는 EL을 이용해서 출력할 수 있다.

특징 1: 별도의 변수 타입 지정을 하지 않는다.
특징 2: 변수의 범위(scope)를 지정할 수 있다.
(page request session application)
var : 변수명
value : 저장할 값
scope : 변수 범위 

 

ex) /<c:set var="num1" value="100" scope="session/>/

 

[  변수 삭제 (c:remove)  ]

지정한 변수를 특정 scope 또는 모든 scope에서 제거
ex) 
게시글 작성 -> 오류 발생 -> 다시 작성페이지 돌아옴 -> 이전 내용이 모두 삭제
이를 해결하기 위해 작성 완료 시 session에 글 내용을 임시 저장
->정상적으로 글 등록이 완료되면 임시 저장된 내용을 삭제

 

<c:remove var="num1" scope="session"/>

 

[  조건문 - if문 (c:if 태그)  ]

if문을 태그 형식으로 작성한 것.
별도의 else 구문이 존재하지 않음

test 속성 : 조건을 작성하는 속성 EL 형식으로만 작성 가능.

1. if(조건식) ==  <c:if test="조건식">

2. if else if else == c:choose -> c:when -> c:otherwise

3. for문 + 추가기능 == c:forEach

 

/<c:if test="${test1>test2}">
test1이 더 큽니다.
</c:if>/
별도의 else 구문이 없으므로 필요 시 반대 조건의 c:if를 작성해야 함 

 

[  조건문 - if~ else if~ else(c:choose , c:when, c:otherwise)  ]

c:choose 태그 내부에
c:when 태그를 이용하여 조건 작성(if, else if )
c:otherwise 태그를 이용해 조건을 만족하지 않는 경우 작성(else)

<%--choose문 안에 주석쓰면 오류남 --%>

 

/ <c:choose>
<c:when test="${param.aaa>10}">
10보다 큼
</c:when>

<c:when test="${param.aaa ==10}">
10과 같다
</c:when>

<c:otherwise>
10보다 작다
</c:otherwise>
</c:choose>/

 

[  c:forEach 태그  ]

- java의 for문 + 추가 기능을 가지고 있는 태그
- 속성

var: 현재 반복 횟수에 해당하는 변수 (==int i )
begin: 반복 시작 값
end:  반복 종료 값
step: 반복 시 마다 증가할 값 (--- 여기까지 쓰면 일반 for문), 미작성 시 기본값 1

items: 반복 접근할 객체 명(Collection 객체)(-- items 추가시 향상된 for문)
varStatus: 현재 반복에 해당되는 상태 정보

- 제공되는 값 
1) current : 현재 반복 횟수 또는 현재 접근중인 객체
2) index : 현재 객체가 몇번째 인덱스인지 반환 (0부터 시작)
3) count : 현재 반복문이 몇바퀴 반복 중인지 반환 (1부터 시작)
4) first : 첫 번째 반복일 경우 true 반환
5) last : 마지막 반복일 경우 true 반환

 

[  일반 for문 형식 사용  ]
/<c:forEach var="i" begin="1" end="6" step="1" >
<h${i}>안녕하세요 forEach 작성 테스트 중입니다 ${i}번째 시도</h${i}>
</c:forEach>/

 

[  향상된 for문처럼 사용  ]

/<c:forEach var="item" items="${paramValues.lang}" varStatus="vs">

~~내용~~

</c:forEach> /

 

 

 

 

+ Recent posts