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