6

「JSP ドキュメント」(「JSP in XML」) が適切にフォーマットされており、Web ページが生成されてユーザーに送信されると、いくつかの改行が削除されます。

ここで、本当に奇妙な部分: どうやら「メイン」の .jsp は常にすべての改行を削除しますが、メインの .jsp から含まれる後続の .jsp では、改行がランダムに削除されるように見えます (あるものとないものがあります)。

たとえば、Firefox から提供された Web ページを見て、「ソースを表示」と尋ねると、生成されたものが表示されます。

では、改行がいつ/どのように保持/削除されるかを決定するものは何ですか?

これは私が作った単なる例です... .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 ファイルを調べたところ、「メイン」ファイルには多くのout.writeがありませんが、タブや改行を書いているファイルは 1 つもありませんでした。そのファイルとは対照的に、そのメインの .jsp から含めているすべてのものには、次のような行がたくさんあります。

out.write("\t...\n");

したがって、私の質問はまったく同じままだと思います。タブ/スペース/改行が出力に含まれる/削除される方法を決定するものは何ですか?

4

3 に答える 3

7

JSP仕様に従って:

JSP.6.2.3 セマンティック モデル

...

空白の処理を明確に説明するために、XSLT 仕様の構造に従います。JSP ドキュメントを処理する最初のステップは、ドキュメントのノードを識別することです。次に、空白のみを持つすべてのテキスト ノードがドキュメントから削除されます。唯一の例外は、逐語的に保持される jsp:text 要素内のノードです。結果のノードは、次のセクションで説明するように解釈されます。テンプレート データは、応答に直接渡されるか、(標準またはカスタム) アクションを介して仲介されます。

そのため、空白を保持したい場合は、目的の部分を でラップする必要があります<jsp:text>

于 2010-05-29T14:13:27.560 に答える
2

あまり正確な答えではありませんが、このメッセージによると、ジャスパーはこれを行っている可能性があります(自分で確認しなかったことを認めます):

私は周りを検索しましたが、これは以前に尋ねられたものではないと思います.

私は JSP ページを XML ドキュメント (.jspx サフィックス) として記述してきましたが、簡潔な XML ドキュメント構文と (2.0 より前の) 従来の構文を使用する場合の違いで少し気になるのは、改行、または前の。

処理された XML ドキュメントは、スペースまたは改行によってタグが分割されていない XHTML になります。

なぜそうなるのかという概念を完全に理解しています。最初の XML ドキュメントはそのノード ツリーまで解析され、次にこのツリーに基づいて XHTML が生成されます。

ただし、途中で白い間隔が失われる必要はないことを理解しています。私は jasper コード、特に org.apache.jasper.compiler.Node をチェックしました。ざっと調べてみると、多くの .trim() 呼び出しが明らかになり、不必要にスペースを削除している可能性があります。しかし、私はこのコードについて、断言できるほど詳しくありません。

要約すると、これはバグ/改善の領域である可能性があります。とにかく、構成を介して改行を埋め込む方法はありますか? 醜い、醜いCDATAセクション、またはいくつかのようなテクニック(jsp:text?)でこれらを達成できると確信しています...しかし、その問題に取り組む前に、もっと簡単できちんとした方法はありますか?

メッセージはかなり古いですが、このコメントでも同じ動作が報告されており、あなたの質問はそれがまだ適用されていることを暗示しているようです.

この動作を (フィルターを使用せずに) 変更できるかどうかはわかりません。

于 2010-05-29T14:03:05.707 に答える
0
<trim-directive-whitespaces>true</trim-directive-whitespaces>

で上記のディレクティブを使用すると、内部の空白<jsp:text>が取り除かれますweb.xmlBalusC の answerで引用されているセマンティック モデルを考えると、このディレクティブは、XML 構文を使用していない場合にのみ役立ちます。

(Tomcat 6.0.16; Servlet 2.5 宣言; XML 構文での JSP 2.1 宣言)

于 2010-05-29T15:10:48.360 に答える