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

时间:2016-12-24 23:20:46

标签: jsp jstl http-status-code-404 content-type page-directives

这是一个两部分的问题 第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}'/>

我得到的反应如this.
我也试过了 <c:set target="${pageContext.response}" property="ContentType" value="${contentType}"/>
为此我得到了 Invalid property in &lt;set&gt;: "ContentType"
我的其他EL表达式正在进行正确评估,因此我已经使用isELIgnored属性进行了实验。我也不想使用scriptlet标签 第2部分:我想在没有 JSP页面的scriptlet标记的帮助下动态设置status code
目前我正在做 <% response.setStatus(200) %>
我知道它可以在servletfilter中设置,但我希望它可以通过jsp页面或custom标记设置。请引导我完成此

1 个答案:

答案 0 :(得分:3)

<强>解决方案
我偶然发现了我之前使用setAttribute()的工作,所以我尝试了这个并且它有效,所以这就是它可以做到的。
对于这两个部分,通过扩展BodyTagSupport来创建自定义标记,我们可以通过这种方式获取HttpServletResponse对象:

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

在您拥有response对象后,您可以轻松设置Content-Typestatus code