在 JSP 中设置 Content-Type 和 Status-Code

Setting Content-Type and Status-Code in JSP

这是一个由两部分组成的问题。
第 1 部分:我想根据我正在做的 Accept header 设置 jsp 页面的 content-type

<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 属性进行了实验。我也不想使用 scriptlet 标签。
第 2 部分:我想在 JSP 页面中动态设置 status code 而无需 scriptlet 标记的帮助。
目前我在做
<% response.setStatus(200) %>
我知道它可以在 servletfilter 中设置,但我希望它从 jsp 页面或通过 custom tag.Kindly 指南设置我通过这个。

解决方案
我偶然发现了我以前使用过 setAttribute() 的工作,所以我尝试了这个并且它有效所以这就是它可以完成的方式。
对于这两个部分,通过扩展 BodyTagSupport 创建一个自定义标签,我们可以通过这种方式在其中获得 HttpServletResponse 对象:

HttpServletResponse response = (HttpServletResponse) pageContext.getResponse();

获得 response 对象后,您可以轻松设置 Content-Typestatus code