2

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

为此,我得到了响应,就像 我也尝试过的一样 , 我的其他 EL 表达式得到了正确评估,所以我已经对属性进行了实验。我也不想使用 scriptlet 标签。 第 2 部分:我想在没有来自JSP 页面的 scriptlet 标记的帮助下进行动态设置。 目前我正在做 我知道它可以在 a或 a中设置,但我希望它从页面或通过标签设置。请指导我完成此操作。这个。

<c:set target="${pageContext.response}" property="ContentType" value="${contentType}"/>

Invalid property in &lt;set&gt;: "ContentType"
isELIgnored
status code

<% response.setStatus(200) %>
servletfilterjspcustom

4

1 回答 1

3

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

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

一旦你有了response对象,你可以很容易地设置Content-Typestatus code

于 2016-12-25T11:09:45.620 回答