Front

View_EL & Custom Tag & JSTL

onivv 2024. 1. 17. 22:27

※ View를 View답게 해주는 기능_JAVA 코드 없애기

.jsp 페이지에는 JAVA코드가 단 한줄도 없어야함

JAVA코드를 줄여주는 3가지

  1. EL
  2. Custom Tag
  3. JSTL

 

[ EL ] - Expression Language

  • JSP 스크립트의 표현식(<%=%>), out.println()과 같은 JAVA 코드를 대신해 값을 출력
  • 영역(Scope) 객체값 출력  -  ${key}
  • 영역(Scope) 객체의 필드값 출력  -  ${key.변수명} 
    • request의 key값 (속성명)
    • session의 key값 (속성명)
    • application의 key값 (속성명)

  ex

기존 JAVA 코드
<% String member=(String)session.getAttribute("member") %>
<%= member %>

EL로 변경
${member}
더보기

request.getAttribute("key")  →  ${requestScope.key}  →  ${key}

session.getAttribute("key")  →  ${sessionScope.key}  →  ${key}

application.getAttribute("key")  →  ${applicationScope.key}  →  ${key}

 

▶ 참고 : Scope 우선순위

더보기

영역이 다른데 키 값이 같은경우

request와 session에 "key"가 중복되면

request가 session보다 우선순위가 높아 ${key}하면 request의 key값을 가져옴

session에 있는 key값을 가져오려면 ${sessionScope.key}

즉, key앞에 어느 scope인지 알려주기


[ Custom Tag ]

  • 개발자가 특정 기능을 수행하는 액션태그를 직접 만든 것
  • JSP의 액션태그에는 <jsp:useBean>, <jsp:include>, ... 등이 있음
  • JSP 페이지에 재사용 가능한(반복되는) 코드를 커스텀 태그에 분리해서 작성  →  중복x 가독성 ↑

▶ 커스텀 태그로 관리하면 좋은점

  • 결합도가 낮아짐 : 변경사항이 발생했을 때 태그내용만 바꾸면됨
  • 응집도가 높아짐 : 기능별로 페이지를 구성할 수 있음
  • 유지보수가 용이해짐✨

▶ 커스텀 태그 개발 방법

  • 커스텀 태그를 설정사항으로 봄
  • 따라서 WEB-INF폴더 내에 tag파일을 모아둘 폴더 생성 후 tag파일 생성
  • WEB-INF : 브라우저의 요청으로는 들어갈 수 없는 공간, 사용자가 들어올 수 없음

 

▶ 커스텀 태그 구성

  • 태그 사용 : <prefix:태그명>
  • 태그에서 사용가능한 속성 지정 : <%@ attrubute name="속성명" %>
  • 태그 바디값 지정 : <jsp:doBody/>

태그를 사용할 JSP 파일에 taglib 디렉티브를 통해 태그를 import하는 것과 같이 선언하기

  • tagdir : .tag 파일이 있는 경로
  • prefix : 별칭

[ JSTL ] - JSP Standard Tag Library

  • 개발자들이 자주 사용하는 커스텀태그들을 묶어 라이브러리 형태로 만들어 배포하는 태그 라이브러리

main.jsp - 기존

 

memberInfoBox.tag

  • attribute : 자바 세션에서 저장한 값 대신 사용
  • member != null : 빈 객체(해당 유저 없음)가 아니고
  • !member.equals("") : 값이 없을 때(페이지 처음 로드했을 때 빈값임)

memberInfoBox.tag - JSTL 적용

  • empty 연산자 : null xx , "" xx

main.jsp - Custom Tag 적용

  • attribute : 자바 세션에서 저장한 값을 attribute에 넘겨줘서 사용하기

경로 복붙용...

tagdir="어디서 불러오는지" prefix="별칭"

<%@ taglib tagdir="/WEB-INF/tags" prefix="common" %>

 

외부에서 라이브러리 가져와서 import?해주기

<c:if, foreach, ...></c>

uri="누군가 만들어준 라이브러리라서 경로 가져오기" prefix="별칭"c고정임"
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

 

함수들 모아놓은 라이브러리

uri="누군가 만들어준 라이브러리라서 경로 가져오기" prefix="별칭"fn고정임"
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>