Установка Content-Type и Status-Code в JSP
Это вопрос из двух частей.
Часть 1: Я хочу установить content-type
страницы JSP в зависимости от Accept
заголовок для которого я делаю
<c:if test="${fn:contains(header['accept'], 'xml')}">
<c:set var="contentType" value="application/xml;charset=UTF-8"/>
</c:if>
<c:if test="${fn:contains(header['accept'], 'json')}">
<c:set var="contentType" value="application/json;charset=UTF-8"/>
</c:if>
<jsp:directive.page contentType='${contentType}'/>
за что я получаю ответ как
Я тоже пробовал <c:set target="${pageContext.response}" property="ContentType" value="${contentType}"/>
за что я получил Invalid property in <set>: "ContentType"
Мое другое выражение EL оценивается должным образом, поэтому я уже экспериментировал с isELIgnored
приписывать. Я тоже не хочу использовать теги скриптлета.
Часть 2: Я хочу установить status code
динамически без помощи тега скриптлета только со страницы JSP.
В настоящее время я делаю <% response.setStatus(200) %>
Я знаю, что это может быть установлено в servlet
или filter
но я хочу, чтобы это было установлено с jsp
страница или через custom
Пожалуйста, проведите меня через это.
1 ответ
Решение
Я наткнулся на мою предыдущую работу, в которой я использовал setAttribute()
так что я попробовал это, и это сработало, вот как это можно сделать.
Для обеих частей создайте пользовательский тег, расширив BodyTagSupport
в котором мы можем получить HttpServletResponse
возразить так:
HttpServletResponse response = (HttpServletResponse) pageContext.getResponse();
Как только вы response
объект, который вы можете легко установить Content-Type
а также status code