我有一个很好地格式化的“JSP文档”(“JSP in XML”),当生成网页并发送给用户时,会删除一些换行符。
现在非常奇怪的部分:显然“主”.jsp总是将所有删除其换行符,但对于主.jsp中包含的任何后续.jsp,换行符似乎是随机删除的(某些在那里,其他人不是。)
例如,如果我正在查看从Firefox提供的网页并询问“查看源代码”,我会看到生成的内容。
那么,是什么决定了什么时候/如何保留/删除换行符?
这只是我编写的一个例子......你可以强制使用.jsp来实现这个目的:
<body><div id="page"><div id="header"><div class="title">...
或者这个:
<body>
<div id="page">
<div id="header">
<div class="title">...
我认为删除了换行符以节省带宽,但如果我想保留它们怎么办?如果我想保留与我的.jsp文件中相同的XML缩进怎么办?
这可行吗?
修改
按照skaffman的建议,我看了一下生成的.java文件,而“main”没有很多 out.write ,但没有一个写标签或新行。与该文件相反,我从主要.jsp中包含的所有内容都有很多行,如:
out.write("\t...\n");
所以我猜我的问题保持完全相同:什么决定了输出中包含/删除标签/空格/换行符的方式?
答案 0 :(得分:7)
JSP.6.2.3语义模型
...
为了清楚地解释空白的处理,我们遵循的结构 XSLT规范。处理JSP文档的第一步是识别 文档的节点。 然后,所有只有空格的文本节点都是 从文件中删除;唯一的例外是jsp:text元素中的节点, 保持逐字。结果节点的解释如下所述 以下部分。模板数据要么直接传递给响应,要么直接传递给响应 通过(标准或自定义)行动进行调解。
因此,如果您想保留空格,则需要在<jsp:text>
中包含所需的部分。
答案 1 :(得分:2)
不是一个非常精确的答案,但根据this message,贾斯帕可能会这样做(我承认我没有检查自己):
我有一个搜索,并没有想到 之前已经问过这个。
我一直把我的JSP页面写成XML 文档(.jspx后缀)和一个 让我烦恼的差异 在使用简洁的XML文档之间 语法和(2.0之前的)旧语法 是换行,或缺乏 前者。
处理后的XML文档导致 标签不间断的XHTML 通过间距或换行符。
我完全理解背后的概念 为什么会这样;第一个XML 文档被解析为它的节点 树,然后生成XHTML 基于这棵树。
然而,我是理解 白色间距不必 一路上迷路了。我查了一下 尤其是碧玉代码 org.apache.jasper.compiler.Node,和 粗略的检查揭示了很多 .trim()调用,可能是 不必要地删除间距。 但是,我不太熟悉 这段代码果断地说。
总之,这可能是一个错误/区域 改善。无论如何,有没有 通过嵌入换行符的方法 组态?我有信心成为 能够用丑陋,丑陋来实现这些 CDATA部分,或类似技术 (jsp:文字?)......但在我去之前 麻烦,是否更容易/更整洁 方式是什么?
消息很旧但this comment也报告了相同的行为,您的问题似乎暗示它仍然适用。
不确定是否可以更改此行为(不使用过滤器)。
答案 2 :(得分:0)
<trim-directive-whitespaces>true</trim-directive-whitespaces>
如果您在<jsp:text>
中使用上述指令,则web.xml
内的空格会被删除。鉴于BalusC's answer中引用的语义模型,该指令仅在您不使用XML语法时才有用。
(Tomcat 6.0.16; Servlet 2.5声明; XML语法中的JSP 2.1声明)