View_EL & Custom Tag & JSTL
※ View를 View답게 해주는 기능_JAVA 코드 없애기
.jsp 페이지에는 JAVA코드가 단 한줄도 없어야함
JAVA코드를 줄여주는 3가지
- EL
- Custom Tag
- 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" %>