在 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 <set>: "ContentType"
我的其他 EL 表达式得到了正确的评估,所以我已经对 isELIgnored
属性进行了实验。我也不想使用 scriptlet 标签。
第 2 部分:我想在 JSP 页面中动态设置 status code
而无需 scriptlet 标记的帮助。
目前我在做
<% response.setStatus(200) %>
我知道它可以在 servlet
或 filter
中设置,但我希望它从 jsp
页面或通过 custom
tag.Kindly 指南设置我通过这个。
解决方案
我偶然发现了我以前使用过 setAttribute()
的工作,所以我尝试了这个并且它有效所以这就是它可以完成的方式。
对于这两个部分,通过扩展 BodyTagSupport
创建一个自定义标签,我们可以通过这种方式在其中获得 HttpServletResponse
对象:
HttpServletResponse response = (HttpServletResponse) pageContext.getResponse();
获得 response
对象后,您可以轻松设置 Content-Type
和 status code
这是一个由两部分组成的问题。
第 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 <set>: "ContentType"
我的其他 EL 表达式得到了正确的评估,所以我已经对 isELIgnored
属性进行了实验。我也不想使用 scriptlet 标签。
第 2 部分:我想在 JSP 页面中动态设置 status code
而无需 scriptlet 标记的帮助。
目前我在做
<% response.setStatus(200) %>
我知道它可以在 servlet
或 filter
中设置,但我希望它从 jsp
页面或通过 custom
tag.Kindly 指南设置我通过这个。
解决方案
我偶然发现了我以前使用过 setAttribute()
的工作,所以我尝试了这个并且它有效所以这就是它可以完成的方式。
对于这两个部分,通过扩展 BodyTagSupport
创建一个自定义标签,我们可以通过这种方式在其中获得 HttpServletResponse
对象:
HttpServletResponse response = (HttpServletResponse) pageContext.getResponse();
获得 response
对象后,您可以轻松设置 Content-Type
和 status code