是否可以在jsp中的条件上设置页面内容类型或为单个jsp设置不同的内容类型

时间:2014-04-11 06:56:27

标签: java xml json jsp

我想要显示JSON&使用单个jsp页面的XML。 一次只有一个属性来自java类。 我的代码看起来像这样。

<%
        String json = (String) request.getAttribute("userRequestedJsonById");
        if (!StringUtility.isNullOrEmpty(json)) {%>
            <%=json%>
        <% } else { %>
            <%
            String xml = (String) request.getAttribute("searcherRespondedXmlById");
            if(!StringUtility.isNullOrEmpty(xml)) {%>
                <%@page contentType="text/xml"%>
                <%=xml%>
            <%}%>
        <%}%>

我正在使用一个名为JSONVIEW的插件来正确显示json。如果它找到内容类型xml,它将无法工作。 内容类型仅在条件上设置,jsp包含此内容类型甚至条件不满足。 我不太了解jsp set内容类型是如何工作的,有没有其他方法可以做到这一点或限制在特定条件下设置内容类型xml。

感谢。

1 个答案:

答案 0 :(得分:2)

设置内容类型需要在打印任何内容之前完成,因此您需要摆脱导致空白打印的标记的无意义打开和关闭。然后,您将使用response.setContentType()

<%
   String json = (String) request.getAttribute("userRequestedJsonById");
   if (!StringUtility.isNullOrEmpty(json)) 
   {
       response.setContentType("application/json");
       out.print(json);
   }
   else 
   {
       String xml = (String) request.getAttribute("searcherRespondedXmlById");
       if(!StringUtility.isNullOrEmpty(xml)) 
       {
          response.setContentType("text/xml");
          out.print(xml);
       }
   }
%>

如果你打算使用Scriptlets来保持你的代码块打开并使用out.print()而不是打开,关闭,然后&lt;%= var%&gt;,并再次打开,它也会更干净。那太难以理解了。