サーブレット・jspを使い、View部分を表示するのと
テンプレートファイルとしてhtmlファイルを読み込み、変数展開(置換処理)「StringBufferをnewして」するのでは、どちらがよろしいのでしょうか?
サンプルとして、先輩から頂いた、ソースコード(プログラム設計)が、上記の後者の方でして、サーブレット技術を書籍等で勉強した私にとって(前者)、どちらが良いのか悩んでしまいました。
Webデザイナさんにとっては、taglibを使うよりも、簡単な($NAME$のような記述)変数置換の方がいいのかなとも思いました。
※ちなみに、プログラムの可読性はあまり良いとはいえません。
(TomcatとApacheをコネクトした場合)htmlを動的に生成した際の処理スピード(パフォーマンス)、Velocity等を使った場合などもあわせて、jspを使うメリット・デメリット等を教えて頂けたら、後の参考にしたいとおもいますので、ご教授いただけたらと思います。
No.2ベストアンサー
- 回答日時:
JSPを使うのでしたら、Includeそのものがテンプレートを使用するのと同じ役割を成せますよね
magicjournyさんが補足で付けている文章を読む限り、JSPで開発を進めているみたいですね。
それでしたら、HTMLファイルなり、JSPファイルなりをincludeでテンプレートファイルとして使用すれば良いのではないでしょうか?^^
つまり、MVCモデルになりますね(笑
ココからはServletとJSPの速度の比較について書かせて頂きますが、ServletとJSPは、一見コンパイルを済ませるServletの方が処理が早いと思いがちですが、それはサーバにJSPファイルがキャッシュされていない時のみです。
TomcatでJSPを動かす際、閲覧要求があると同時にJSPファイルを一旦Servletソースに書き換えてコンパイルするという処理をサーバ側で行うのです。
一番最初にページを閲覧する人にとっては、待機時間がありますが、二度目以降、サーバ側にJSPがキャッシュが残っている限りは、コンパイル済みのデータを使用して処理してクライアント側に送信するので、サーバにキャッシュさえされていれば、Servletと処理速度が理論上は変わらない事になります。
Velocityの処理の事も含めて、参考URLを貼り付けて置きます。
参考URL:http://www.jajakarta.org/velocity/velocity-1.2/d …
coral0さん、ありがとうございます。
改めてよりいっそう理解が深まりました。
VelocityのURLは、とても参考になりそうです。
※書き込み内容の「一番最初にページを閲覧する人」っていうのは、プログラマーの自分になりそうですね。(笑
No.4
- 回答日時:
>※私も考えたのですが、htmlの「変数置換」方式だと、ファイル自体をReadしないといけないので、その分パフォーマンスが落ちるということでよろしいでしょうか?
たとえば、片方はソースに書いて表示するのみ、片方は置換を行って表示するとして、これらの機能は違うものです。テンプレートの置換をすることが一つの利用者への機能、サービスであり、その機能を載せているものと載せていないものを比較してパフォーマンスが落ちるとは私個人は表現しません。必要でないなら載せなければ速度は出るのが当然です。要は必要な機能をいかに早く処理させるかという事でパフォーマンスというのではないでしょうか?
その点からも、ファイルの読み込み方、変数の使い方に注意するといいのではないでしょうか?
たとえば読み込みに関してはBufferを使用する。
他には一気に変数へファイルの内容を詰め込むのではなく、一行ずつ読み込み変換していく。また、その時の変数はループの外で宣言をしループ内で使いまわしをしていくなど。
それで、使用に耐えられない速度であるならば別の方法を選択するしかないでしょう。
gantsu-teacherさん、ありがとうございます。
>たとえば、片方はソースに書いて表示するのみ、片方は置換を行って表示するとして、これらの機能は違うものです。テンプレートの置換をすることが一つの利用者への機能、サービスであり、その機能を載せているものと載せていないものを比較してパフォーマンスが落ちるとは私個人は表現しません。必要でないなら載せなければ速度は出るのが当然です。要は必要な機能をいかに早く処理させるかという事でパフォーマンスというのではないでしょうか?
なるほどと思います。
確かに、プログラミングの書き方(パターン?)によって、違うものだと認識しました。
No.3
- 回答日時:
ユーザビリティ(?)を上げる目的であるならば、簡単な変数置換にしてあげるほうがいいかも知れないですね。
taglibは属性を使用しなければならなくなった時に再考すればいいかと思います。それで、includeですが、JSP:includeと@includeですが、動きが少し違います。
JSP:includeは昔の仕様では一部のhtml拡張子などのファイルしか読み込めません。それと、includeされたソースに対してサーブレットの解析は行われません。
一方@includeについてはJSPの一部として読み込んだ後にサーブレットの解析が行われます。
スピードでいうならば更新されるまでリコンパイルがされないことから@includeではないでしょうか?
それからVelocityはかなり良いです。
XMLテンプレートパーサとして使用しましたが非常に高性能でした。難点は新たに言語を覚えなければいけないところでしょうか(^^;
gantsu-teacherさん、ありがとうございました。
私も、Velocityには、先日雑誌で読んだときに、興味を持っていまして、「比較的学習しやすい」と載っていたので、これから勉強しようとおもいます。
※私も考えたのですが、htmlの「変数置換」方式だと、ファイル自体をReadしないといけないので、その分パフォーマンスが落ちるということでよろしいでしょうか?
No.1
- 回答日時:
私もmagicjournyさんと同じ事を思ったことがあります。
Servlet・JSP内でHTML表示部分を作成すると、確かに処理は早いので、テンプレートとしてHTMLファイルを読み込むよりも良い様にも思えます。
しかし、もしホームページの外見を変更と言う事態になった際、前者のServlet・JSP内でHTML処理をしていると、全てのソースファイルを修正しなければならなくなるので修正が困難ですが、後者のテンプレートを使用する方法だと、テンプレートファイルである程度の外見を決めているので、テンプレートHTMLファイルを修正するだけで修正が済むので、非常に修正が簡単になり、他にも後者の利点として、再コンパイルをしなくても良いと言うことが挙げられます。
処理速度面から見ると、前者のServlet・JSPでHTML表示部分を作成する方が処理が早いですが、汎用性面を見ると、後者のテンプレート方式が後々修正が楽なので、複雑なページを作らない限りは、こちらの方式を用いる方が良いと思いますよ^^
この回答への補足
質問した後に、気付いたのですが、テンプレート式の場合だと、<jsp:include>が使えないのでは?と思いました。
回答内での「複雑なページ」というのは、<jsp:include>
のような処理という認識でよろしいでしょうか?
※補足ですが、htmlソースのテンプレート式だと、if文等の記述が書けないので、半強制的にMVCモデルらしいということになりますでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語初心者の質問失礼します。
-
ファイル名の先頭にアンダース...
-
Javascript で INI の読み書き
-
csvファイルを開かずに文字を検...
-
ハッシュの計算時間について
-
Visual Stadio2008でjarファイ...
-
RPGでファイル名(もしくはレコ...
-
BMP → AVI 作成について
-
CSVファイルへの保存の際、デー...
-
アプリケーション終了時例外エ...
-
Excelマクロでの再読込み方法
-
XMLファイルの表示について
-
ASP .NETでファイル選択ダイア...
-
UTL_FILEにて既存のExcelに追加...
-
Access2010の最適化設定について
-
分割コンパイルの#defineについて
-
VBAにてEXCEL以外のファイル(テ...
-
大きいサイズのテキストファイ...
-
ドラッグアンドドロップでファ...
-
CSVファイル読み込み
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語初心者の質問失礼します。
-
csvファイルを開かずに文字を検...
-
ファイル名の先頭にアンダース...
-
Excelマクロでの再読込み方法
-
テキストファイルの最終行を削...
-
C言語のfopenについて教えてく...
-
ASP .NETでファイル選択ダイア...
-
CSVファイルへの保存の際、デー...
-
SGファイルって何ですか?
-
VBに、Cのincludeのようなもの...
-
VBAにてEXCEL以外のファイル(テ...
-
アプリケーション終了時例外エ...
-
大きいサイズのテキストファイ...
-
fopenできる上限の変更
-
ドラッグアンドドロップでファ...
-
分割コンパイルの#defineについて
-
バッチで118項目のCSVを処理し...
-
【C#】リソースファイルの埋め...
-
マウスポインタの変更
-
XMLファイルの表示について
おすすめ情報