这是一个由两部分组成的问题。
第 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
进行了实验属性。我也不想使用 scriptlet 标签。
第2部分:我要设置status code
动态动态,无需 仅来自 JSP 页面的 scriptlet 标记的帮助。
目前我正在做
<% response.setStatus(200) %>
我知道它可以设置在 servlet
中或filter
但我希望将其设置为 jsp
页面或通过 custom
标签。请指导我完成此操作。
最佳答案
解决方案
我偶然发现我之前的工作中使用了 setAttribute()
所以我尝试了这个并且它有效,所以这就是它可以完成的方法。
对于这两个部分,通过扩展 BodyTagSupport
创建自定义标记,我们可以通过这种方式获取 HttpServletResponse
对象:
HttpServletResponse response = (HttpServletResponse) pageContext.getResponse();
获得response
对象后,您可以轻松设置Content-Type
和状态代码
关于jsp - 在 JSP 中设置 Content-Type 和 Status-Code,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41317577/