프로그램언어/자바(Java)
[JSTL] Tag가 jsp 화면에 그대로 노출될 경우, escapeXml
Steve Jang
2016. 8. 29. 10:53
스프링으로 웹을 구현하는 경우, jsp 출력은 십중팔구 JSTL을 사용할 것이다.
JSTL로 로직을 구현하는 경우도 존재하지만, 왠만해서는 자바에서 비즈니스 로직을 구현하여 페이지에 전송하게 되는데.. 태그를 붙인 상태로 보내는 경우가 존재한다. (ex: 하이라이트 태그)
이럴 경우, 아래와 같은 경우가 발생한다.
검색어를 하이라이트 처리하여 전달하였지만, 하이라이트 태그가 화면에 그대로 노출되었다.
위에 적힌, 전화번호, 사람이름 등은 가라로 만든 가상의 인물이다.
JSTL로 <c:out value="값" /> 처리를 할 때, 태그처리를 자동으로 해서 생기는 문제이다.
기본적으로 escapeXml 이라는 값이 true로 처리가 되고, 이 속성은 <, > 와 같은 값들을 <, > 등으로 변경하여 화면에 뿌려주게 된다.
하지만, 태그를 원하는 대로 뿌려줘야 할 경우도 존재하니 이럴 경우 escapeXml="false" 처리를 해주면 된다.
As-Is
<c:out value="${값}" />
To-Be
<c:out value="${값}" escapeXml="false" />
위와 같이, escape를 사용하지 않는다로 명시하면
하이라이트 태그가 정상적으로 먹히는 것을 확인할 수 있다.
중요포인트
escapeXml을 설정하지 않거나, true로 설정할 경우, 출력 문자열에 포함된 HTML 특수 문자(예: <, >, &, ' 또는 ")는 해당되는 문자 엔티티 코드로 변환되고, JSP 페이지에서 생성된 HTML 페이지에 적절히 표시됩니다.