- - PR -
JSPから出力されるHTMLのトリミング
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2004-08-17 20:38
いつもお世話になっております。
現在、JSPを使用しているのですが、JSPから出力されるHTMLをトリミングしたいと考えて います。 具体的には、HTMLから改行(CRとLF)水平タブ(HT)を削除したいのです。 私としては、JSPからServletに変換される際、HTMLの出力部分で改行と水平タブを出力 させないように出来たらと思うのですが、このようなことは可能なのでしょうか? 尚、使用している環境は以下の通りです。 OS: Windows2000 SP4 AppServer: Tomcat 5.0.27 JDK: 1.4.2_05 どなたかご存知の方がいらっしゃいましたら、ご教授の程宜しくお願い致します。 | ||||
|
投稿日時: 2004-08-17 22:46
恐らく Jasper にそのような機能はありません。
JSPからServletに変換される過程に何らかの処理がしたければ JSP コンパイラに手を加える必要がありますね。 JSP に対してなんらかのプリプロセッサで処理をする、またはサーブレットフィルタにてダイナミックに処理を行う、といったところでしょうか。 | ||||
|
投稿日時: 2004-08-18 13:14
ご返答ありがとうございます。
出来れば、プリプロセッサでの処理は避けたいので、サーブレットフィルタが候補ですね。 その場合、処理の流れは、 1.クライアントからのリクエスト 2.フィルタでの前処理 3.JSPでの処理 4.フィルタでの後処理 5.クライアントへのレスポンス といった感じになると思います。 肝心のHTMLのトリミング処理を行うとしたら、4で行うことになると思うのですが、どのように実現したらいいのでしょうか。 JSPから出力されるHTMLを取得してトリミングをし、再度PrintWriterに出力内容を書き込む方法で実現は出来そうですが、そもそも出力されるHTMLの取得は出来るのでしょうか? また、そのままPrintWriterに出力するとJSPからの出力も表示されるので、これを表示させない処理も必要ですね。 私なりに調べては見ているのですが、サーブレットフィルター内で出力されるHTMLを取得する方法、JSPからの出力を削除する方法が見つかりません。 もしくは、他にいい方法がないでしょうか。 [ メッセージ編集済み 編集者: なぶ 編集日時 2004-08-18 13:32 ] | ||||
|
投稿日時: 2004-08-18 14:10
レスポンスのフィルタリングについては、この記事が参考になると思います。
http://www-6.ibm.com/jp/developerworks/java/011116/j_j-tomcat.html | ||||
|
投稿日時: 2004-08-18 14:28
こんにちわダメ猫です。
反則技ですが、JSPの最後の方で、JSPの出力情報をいじるコードを書く方法があります。 コンパイルされたJAVAコードを見ながら作ると良いです。 使うクラスは PageContext JspWriter BodyContent を参考にすると良いでしょう。 実際に実行したことは無いので保障はできませんが・・・・・・ 出力する部分はJSPでなくJAVAのコードで書けば簡単に改行は入れなくて済むのですが・・・・ このような条件で使う場合はJSPを使うメリットは少ないと思うので(JSPにしても複雑になってしまう)JAVAで表示をお勧めします。 それか、JSP内部にJSPやHTMLのインポートを使用すれば完全ではないにしろ、改行を少なくはできます。 | ||||
|
投稿日時: 2004-08-18 14:43
様々なアイデアや情報をありがとうございます。
改行とタブを削除するカスタムタグを作成してそのタグで囲んだところ、とりあえずタブと改行が削除されたHTMLが出力されました。 #結局プリプロセッサみたいなものですね。(^^; ですが、この方法だと各JSPでこのタグを使わなければならないので、やはりサーブレットフィルターのように必ず実行されるような処理にしたいと思います。 もう少し試してみます。 [ メッセージ編集済み 編集者: なぶ 編集日時 2004-08-18 14:47 ] | ||||
|
投稿日時: 2004-08-18 21:17
支障がなければ教えてください。なぜそんなことがしたいのですか?
あなたが目的を達するために、ひょっとしたら別の解決方法があるかもしれませんよ。 | ||||
|
投稿日時: 2004-08-20 19:48
詳しくはいえませんが、出力されるHTMLに改行とタブは無い方が業務の都合上、処理しやすいのです。 つまり、出力内容のファイルが1行で、尚且つタブが無いようにしたいのです。 ukさんから教えていただいたURLの内容を参考に、「HttpServletResponseWrapper」と「ServletOutputStream」のラッパークラスを作成してみたところ、Servletではうまくいきました。 しかし、JSPでは逆に何も表示されなくなってしまいました。 HttpServletResponseWrapperを継承したクラスには、PrintWriterを返すgetPrintWriterを定義しており、getPrintWriterが実行されるところまでは確認できました。 どうやら、この返されるPrintWriterのインスタンスに問題があるようです。 この2つのクラスの内容は、ukさんから教えていただいたURL http://www-6.ibm.com/jp/developerworks/java/011116/j_j-tomcat.html に記述されているコードとほぼ同様で、「ServletOutputStream」に「replaceContent」にHTMLのトリミング処理を記述したぐらいしか違いはありません。 とりあえず、この先は時間があるときにでも調査しようと思います。 ここにレスを書いてくださった皆様に感謝します。 | ||||
