Java 在JSP中,如何动态设置contentType?

Java 在JSP中,如何动态设置contentType?,java,jsp,servlets,content-type,Java,Jsp,Servlets,Content Type,我有一个非常简单的JSP,如下所示: <%@ page contentType="application/json" %>${actionBean.response} <% if (actionBean.isJson()) { response.setContentType("application/json"); } else if (actionBean.isJsonp()) { response.setContentTyp

我有一个非常简单的JSP,如下所示:

<%@ page contentType="application/json" %>${actionBean.response}
<%
    if (actionBean.isJson()) {
        response.setContentType("application/json");
    } else if (actionBean.isJsonp()) {
        response.setContentType("application/javascript");
    }
%>
${actionBean.response}
actionBean.response
返回一个
字符串
。有时该字符串是json,其内容类型为“application/json”,但有时该字符串是jsonp,其内容类型为“application/javascript”。但我不知道如何动态设置contentType的值

  • 我尝试过在contentType周围使用
    ,但它给了我一个错误,告诉我不能设置contentType两次
  • 我已经尝试使用EL作为属性的值,但它没有得到扩展

  • 有没有办法动态设置此值

    我不认为jsp是用来做这件事的。您可以在javascript函数中捕获JSON响应,而无需声明内容类型

    我也从未见过任何jsp页面变成javascript文件


    您可以同时使用

    您可以尝试使用Scriptlet(不理想,但我不确定是否有其他方法),如下所示:

    <%@ page contentType="application/json" %>${actionBean.response}
    
    <%
        if (actionBean.isJson()) {
            response.setContentType("application/json");
        } else if (actionBean.isJsonp()) {
            response.setContentType("application/javascript");
        }
    %>
    
    
    

    编辑:正如Joop在评论中提到的,请确保您没有使用@page指令设置contentType。

    “我认为jsp不应该这样做”这句话中的“那”到底是什么?有一个内容类型,而不是html范围内的任何内容类型(我可能误解了这一点,但在使用struts开发jsp的6年中,我从未见过它)好的,那么你会怎么做呢?好的,JSON在javascript中使用,所以我们使用ajax调用并捕获结果并解析它。关于javascript,它不应该是动态的,所以你应该能够使用声明。动态值应该在你的页面中初始化。我想我不需要一个。但是从技术上讲,返回api resp的内容onse是一种呈现形式。在
    @page
    指令中省略
    contentType
    属性。我将对此进行一次尝试,并将其标记为有效答案。谢谢