JSP 수업 #04 JSP 응용(2)

sookyoung.k·2022년 12월 20일
0

JSP

목록 보기
5/8

👓 스코프(Scope)

웹 서버(WAS)에서 객체 또는 변수가 생성된 후 유효할 수 있는 범위

  • page: 페이지 내에서 지역 변수로 사용
  • request: http요청을 WAS가 받아서 웹 브라우저에게 응답할 때까지 변수가 유지되는 경우

  • session: 웹 브라우저 별로 변수가 관리되는 경우 사용

  • application: 웹 어플리케이션이 시작되고 종료될 때까지 변수가 유지되는 경우 사용

Scope명 유지범위 활용 방법 JSP 내장 객체
pageScope 요청된 페이지 내부에서 사용 지역변수처럼 사용 pageContext
requestScope 요청부터 응답까지 데이터 리퀘스트를 할 때 request
sessionScope 브라우저 종료 또는 설정 시간 사용자별로 정보 저장 시 session
applicationScope 웹 어플리케이션이 종료될 때까지 사용자에게 공통적으로 무엇인가 보여주고자 할 때 application

공통함수:
void setAttribute(String Key, Object value); Object getAttribute(String key);

🎆 커스텀 태그

사용자 정의 태그!

우리가 html 등을 직접 만든다고 생각하면 된다!
스크립트릿 사용을 줄이고 태그와 같은 형태로 쓰고, 직접 만드는 경우보단 JSTL을 섞어서 사용한다.

🎇 EL

표현 언어(Expression Language)

변수, 자바 객체 혹은 자바빈 객체를 손쉽게 사용하게 해준다.

객체의 메소드도 호출이 가능하며 출력 외에도 사칙, 비교, 논리, 삼항연산이 가능하다.

간단하게 변수나 객체를 참조할 수 있으며, 데이터가 없거나 null 객체를 참조할 때 에러가 발생하지 않는다.

자바빈 객체를 참조하는 방법 : ${저장이름.변수명}

활용

기본적인 연산 사용 가능

${10 + 20} // 사칙연산, 30
${10 * 20} // 사칙연산, 200
${true && false} // 논리연산, false
${10 >= 20} // 논리연산, false
${user.name == "홍길동"? "교수": "학생"} // 3항 연산, 이름이 홍길동이면 교수 출력 

배열, 맵 데이터 연동

${myList[0]} // 배열인 경우
${myMap["name"]} // 맵인 경우

특정 스코프에서 사용할 경우 ${스코프명.객체id명.객체의 필드}

디폴트는 모든 scope

이름: ${requestScope.m.name}

✨ JSTL

커스텀 태그 라이브러리

JSP에서 스크립트릿(자바 코드 블록)을 사용하지 않고 HTML 형식을 유지하면서 조건문, 반복문, 간단한 연산 등을 사용할 수 있게 한다.

실제 구현된 라이브러리 파일이 필요하다!

JSTL을 JSP를 사용하려면 taglib 지시어롤 추가해야 한다.

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

c: 접두어, 바꿀 수 있지만 그대로 사용하는 것을 권장
uri: 반드시 정확한 경로를 사용해야!

✨ JSTL의 간단한 문법들

<c:if>

자바의 if문과 유사하다! (하지만 else는 지원x)

scope도 지정이 가능하지만 필수는 아니다.

<c:if test="조건" [var="결과 변수"] [scope="{page|request|session|application}">
</c:if>

test에서 선언한 조건을 만족하면 태그 내용을 실행한다!

예시)

<c:if test="${msg == 'user1'}" var="result">
	test result: ${result}
</c:if>

= msg 속성값이 user1인 경우 결과 출력!

<c:forEach>

자바의 for문과 유사!

하지만 커스텀 태그 특성상 정밀한 설정이 불가하기 때문에 제공되는 속성을 잘 활용해야 한다.

<c:forEach [var="참조 객체"] [varStatus="상태 정보 변수"] begin="시작" end="종료" [step="반복 단계 증가 값, 1이 기본"]>
	반복 출력되는 부분
</c:forEach>

var: 배열, 리스트 등 집합형 객체
varStatus: 반복 진행 상황을 참조하기 위한 객체
주어진 데이터를 모두 순환하지 않고 특정 구간과 상승 단계를 지정할 수 있다.

예시)

<c:forEach var="m" items="${members}" begin="0" varStatus="status" end="5">
index: ${status.index} / 
count: ${status.count} <br>
name: ${m.name} <br>
email: ${m.email}<br>
<hr>
</c:forEach>

= members는 이전 페이지에서 전달된 리스트 객체
= 순혼하면서 아이템이 하나씩 m에 전달된다
= status 객체를 통해 인덱스, 횟수 확인
= m으로 참조되는 객체는 name, emial 필드에 대한 get/set 메소드가 있어야 접근 가능

<c:set>, <c:out>

<c:set>: 특정 scope에 값을 저장하는 기능(=setAttribute()) - 문자열, 배열 저장 가능
<c:out>: 출력을 위한 태그

<c:choose>, <c:when>, <c:otherwise>

if ~ else if 문 혹은 switch 문과 같은 형식으로 사용할 수 있다.

하지만 복잡한 조건 구성은 권장하지 x

<c:forTokens>

자바의 String Tokenizer와 유사하게 구분자로 문자열을 나눈다. (파싱이라고 함)

profile
영차영차 😎

0개의 댓글