2016-12-24 73 views
2

它是一个两部分问题。
第1部分:我想设置jsp页面的content-type取决于Accept头为此我做在JSP中设置内容类型和状态码

<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部分:我只想动态设置status code,而不使用仅来自JSP页面的scriptlet标记。
目前我正在做
<% response.setStatus(200) %>
我知道它可以在一个servletfilter设置,但我希望它被从jsp页面或通过custom设置tag.Kindly指导我这个。

回答

3

解决方案
我偶然发现了我以前在我用setAttribute()所以我想这和它的工作的工作,所以这是它是如何做。
对于这两个部分通过创建延伸的BodyTagSupport的自定义标签中,我们可以得到HttpServletResponse对象是这样的:

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

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