
サーブレット・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で質問しましょう!
似たような質問が見つかりました
- Java 問題作成のWebアプリの作り方を教えてください 1 2022/11/26 22:01
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- その他(IT・Webサービス) ホームページにカウント数を表示する 2 2022/10/28 10:37
- 仕事術・業務効率化 効率的な勉強方法(分野問わず)を教えてください 1 2023/08/16 01:33
- JavaScript 【GAS】WEBアプリでハイパーリンクを挿入したい 1 2023/03/12 19:20
- HTML・CSS WEBサイトの構築。表示データとWEBデザインを分離する考え方を専門用語・業界用語では何と言うか? 8 2022/09/27 09:16
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- Visual Basic(VBA) EXCEL VBAで教えてください。 1 2022/12/22 04:20
- PHP phpでこの記述をもっと簡単に書く方法はないでしょうか…? 3 2022/11/16 19:57
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語初心者の質問失礼します。
-
ファイル名の先頭にアンダース...
-
dataファイルをxtxファイルにす...
-
BMP → AVI 作成について
-
識別子の外部結合について
-
gccでリソースファイルを使わな...
-
SSIを使わずに・・・
-
Cでのネットワークファイルの読...
-
「VBS」の「MsgBox」につ...
-
FILEポインタ配列の動的生成
-
マクロを作成したファイルを立...
-
CSVファイルへの保存の際、デー...
-
外部ファイルを読み込みたいの...
-
ソースとヘッダの境界とは?
-
VBScriptでのファイル結合処理...
-
ExcelVBA 定数宣言を外部ファイ...
-
マスタとファイルの違いって?
-
fprintfで文字化け
-
hostsファイルの登録MAX数
-
C言語 コンパイルエラー LNK1136
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語初心者の質問失礼します。
-
dataファイルをxtxファイルにす...
-
csvファイルを開かずに文字を検...
-
ファイル名の先頭にアンダース...
-
CSVファイルへの保存の際、デー...
-
グローバル変数のよくない使い...
-
バッチで118項目のCSVを処理し...
-
テキストファイルの最終行を削...
-
VBAにてEXCEL以外のファイル(テ...
-
VBに、Cのincludeのようなもの...
-
分割コンパイルの#defineについて
-
RPGでファイル名(もしくはレコ...
-
SGファイルって何ですか?
-
マウスポインタの変更
-
Excelマクロでの再読込み方法
-
【C#】リソースファイルの埋め...
-
ダイアログボックスで複数フォ...
-
C言語のfopenについて教えてく...
-
ドラッグアンドドロップでファ...
-
「VBScript」ADODB.Streamにお...
おすすめ情報