기타/JSP

JSP 표현식 언어와 태그확장

inanJeong 2020. 6. 9. 10:51

1. 스클립트가 없는 JSP 페이지 작성이 가능하도록 하여 가독성이 좋은 JSP 페이지를 개발할 수 있는 EL 표현식을 활용

2. 새로운 액션을 도입할 수 있는 태그라이브러리 기능을 사용하여 사용자 정의 태그를 정의하고 사용

 

 

표현식 언어

  • JavaBeans 컴포넌트에 저장된 애플리케이션 데이터를 쉽게 접근할 수 있도록 해준다.
  • immediate evaluation
    • ${}
    • JSP 컨테이너에서 해당 페이지 컴파일시 평가
  • deferred evaluation
    • #{}
    • JSF 제어기에서 해당 페이지의 생명주기동안 적절한 때에서 평가
  • EL표현식 무시 방법   <%@ page isELIgnored="true"%>

예시)

${userBean.name}
${userBean["age"]}
${userBean.age +10}

 

묵시적 객체

  • EL 표현식의 묵시적 객체
    • 명시적으로 선언하지 않고 EL표현식 내에서 사용 가능한 객체
    • 스크립틀릿, 스크립틀릿 표현식의 묵시적 객체와 다름
pageContext javax.servlet.jsp.PageContext 객체
pageScope page 범위의 속성에 대한 Map 객체
requestScope request범위의 속성에 대한 Map 객체
sessionScope session 범위의 속성에 대한 Map 객체
applicationScope application 범위의 속성에 대한 Map 객체
param ServletRequest.getParameter(String name) 호출로 얻을 수 있는 매개변수에 대한 Map 객체
paramValues ServletRequest.getParameterValues(String name) 호출로 얻을 수 있는 매개변수에 대한 Map 객체
header HttpServletRequest.getHeader(String name) 호출로 얻을 수 있는 헤더 대한 Map 객체
headerValues HttpServletRequest.getHeader(String name) 호출로 얻을 수 있는 헤더에 대한 Map 객체
cookie HttpServletRequest.getCookies(String name) 호출로 얻을 수 있는 쿠키에 대한 Map 객체
initParam ServletContext.getInitParameters(Stirng name) 호출로 얻을 수 있는 컨텍스트 초기화 매개변수에 대한 Map 객체

 

예시)

웹 브라우저:        ${header["user-agent"]}
사용자 컴퓨터:     ${header.host}
HTTP 메소드:       ${pageContext.request.method}
name 매개변수:    ${empty param["name"]?"없음":param.name}
세션ID:               ${cookie["JESSIONID"].value}

 

태그확장

  • 기존의 태그 외 새로운 태그를 정의하여 사용 가능
    • BodyTag 인터페이스 구현
    • SimpleTag 인터페이스 구현
    • 태그 파일 사용

태그 라이브러리

  • JSP 페이지 내에서 사용할 기능들을 캡슐화하고 있는 액션들의 집합
  • 사용방법
    • 태그 핸들러 클래스 정의
      • SimpleTag 또는 BodyTag 인터페이스 구현
      • 사용자 정의 태그의 실제 기능 구현
    • 태그 라이브러리 기술어(TLD) 설정
      • 태그 라이버리를 기술하는 XML 문서
      • 정의된 태그 핸들러 클래스에 대한 정보 가짐
    • taglib 지시어 설정하여 사용

 

taglib 지시어

지정한 태그 라이브러리를 가리키는 URI를 통하여 JSP 페이지 내에서 사용가능

<%@ taglib uri="/WEB-INF/tlds/mytags.tld" prefix="mytags"%>

<mytags:hello/>
  • uri: 태그 핸들러 클래스를 사용하여 개발한 사용자 정의 태그를 지정할 때 사용
  • tagdir
    • 태그 파일이 있는 디렉터리 지정
    • 일반적으로 /WEB-INF/tags/ 디렉토리 사용
  • prefix
    • <prefix>: <tagname> 형태로 태그를 사용
    • 예약어: jsp:, jspx:, javax:, servlet:, sun:, sunw:

 

 

태그 라이브러리 기술어(TLD)

  • 태그 라이브러리를 기술하는 XML 문서
  • JSP 컨테이너가 태그 라이브러리를 가지는 taglib지시어가 있는 JSP 페이지를 번역하는데 사용
  • 확장자:  .tld
  • 일반적으로 /WEB-INF/tlds 디렉터리 아래에 생성

 

 

태그 파일 사용시 프로젝트 사용 방법 순서

  • 프로젝트 생성
  • TLD 생성: /WEB-INF/tlds/mytags.tld
  • Tag Handler 구현: /src/taghandler/HelloTagHandler.java
    • mytags.tld와 연결
  • JSP페이지에서 taglib 지시어를 지정하여 사용

 

 

 

tag 지시어

  • page 지시어와 유사
  • 태그 파일 내에 한 개 이상의 tag 지시어 사용 가능