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 표준에 맞습니다.
- 태그 라이브러리 정의 파일에서 해당 속성의
rtexprvalue
태그 값을true
로 지정했을 때만 JSP 표현식을 사용할 수 있습니다.