我的网站上有一个错误,似乎与CQSE(在Adobe AEM / CQ 5.6.1中运行的Servlet引擎)如何在JSP中输出内容有关。
用例只是使用.json.jsp输出JSON对象/哈希,并在JSON值中包含一些HTML片段。
这是一个给出意想不到的结果的JSP示例:
<%@include file="/libs/foundation/global.jsp"%>
<%
response.setHeader("Content-Type", "text");
%>
{"key":"<img src=\"/a/b/c/d/e/f/g/h/i.j.40.40.png\">"}
当我点击本地主机上的URL时,我得到的是:
{"key":"<img src="\">"}
当然,我在Tomcat中对它进行了测试,以确定它不是某些JSP规范的东西,并得到了:
{"key":"<img src=\"/a/b/c/d/e/f/g/h/i.j.40.40.png\">"}
答案 0 :(得分:2)
您的输出已由Sling rewriter更改 - 您可以通过将/libs/cq/config/rewriter/default/enabled
属性设置为false
来确认。该重写器解析CQ生成的所有HTML页面。您的输出不是常规HTML,因此可能存在一些解析错误导致输出无效。
重写器应仅影响内容类型为text/html
的响应,因此将其更改为text
或更好application/json
应该可以解决问题。只需使用setContentType
方法而不是setHeader
:
response.setContentType("application/json");
另外,考虑使用绑定到组件资源类型的Sling servlet和一些JSON库(例如GSON)而不是JSP。你将避免多余的空白区域,逃避问题,最后但并非最不重要的是,小程序。