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

标签 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部分:我要设置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/

相关文章:

php - 如何防止通过 Zend Framework 中关联的模块/ Controller /操作路径访问路由?

javascript - CSS 和 JS 未加载到 JSP servlet 映射上

java - JSP/EL 的省略号(缩写文本)

java - 向 MySQL 数据库中插入数据

java - 使用 foreach 小时值在 JSTL 中打印

jsp - JSTL EL 无效表达式 : javax. el.ELException: 在 Tomcat 7 中

xml - 使用 Tomcat 获取 web.xml 文件以在 Apache 服务器上运行

java - 无法使用JSP从mySQL数据库获取数据

java - 为 HttpURLConnection 获取 404

python - 如何使用基于类的 View 为 Django 指定自定义 404 View ?