LANGUAGE/JSP 2020. 3. 11. 12:34

갑자기 JSP 소스를 분석해야 하는 친구를 위한 간단정리

(특정 소스를 분석하여 다른언어의 지식이 있는 JSP알못에 맞춰 열거적으로 개념을 설명한 노트이다.)

JSP (Java Server Page) ?

  • HTML내에 자바 코드를 삽입하여 웹 서버에서 동적으로 웹 페이지를 생성하고 웹 브라우저에 돌려주는 언어이다. (from 위키백과)

1. 그냥 HTML처럼 사용 +@

서버로 부터 제공받은 Model 데이터를 활용하여

  • 조건에 따라 HTML을 생성
  • 반복되는 패턴의 HTML을 간단히 생성

2. Controller를 거쳐서 온다. Model 객체에 추가한 속성들을 사용

  • JSP에서 다음처럼 적으면 자동으로 model이 가진 해당 속성명칭의 값으로 파싱된다.
    ${속성명} 

3. 지시자

  • 특별한 지시를 내릴 때 사용한다. 보통 상투적으로 사용.
  • 종류: page, include, taglib
    • page: (jsp파일 최상단에 적용)
        <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    • include: 자주쓰는 페이지를 불러올 때 사용, (jsp파일내 원하는 곳에 적용)
        <%@ include file="include/header.jsp" %>
    • taglib: 특정 기능 설정 (jsp파일 최상단에 적용)
        <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!-- 다양한 동적기능 사용가능 -->
        <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> <!-- 날짜포맷 변경 -->         

4. 스크립틀릿 (Scritlet)

  • Java 코드를 사용할 수 있다. 비추!
    <% out.println("Hello") %>

5. JSTL (JSP Standard Tag Library)

  • 더욱 동적으로 HTML을 생성할 수 있다. 강추!

1. Core Tag

  1. 설정
    • JSP파일 상단에 지시자로 선언
        <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  2. 활용
    • <c:out /> - 변수의 출력
      • 일반적인 문자출력
          <c:out value="${value}"/>
      • c:out을 사용하는 이유는 => 다음은 ElementNode가 아닌 문자그대로 TextNode로서 출력해주는 역할을 한다.
          <c:out value="<script type='text/javascript'>alert("Hey!");</script>" />
      • 무슨말이냐? => 그냥 ${}로 출력하거나 다음처럼 escapeXml="false" 옵션설정 후 출력하면 TextNode가 아니라 ElementNode로 받아들여 경고창이 실행된다.
          <c:out value="<script type='text/javascript'>alert("Hey!");</script>" escapeXml="false" />
    • <c:forEach /> - 반복문
      • 단순 자료형 List 반복문
          <c:forEach items="${numberList}" var="number" varStatus="status">
              <p>${status.count}. <c:out value="${number}" /></p><br/>
          </c:forEach>
      • 객체 List 반복문
          <c:forEach items="${itemList}" var="item" varStatus="status">
              <p>${status.count}. <c:out value="${item.name}"/> - <c:out value="${item.price}"/></p><br/>
          </c:forEach>
      • 특정 Index 범위 반복문
          <c:forEach var="i" begin="0" end="3" step="1">
              <p><c:out value="${i}" /></p>
          </c:forEach>
      • 그외
          <c:forTokens />             
    • <c:if /> - 조건문 (else는 없다)
      • 숫자비교
          <c:if test="${number == 1}">
              <div>One !</div>
          </c:if>
          <c:if test="${number > 0 && number < 10}">
              <div>One to Nine !</div>
          </c:if>
          <c:if test="${name == '김포동'}">
              <div>포동아!</div>
          </c:if>
          <c:if test="${name != '김포동'}">
              <div>포.. 포... Who are you?</div>
          </c:if>
      • 빈값확인 - 문자열(null 또는 ''), 숫자(0), 비어있는 List/배열
          <c:if test="${empty number}">
              <div>Hello?</div>
          </c:if>
          <c:if test="${empty itemList}">
              <div>Hello?</div>
          </c:if>
      • 안 빈값확인 - 위의 빈값 조건이 아닐 때
          <c:if test="${not empty someVariable}">
              <div>Hello?</div>
          </c:if>
          <c:if test="${not empty itemList}">
              <c:forEach items="${itemList}" var="item">
                  <div><c:out value="${item.name}"/> - <c:out value="${item.price}"/></div>
              </c:forEach>
          </c:if>
    • <c:choose /> - Switch문
        <c:choose>
            <c:when test="${number == 1}">
                <div>You are number 1</div>
            </c:when>
            <c:when test="${number == 2}">
                <div>You are number 2</div>
            </c:when>
            <c:otherwise>
                <div>You are number 0</div>
            </c:otherwise>
        </c:choose>
    • <c:redirect /> - 페이지 이동!
      • 이동!
          <c:redirect url="/url/to/some.jsp" />
      • Prameter와 함께 이동!
          <c:redirect url="/url/to/some.jsp">
              <c:param name="number" value="10"/>
          </c:redirect>
    • <c:url /> - URL 생성
        <c:url value='/url/to/some.jsp'/>
    • <c:import /> - 페이지 첨부
        ...
    • <c:set /> - 변수의 선언 및 제거
        <c:set var="name" value="김포동" />
    • <c:remove /> - 변수의 선언 및 제거
        ...
    • <c:catch /> - 예외 처리
        ...

2. Format Tag

  1. 설정
    • JSP파일 상단에 지시자로 선언
        <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
  2. 활용
    • 날짜포맷 변경
        <p>날짜: <fmt:formatDate pattern="yyyy-MM-dd HH:mm" value="${noticeVO.regdate}" /></p>

'LANGUAGE > JSP' 카테고리의 다른 글

JSP  (0) 2015.05.04
JSTL  (0) 2015.05.04