JSTL (Javaserver pages Standard Tag Library)

JSTL 이란

  • 자바서버 페이지 표준 태그 라이브러리 (javaserver pages standard tag library, JSTL)
  • jsp 애플리케이션에 핵심 기능을 캡슐화하는 JSP 태그 모음
  • jstl 태그의 분류
    • Core Tags (가장 일반적으로 사용함)
    • Formatting tags
    • SQL tags
    • XML tags
    • JSTL Functions
  • jstl core 태그를 사용하려면 tablib 지시자를 페이지 상단에 포함해야한다
  • <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<c:out > 태그

  • "<%= %>" 와 작동방식이 거의 비슷함
  • 입력받은 값을 화면의 문자열로 바꿔주는 역할. 무조건 문자열로 출력하기에 xss (Cross site scripting) 공격을 막을 수 있다 (= xml태그를 자동으로 escape 처리할 수 있기에 실제 tag로 평가되지 않음)
    // 기본형
    <c:out value="값" [escapeXml="true" default="기본값"]/>
    
    // EL 태그 형식을 사용할 때 함께 사용한다
    <c:out value="${value}"/>
    
    // escapeXml의 false 상태일 때는 EL 태그를 사용할 떄와 동일하며 입력한 스크립트가 실행되어 보안에 취약하다
    <c:out value="<script type='text/javascript'>alert(스크립트 실행);</script>" escapeXml="false"/>

<c:url > 태그

  • url에 자동으로 컨텍스트 패스(context path)를 붙여준다. 따라서, context가 변경되더라도 url을 수정할 필요가 없게되어 유지관리 측면에 유리하다
  • var 속성을 지정하면 해당 변수에 url 값을 저장하고, 그렇지 않으면 현재 위치에 생성한 url을 출력한다
// 기본 형태
<c:url value="url" [context= "컨텍스트" var="변수명" scope="범위"] > 
  <c:param name="파라미터 이름" value="파라미터 값" /> 
</c:url>

// ajax의 url 부분에 사용하는 경우
$.ajax({
    url: <c:url value="/res/sample.jpg"/>
    type: "GET",
    data: {testParam : test}},
    contentType: 'application/json;charset=UTF-8',
    dataType: 'json',
    ...
}

// url을 var 속성 변수에 저장하고 사용하는 경우
<c:url value="/res/sample.jpg" var="url"/>

- 사용 시 유의사항
    - 클라이언트의 브라우져가 쿠키사용을 금지하면 로그인 유지가 힘들어진다. 이 때 세션을 유지하기위해 링크 뒤에 특정값(sessionId)을 부여해줘서 로그인을 유지해준다.
    - 이 때, sessionId가 url에 포함되는 경우 파일명의 일부로 간주될 수 있음. 해결방법으로는 EL로 대체, 정규 표현식으로 치환, 페이지 세션 끄기가 있다

// <c:url /> 태그 없이 jsp context path를 붙이는 방법
// case 1 
<a href="${pageContext.serveltContext.contextPath}/res/sample.jpg"> 
// case 2
<a href="${pageContext.request.contextPath}/res/sample.jpg">

기타

서버에서 JSTL 사용 시 동작순서

  • 서버는 JAVA>JSTL>HTML>Javascript 순서로 동작

JSP 처리 문법들

  • 스크립틀릿 (<% %> 이 안에 자바코드 넣은 것)
  • 표현식 (<%= %>)
  • JSTL (<c:out> <c:if> 등등)
  • EL (${})

JSP 처리 문법은, 웹 브라우저로 웹페이지를 보내기 전에 WAS에서 처리. 따라서, 웹 브라우저는 JSP 문법들을 볼 수 없다 (이미 실행된 결과만을 볼 수 있을 뿐)
반면, 자바스크립트는 고스란히 웹 브라우저로 전송되기에 웹 브라우저에서 자바스크립트를 읽어서 처리함

레퍼런스

https://www.tutorialspoint.com/jsp/jsp_standard_tag_library.htm
https://backstreet-programmer.tistory.com/105
https://okky.kr/articles/805277
https://brilliantdevelop.tistory.com/52
https://offbyone.tistory.com/319
https://jaehoney.tistory.com/63
https://lifejusik1004.tistory.com/entry/JSP-JSTL-cout-%ED%83%9C%EA%B7%B8-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0