Относительно недавно при работе с одним проектом, основанном на JSP, я столкнулся с ошибкой в экранировании кавычек на строке, которая на первый взгляд не предвещала ничего плохого:
<aui:a href="<%= "/someValue" + userId %>" label="<%= someTitle %>"/>.
ERROR [jsp:154] org.apache.jasper.JasperException: /jsp/projects/edit.jsp(16,55)
Attribute value ... is quoted with " which must be escaped when used within the value
Как выяснилось, в соответствии со спецификацией JSP 2.0, JSP выражение вида
<tags:someTag value="<%= "someValue" %>" />
является некорректным, так как требуется экранирование внутренних кавычек. Правильные варианты выглядят следующим образом:
<tags:someTag value='<%= "someValue" %>' />
<tags:someTag value="<%= \"someValue!\" %>" />
<tags:someTag value='<%= \"someValue\" %>' />
Но что же делать в случае если нужно работать с уже готовым проектом, не соответствующим данной спецификации? К счастью есть несколько решений, которые могут избавить от необходимости исправлять кавычки по всему коду. (Я использовал Tomcat, решения приведены для него)
Для того, чтобы компилятор Jasper не требовал строгого экранирования можно:
1) Задать параметр CATALINA_OPTS
CATALINA_OPTS="-Xmx... -Dorg.apache.jasper.compiler.Parser.STRICT_QUOTE_ESCAPING=false"
2) Или добавить в файл ../tomcat/conf/catalina.properties
строку:
org.apache.jasper.compiler.Parser.STRICT_QUOTE_ESCAPING=false