JSP/Servlet | JSTL(JSP Standard Tag Library) | 출력 및 변수 <c:out>, <c:set>, <c:remove>


프로그램을 배우면 제일 초반에 배우는 것이 변수이다. JSTL에서도 변수를 다루는 태그가 존재한다. 변수의 출력 및 선언, 삭제에 대해서 설명한다.

출력 <c:out>

속성

항목 설명 필수 여부 기본값
value 출력되는 값 필수
default 변수가 null일 경우 대체 출력되는 값 body
escapeXml 태그가 특수 XML 문자를 이스케이프해야 하는 경우 true이다. true

사용 형태

기본 형태

<c:out value="foo" />
  • 값인 foo가 그대로 출력된다.

변수 사용 및 기본값 대체

<c:out value="${name}" default="foo" />
  • 지정된 변수할 경우에는 ${변수명}으로 지정한다.
  • name 변수가 null 일경우 default 값이 대체 출력된다.

사용 예시

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
      <title><c:out> 태그 예제</title>
</head>
<body>
      <c:out value="${'<c:out> , &'}"/>
</body>
</html>

결과 표시

<tag> , &

부록 : XSS(Cross-site Scripting)

크로스 사이트 스크립팅는 공격자가 특정 코드를 서버에 보내어 의도하지 않은 프로그램이 실행되는 경우를 말한다. 보통 자바 스크립트인 경우가 많은데, 사용자로 부터 값을 받아 화면에 표시하게 되는 경우에는 항상 조심을 해야 한다.

예를 들어, 사용자에게 <script>alert(1)</script>라는 문자열을 받아서 화면에 그대로 표시하게 되면 경고창이 표시가 될 것이다. 이때, <c:out>를 이용하여 문자열을 escape를 하게 되면 스크립트 언어는 실행되지 않고 입력 받은 문자열을 그대로 표시만 하게 된다.

<c:out>는 XSS 방어에 유용하다.

변수 선언<c:set>

속성

항목 설명 필수 여부 기본값
value 정보 저장 body
target 속성을 수정해야 하는 변수명
property 수정할 속성
var 정보를 저장할 변수명
scope 정보를 저장할 변수의 범위 Page

사용 형태

기본 형태

<c:set var="name" value="foo" />
  • 보통 일반적으로 변수명과 값만 사용하는 경우가 많다.

scope 설정

<c:set var="name" value="foo" scope="request" />
  • page, request, session을 지정할 수 있는데, 따로 지정하지 않으면 기본값인 page로 지정된다.

변수 값 변경

<c:set var="name" value="foo" />
<c:set var="name" value="hello" />
  • 기존에 선언된 변수명으로 동일하게 선언을 하면 마지막에 선언된 변수값을 저장된다.

사용 예시

<%@ taglib uri = "http://java.sun.com/jsp/jstl/core" prefix = "c" %>
<html>
<head>
      <title><c:set> 태그 예제</title>
</head>
<body>
      <c:set var="foo" scope="session" value="Hello World"/>
      <c:out value="${foo}"/>
</body>
</html>

결과 표시

hello

변수 삭제 <c:remove>

<c:set>을 통해 정의된 변수를 완전히 삭제할 경우에 사용한다.

속성

항목 설명 필수 여부 기본값
var 삭제할 변수명 필수
scope 삭제할 변수의 범위 모든 범위(scope)

사용 형태

기본형태

<c:remove var="name" />

scope 설정

<c:remove var="name" scope="page" />
  • scope를 지정하지 않을경우 동일한 이름의 변수를 모두 삭제한다.

사용 예시

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
      <title><c:remove> 태그 예제</title>
</head>
<body>
      <c:set var="foo" value="hello" scope="session"/>
      <p>삭제 전 foo=<c:out value="${foo}"/></p>
      <c:remove var = "foo"/>
      <p>삭제 후 foo=<c:out value="${foo}"/></p>
</body>
</html>

결과 표시

삭제 전 foo=hello
삭제 후 foo=