JSP 태그 속성 값에 JSP 표현식(Expressions)을 사용할 때 인용부호 처리

JSP로 개발을 하면 다음과 같은 JSP 표현식(Expressions)을 사용하게 됩니다.

<span><%= user.getName() %></span>

이 JSP 표현식은 JSP 태그 속성 값에서도 사용할 수 있습니다.1

<threerabbitz:dropDownBox id="change_language" 
   handler="com.threerabbitz.home.domain.LanguageGroupModelHandler"
   value="<%= user.getLanguage() %>"/>

그런데 다음과 같이 인용부호(Quotation Mark)를 사용하면 톰캣에서 예외가 발생합니다.

<threerabbitz:dropDownBox id="change_language" 
   handler="com.threerabbitz.home.domain.LanguageGroupModelHandler"
   value="<%= label("lang") %>"/>

예외 메시지는 다음과 같습니다.

심각: Servlet.service() for servlet jsp threw exception
org.apache.jasper.JasperException: /layout/home_footer.jsp (line: 35, column: 130) Attribute value  label("lang")  is quoted with " which must be escaped when used within the value

이 때는 다음과 같이 인용부호에 대한 특수 문자(Escape Sequence) 처리를 하면 됩니다.

<threerabbitz:dropDownBox id="change_language" 
   handler="com.threerabbitz.home.domain.LanguageGroupModelHandler"
   value="<%= label(\"lang\") %>"/>

톰캣에서도 전에는 인용부호에 대한 특수 문자 처리를 하지 않아도 예외가 발생하지 않았지만 특정 버전 이후부터는 예외가 발생합니다. 그런데 이렇게 예외가 발생하는 것이 JSP 표준에 맞습니다.


  1. 태그 라이브러리 정의 파일에서 해당 속성의 rtexprvalue 태그 값을 true로 지정했을 때만 JSP 표현식을 사용할 수 있습니다.