- PR -

JSPが読み込んだHTMLに動的な変数を反映させたい

投稿者投稿内容
Rasty
会議室デビュー日: 2004/03/30
投稿数: 10
投稿日時: 2004-05-06 15:04
こんにちは、お世話になります。
現在JSPとServletを利用してWebアプリケーションを作成しています。
今回のシステムでは表示用HTMLファイル作成者が開発には関わっておらず、
なおかつ今後のレイアウトメンテナンスはその方が行うということで、
JSPがHTMLファイルを読み込んで使用するという方式に決まりました。
そのため、HTMLファイルには複雑なロジックは書き込めず、
一部変数をレイアウトに影響しない範囲に表示するのみです。

現在詰まっているのはServletが投げた変数を
読み込んだHTMLソースの内容に反映させる方法です。


Servletがnameに山田太郎を入れて投げる。

HTMLファイル
<html><body>
こんにちは、<%=name%>さん。
</body></html>

JSP
HTMLファイルを読み込んで吐き出すだけの機能。

こんにちは、山田太郎さん。と表示したいのですが
上記のままではHTMLファイルにはnameの値が反映されず、
<%=name%>のままに(表示上は空欄)なっています。
(JSP側で<%=name%>を実行し、nameの値が取れているのは確認しています。)
読み込んだHTMLの内容に動的な変数を表示させるにはどのようにすればよいのでしょうか?

応急手段で<%=name%>をnameの値に置換する方法を考えてはいるのですが、
出来ればその手法は避けたいので…。
よろしくお願いします。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-05-06 15:33
@includeディレクティブを使って、そのHTMLファイルをJSPとして取り込んでしまえばいいのでは?
bubunya
大ベテラン
会議室デビュー日: 2003/01/16
投稿数: 124
投稿日時: 2004-05-06 15:38
servlet で、単純に "<%=.." のタグを書き出しているんですか?
今ひとつ何をしようとしているのかが見えないのですが、servlet の出力で "<%=..." を書き出しても単なる文字としてそのまま書かれるだけですよ。
名前を出したいのであれば、Servlet がその名前を出力すれば良いだけですよね。

PrintWriter Out = res.getWriter();
Out.print(name);

あと、例にある HTML は JSP そのものですよね? もしもデザイナがこれを作っているんだったら、そのまま .JSP にすれば良いのでは。それとも include を使おうとしてますか?
koe
大ベテラン
会議室デビュー日: 2003/07/13
投稿数: 198
投稿日時: 2004-05-06 15:40
Jakarta Velocityを使ったらどうでしょうか?
JSPとVelocityの違いについては、これを読むと参考になると思います。
http://www.jajakarta.org/velocity/velocity-1.3.1/docs-ja/casestudy1.html
HTMLしか知らないHTMLエディタでプレビューを行った時に表示があまり崩れないので、
Webデザイナーにとって受け入れやすいと思います。
#user.name などの表記法を覚える必要がありますが、一度覚えてもらえれば
後は何とかなるかと。
HTMLファイルの拡張子を一括してvmに変更するなどの対応が必要ですが
(拡張子を変更しない方法も可能だと思います)。

Velocityの使い方ですが、付属のドキュメントやJakartaJa-Jakartaのサイトが
参考になります。Velocity自身はシンプルですので、それだけで事足りるでしょう。

某社から書籍が出ていますが、日本語であるという点を除けば
上に挙げたドキュメントを超えるような内容は見当たりませんでした。
Ja-Jakartaでも翻訳済みのドキュメントが出来つつありますしね。
Rasty
会議室デビュー日: 2004/03/30
投稿数: 10
投稿日時: 2004-05-06 15:57
少し質問文に言葉が足りないところがありました。申し訳ありません。

>>ukさん
@includeを使ってみたところ<%=name%>がそのままで出力されてしまったため、
上記の質問を行いました。
読み込んで吐き出すと言うのはそう言う意図で書いたのですが、
明らかに言葉足らずでした。申し訳ありません。

>>bubunyaさん
一部JSPのタグを使えるだけで、9割強はHTMLです。
というかHTMLを書いてるところに無理やりJSPタグを入れてもらってる感じでして。
(この変な記号の意味は名前表示欄なので名前を出すところに配置してください、とか。)
HTML作成者は部外者&JSPの知識0のためJSPとして作成はしてもらえないのです。
また、ロジックの関係上HTML表示部分以外にロジック記述領域もあるため、
そのまま.JSPには出来ませんでした。
今回の例でそのまま<%=…が出てしまう原因は理解してはいるのですが、
適切な代案というものが思い浮かばず質問をした次第です。

>>koe
残念ながら今回のシステムではHTML作成者が外注のため使用することは出来ないですが、
面白そうなので眼を通させていただきます。
興味深いレス、ありがとうございます。
Rasty
会議室デビュー日: 2004/03/30
投稿数: 10
投稿日時: 2004-05-06 16:10
あれ、何か編集が出来ないですね。
koeさん、敬称付け忘れ申し訳ありませんでした。
bubunya
大ベテラン
会議室デビュー日: 2003/01/16
投稿数: 124
投稿日時: 2004-05-06 16:37
あぁ、やっとわかりました。ロジック部分を持つJSPとデザインだけのJSPを動的にマージしたいって事ですね。

include ディレクティブは静的、include タグは動的に取り込みますがページを
取り込むというよりは「結果」を取り込むので、今の状況では無理そうですね。

取り込むのを逆にするのはどうですか? つまり、デザイン側にはロジック部分を取り込むincludeディレクティブを入れてもらい、拡張子はJSPにすると。
ディレクティブを入れること自体は <%=.. と大差無い話ですし、拡張子を変えたからってデザインがおかしくなるわけではないですから。

あとは力技でHTMLを読み込んで文字列の置き換えを行ってそのまま出力かな。
Rasty
会議室デビュー日: 2004/03/30
投稿数: 10
投稿日時: 2004-05-06 16:43
やはりそれが一番のようですね。>置き換え
前者の方法も是非試してみたいのですが、あいにくと前述の理由で
あまりHTML関係に自由に触れないため後者の方法でやってみます。
ありがとうございました!

スキルアップ/キャリアアップ(JOB@IT)