[JSP] 기본 구성요소

아현·2022년 1월 16일
0

📚정리/백엔드 

목록 보기
2/3

스크립트 요소(scripting elements)

동적인 컨텐츠를 만들기 위해 프로그램 작성에 사용되는 요소

  • 스크립트릿(Scriptlet, <% ... %>) : Java 코드 작성
  • 표현식(Expression, <%= ... %>) : 변수나 수식의 결과 표현(String 형식)
  • 선언(Declaration, <%! ... %>) : 멤버변수와 메소드의 선언

지시어(directives)

<%@ 지시어이름 속성="값" ... %> 

페이지 번역이나 실행 과정에 사용되는 JSP 페이지의 설정 정보를 웹 컨테이너에게 지시

  • page
    <%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
    페이지에 대한 정보를 지정
  • include
    <%@ include file="/layout/header.jsp" %>
    정적 include, 특정 영역에 공통으로 사용할 태그나 변수, 메소드 등을 포함시킬 때 사용
  • taglib
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    사용할 태그 라이브러리 선언, 태그 라이브러리의 위치와 접두어를 지정

액션 태그(action tags)

<jsp:액션이름 속성=""></jsp:액션이름>

요청을 처리할 때 특별한 기능을 수행

  • <jsp:include>
    동적 include, 페이지의 실행결과를 포함
  • <jsp:forward>
    원래 페이지에서 사용했던 reuqest, response 기본 객체가 이동 페이지로 넘어감
    • 원래 페이지의 실행은 포워딩되며 종료되고 버퍼의 내용은 지워짐
    • 원래 페이지를 대신하여 다른 페이지를 실행, 이동 전/후 두 페이지는 같은 request 영역에 존대
    • 웹 브라우저 주소는 원래 페이지의 URL을 표시하므로 클라이언트는 강제 이동을 알 수 없음
  • <jsp:param>
    include, forward를 수행할 때 기존 파라미터보다 해당 태그에서 정의된 파라미터가 우선됨
    • request.setCharacterEncoding("UTF-8")를 통해 인코딩 설정 가능
    • 전달 데이터는 String으로 제한되므로, 다른 종류의 데이터를 전달시에는 request 내장 객체에 속성을 저장 후 전달하면 됨.

내장 객체(implicit objects)

JSP 컨테이너가 번역 과정에서 만들어서 제공하는 객체

  • Request (javax.servlet.ServletRequest, javax.servlet.http.HttpServletRequest)
    클라이언트의 HTTP 요청정보를 저장하고 있는 객체
  • Response (javax.servlet.ServletResponse, javax.servlet.http.HttpServletResponse)
    HTTP 요청에 대한 응답정보를 저장하고 있는 객체
  • Session (javax.servlet.http.HttpSession)
    클라이언트에 서버에 접속했을 때 세션정보를 저장한 객체
  • PageContext (javax.servlet.jsp.PageContext)
    page 표현과 영역을 관리, 페이지에서 사용되는 객체들의 레퍼런스 저장
    다른 내장 객체의 참조 값을 리턴하는 메소드 제공
  • Application (javax.servlet.ServletContext)
    web.xml에 저장된 설정 정보의 조회, 웹 컨테이너의 정보 조회, 로그 메시지의 기록, 폴더 정보 조회
    특정 웹 애플리케이션에 포함된 모든 JSP페이지 → 하나의 application 객체 공유
  • Out (javax.servlet.jsp.JspWriter)
    클라이언트로 보낼 컨텐츠를 출력할 때 사용되는 출력 스트림
  • Config (javax.servlet.ServletConfig)
    JSP 페이지에 대한 설정 정보 관리
  • Page (java.lang.Object)
    특정 페이지의 서블릿 설정 정보를 저장하고 있는 객체
  • Exception (java.lang.Throwable)
    예외 처리를 위한 객체

표현 언어(EL; expression language)

데이터를 쉽게 다루기 위한 간결한 수식 언어로 표현식 <%= … %>을 대신 할 수 있음
${수식}, ${객체}, ${객체.속성}, ${객체["속성"]}, ${객체['속성']}, ${배열[첨자]}

  • 자바빈이나 영역의 속성에서 저장된 데이터를 쉽게 표현 가능
  • 스크립트 요소 밖에서 사용되며, 데이터 출력 및 태그 속성 값 지정시 사용
  • 영역 내장 객체에 저장된 속성, 자바빈 객체를 쉽게 다룰 수 있음
  • 리턴 타입 : String

내장객체

  • pageScope, requestScope, sessionScope, applicationScope
    - 각 영역별 생명주기에 사용되는 저장소
    - 객체를 검색할 때 나열된 순서대로 객체를 검색
    - 만약, 특정 영역에 있는 객체를 바로 찾고자 할 때에는 ${영역이름.객체}로 접근
  • param, paramValues : 파라미터 값
  • header, headerValues : 헤더 정보
  • cookie : 쿠키 정보
  • initParam : 컨텍스트의 초기화 파라미터 값
  • pageContext : 페이지 범위의 컨텍스트 저장소

연산자

not(!), empty, and(&&), or(||), mod(%), div(/), 
lt(<), gt(>), le(<=), ge(>=), eq(==), ne(!=)

다양한 언어 조건에서 사용하기 위해 기존에 쓰는 연산 기호를 키워드 형태로 사용할 수 있음


사용자 정의 태그

사용자가 정의하는 태그로 자신만의 태그 라이브러리 개발 가능
⇨ 태그 핸들러 클래스, TLD 파일 필요

형식

액션 태그와 커스텀 태그는 모두 XML 태그

  • <prefix:tagName 속성="값" … />
  • <prefix:tagName 속성="값"> 내용 </prefix:tagName>

JSTL(JSP Standard Tag Library)

유용한 사용자 정의 태그들을 모아 표준화한 태그들의 집합

사용방법

  • 톰캣설치폴더에 위치한 JSTL 태그 라이브러리를 복사하여 프로젝트 경로 내에 저장
    • [톰캣설치폴더]\webappas\examples\WEB-INF\lib\
      • taglibs-standard-impl-{버전}.jar
      • taglibs-standard-spec-{버전}.jar
    • [프로젝트 경로]\src\main\webapp\WEB-INF\lib\
  • JSTL을 사용하는 페이지 상단에 추가
    • <%@ taglib prefix="접두어" uri="주소" %>

종류

  • 코어(c) : 변수, 흐름제어, URL처리
    • 선언 : taglib 지시어를 이용 → <%@ taglib prefix="c" uri="주소" />
    • 사용 : <c:태그 … scope="영역"> ... </c:태그>
    • 태그 : set, remove, if, choose, forEache, forTokens, import, redirect, url, catch, out
  • XML(x) : XML 관련 처리
  • 국제화(fmt) : 메시지 형식, 숫자 및 날짜 형식
  • 데이터베이스(sql) : SQL
  • 함수(fn) : 컬렉션 처리, String 처리

TLD(Tag Library Descriptor)

  • 경로 : WEB-INF/{파일명}.tld
  • 형식 : XML
    컴파일러는 /에서 /까지 모든 것을 무시합니다.

주석(Comments)

컴파일러가 컴파일 하지 않는 부분으로 프로그램 동작에 영향을 미치지 않는 코드

이름 형태 설명
Single Line Comment // text //을 시작하는 그 라인의 끝까지 주석 처리 된다.
Multi Line Comment /* text */ /* 에서 */까지의 모든 내용이 주석 처리 된다.
Documentation Comment /** documentation */ /**에서 */ 까지의 모든 내용이 주석처리 된다.
profile
💻🤦🏻‍♀️

0개의 댓글