Установка 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 &lt;set&gt;: "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

Другие вопросы по тегам