こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

HttpServletとjsp負荷はどっちが高い?

◆全く同じ処理をさせたとき、サーバーの負荷は変わるのでしょうか?

Aの処理のあと、Bの処理をして、その後Cの処理をさせるとき、
(1)HttpServletを継承したクラスから呼ぶか?
(2)jspで呼ぶか?
でサーバ負荷は変わるのでしょうか?

ファッション層の処理を、
案1◆コントローラ層部分が呼んで、結果を踏まえて処理制御して、、
 という形にするか?

ファッション層の処理を、
案2◆View層部分に呼ばせるか?

で、パフォーマンス観点で、どう判断すれば良いかわからず困っています。

※もし良ければ「構成」の観点でも、何か「こうあるべき」的なものがあると、それもご教授頂けますと幸いです。
.

投稿日時 - 2018-08-09 01:19:29

QNo.9525897

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(14)

ANo.14

>JSF(JavaServer Faces)の基本
>https://blog.pepese.com/entry/20131211/1386757110
>
>>コントローラ(C)
>>FacesServletというサーブレットを使う
>>実装不要
>>設定は「faces-config.xml」で行う

>良く分からないがFacesServlet自体はプログラマーが記述する必要は無いような感じ(プログラマーが記述してはならないと思われる)。
>プログラマーはfaces-config.xmlにザックリと言うと恐らくページの遷移ルールを記述すれば、そのとおりにFacesServletが動作するのだろうと思われる。
>つまり、ザックリと言うと恐らくfaces-config.xmlはFacesServletに指令を出す「ページ遷移ルール」言語を記述するのだろうと思われる。

つまり、FacesServletは完成されたコントローラであり、faces-config.xmlの「ページ遷移ルール」言語をInterpret(インタープリット)して、ページを遷移すると思われる。
つまり、ザックリと言うとFacesServletは「ページ遷移ルール」言語を解釈して動作するInterpreter(インタープリター)と考えれば分かりやすい。

投稿日時 - 2018-08-18 23:56:47

ANo.12

JSF(JavaServer Faces)の基本
https://blog.pepese.com/entry/20131211/1386757110

>ビュー(V)
>FaceletsとEL式で記述されたxhtmlファイル
>FaceletsはJSFで使うタグライブラリ
>http://docs.oracle.com/javaee/7/javaserverfaces/2.2/vdldocs/facelets/
>EL式はシャープと中括弧(#{hoge})で囲った式

EL式については下記参照。

Faceletsを書く時のEL式まとめ
http://yoshiyuki9026.hatenablog.com/entry/2017/03/27/200403

投稿日時 - 2018-08-18 22:58:27

ANo.11

JSF(JavaServer Faces)の基本
https://blog.pepese.com/entry/20131211/1386757110

>コントローラ(C)
>FacesServletというサーブレットを使う
>実装不要
>設定は「faces-config.xml」で行う

良く分からないがFacesServlet自体はプログラマーが記述する必要は無いような感じ(プログラマーが記述してはならないと思われる)。
プログラマーはfaces-config.xmlにザックリと言うと恐らくページの遷移ルールを記述すれば、そのとおりにFacesServletが動作するのだろうと思われる。
つまり、ザックリと言うと恐らくfaces-config.xmlはFacesServletに指令を出す「ページ遷移ルール」言語を記述するのだろうと思われる。

投稿日時 - 2018-08-18 22:07:29

ANo.10

>>どうやらJSF(JavaServer Faces)はフレームワークで、そのフレームワーク内に「Faces Servlet、Managed Bean」の2つのJava言語仕様が有るようです。
>>つまり、サーバー・サイドJavaには、JSP(JavaServer Page)、Servletについては「Java Servlet、Faces Servlet」、(サーバー・サイドJava)Beanについては「EJB(Enterprise JavaBeans)、Managed Bean」が有ると言う事になります。
>>「ManagedBeanは次のJSFバージョンで無くなる予定だ」そうですので ご注意下さい。

>現在は、JSP(JavaServer Page)ではなくJSF(JavaServer Faces)フレームワークのFacelets(XHTML)が推奨されていると思われます。

JSF(JavaServer Faces)フレームワークを使うなら、当然(Java Servletでは無く)Faces Servletが採用されます。

JSF(JavaServer Faces)の基本
https://blog.pepese.com/entry/20131211/1386757110

>JSF2.2のMVCは以下の通り。

>モデル(M)
>CDI(Context Dependency Injection)で管理されたオブジェクト
>クラスに「@Named」ってアノテーションをつけるとCDIコンテナで管理される
>CDIの設定は「bean.xml」で行う(無くてもアノテーションだけでなんとかなるみたい)
>ビューからはEL式で呼び出せる
>JSFのビューから呼び出されるコンポーネントを「JSFマネージドBean」って呼ぶみたい

>ビュー(V)
>FaceletsとEL式で記述されたxhtmlファイル
>FaceletsはJSFで使うタグライブラリ
>http://docs.oracle.com/javaee/7/javaserverfaces/2.2/vdldocs/facelets/
>EL式はシャープと中括弧(#{hoge})で囲った式

>コントローラ(C)
>FacesServletというサーブレットを使う
>実装不要
>設定は「faces-config.xml」で行う


http://www.oracle.com/technetwork/jp/ondemand/branch/wls12c-1524119-ja.pdf

>Servlet3.0
>
> アノテーションによるプログラミング
>  従来、web.xmlへの記述が必要だった構成情報をアノテーションで指定することが可能になりました。
>
> Webフラグメント
>  ライブラリの設定をweb.xmlではなくwebfragment.xmlというファイルに記載し、ライブラリ自身で保有しておくことが可能になりました。

>JSF2.0のFacelets
>• JSF1.2までは、ユーザインターフェースとなるビュー層にJSPを利用するアーキテクチャでしたが、JSPはサーブレットに変換、コンパイルされて実行時にビューを生成するためオーバーヘッドが高く、効率的な仕組みとはいえませんでした。
>• JSF2.0では、Faceletsというコンポーネントを提供しています。Faceletsではビュー層にXHTMLを利用するアーキテクチャになるため、ビュー生成のオーバーヘッドは低く、かつテンプレートなどの機能を活用することが可能になっています。
>• また、faces-config.xmlで複雑な設定を行わずに、アノテーションを使いManagedBean等を定義できるようになっています

↑「ManagedBeanは次のJSFバージョンで無くなる予定だ」そうですので ご注意下さい、良く分からないが「CDI(Contexts and Dependency Injection)/EJB(Enterprise Java Beans)」で そのアノテーションが記述できると言うことだろうか?


web.xmlについては下記参照(現状ではwebfragment.xmlが推奨されている)。

web.xmlの記述
https://www.javadrive.jp/servlet/context/index3.html

>web.xmlファイルにはServletの呼び出し方や初期値などの設定を記載するようになっています。


faces-config.xmlについては下記参照(ザックリと言うと恐らくページの遷移ルールだろうと思われる)。

JSF 2.0 の詳細について
https://yoshio3.com/2012/08/24/

>JSF の内部アーキテクチャについて紹介します。クライアント(ブラウザ)から HTTP リクエストをサーバに対して送信すると、Faces Servlet がリクエストを受信します。Faces Servlet は JSF に関する設定 (faces-config.xml の設定ファイル) を読み込み、各種機能、設定、プロパティ等を読み込みリクエストに対する処理を行います。
>JSF 2.0 から faces-config.xml ファイルは省略可能(オプション化)となり、faces-config.xml ファイルで記載していた設定項目についてはプログラム中のアノテーションで記載できるようになりました。Faces Servlet がリクエストを受信した後、適切なコンテンツに対してリクエストをリダイレクトします。

投稿日時 - 2018-08-18 21:42:39

ANo.9

>どうやらJSF(JavaServer Faces)はフレームワークで、そのフレームワーク内に「Faces Servlet、Managed Bean」の2つのJava言語仕様が有るようです。
>つまり、サーバー・サイドJavaには、JSP(JavaServer Page)、Servletについては「Java Servlet、Faces Servlet」、(サーバー・サイドJava)Beanについては「EJB(Enterprise JavaBeans)、Managed Bean」が有ると言う事になります。
>「ManagedBeanは次のJSFバージョンで無くなる予定だ」そうですので ご注意下さい。

現在は、JSP(JavaServer Page)ではなくJSF(JavaServer Faces)フレームワークのFacelets(XHTML)が推奨されていると思われます。

投稿日時 - 2018-08-18 19:52:45

ANo.8

どうやらJSF(JavaServer Faces)はフレームワークで、そのフレームワーク内に「Faces Servlet、Managed Bean」の2つのJava言語仕様が有るようです。
つまり、サーバー・サイドJavaには、JSP(JavaServer Page)、Servletについては「Java Servlet、Faces Servlet」、(サーバー・サイドJava)Beanについては「EJB(Enterprise JavaBeans)、Managed Bean」が有ると言う事になります。
「ManagedBeanは次のJSFバージョンで無くなる予定だ」そうですので ご注意下さい。

投稿日時 - 2018-08-18 19:00:20

ANo.7

JSF 2への第一歩
https://builder.japan.zdnet.com/sp_oracle/35040792/

>Model:Managed Bean、またはCDI(Container Dependency Injection)

↑「ManagedBeanは次のJSFバージョンで無くなる予定だ」そうですので ご注意下さい、これからは「CDI(Contexts and Dependency Injection)/EJB(Enterprise Java Beans)」が主流になると思われます。

JavaEE使い方メモ(CDI)
https://qiita.com/opengl-8080/items/431de9175dca33a09ba8

>CDI とは
>Contexts and Dependency Injection の略。
>Java EE 7 には ver 1.1 が含まれている。
>JSR は 346。
>
>DI (依存性の注入)に加えて、管理しているインスタンスのスコープの管理まで行ってくれる。
>
>CDI 誕生の経緯と JBoss Seam の変遷
>CDI は、 JBoss が提供していた独自フレームワークである Seam が前身となっている。
>
>Seam は日本語で「継ぎ目」という意味。
>Java EE 5 の頃の JSF と EJB をシームレスに連携させることを目的に作られたのが、この Seam というフレームワーク。
>
>この Seam の中で、 DI やコンテキストの管理を担っていたコアの部分が抽出され、 JSR として標準化されたものが CDI 1.0 (JSR299)になる。
>参照実装は Weld で、 Red Hat によって開発されている。
>
>JSR299 は Java EE 6 に取り込まれ、標準仕様となった。
>
>コア部分が標準仕様として EE に取り込まれたあと、 Seam は CDI の拡張機能を提供するフレームワークとして開発されることになった(Seam 3)。
>しかし、同じように CDI を拡張するサードパーティのフレームワークは、他にも存在していた(Apache MyFaces CODI、CDISource)。
>
>せっかく CDI という形で仕様を一本化したのに、このままだと結局また分岐が進んでいくことになる。
>このことを危惧した各フレームワークのコミュニティは、これらのフレームワークを1つにまとめ、新しく Apache DeltaSpike という Apache プロジェクトを立ち上げることにした。
>
>現在は、この Apache DeltaSpike というプロジェクトで CDI の拡張機能が実装されている(例えば、 EE 6 環境でも EE 7 相当の機能 @Transactional とかが使えるようになる拡張機能とか)。
>
>今後の CDI
>はじめは JSF と EJB を繋ぐ目的で導入された CDI だが、 EE 7 ではそれ以外にも様々なコンポーネントを連携させる役割を担うようになっている(JAX-RS、Bean Validation などなど)。
>
>今後も、 CDI を利用した連携の強化は進められていくらしい(Java Day Tokyo 2015 より)。

投稿日時 - 2018-08-18 17:55:35

ANo.6

JSF 2への第一歩
https://builder.japan.zdnet.com/sp_oracle/35040792/

>JSF 1からJSF 2へのバージョンアップにおいて、どのような点が変更されたのだろうか

>そもそもWebページのデザインは、Webアプリケーションのライフサイクルを通じて何度も変更されるものだ。そのため、Webアプリケーション開発者はその都度、Webデザイナーが修正したHTMLファイルに対してJSPコードを追加し、修正したWebページをプレビューする際にはいったんWebページ(JSPファイル)をコンパイルする必要があるなど、作業効率が悪いという問題を抱えていた。

>JSP 2では、この問題を「Facelets」の導入によって解決している。Faceletsとは、XHTMLをベースにしたテンプレート技術であり、これによってWebデザイナーとWebアプリケーション開発者が1つのXHTMLファイルに対し、それぞれ次のような具合に互いの作業を阻害することなくWebページの作成が行えるようになっている。

>JSF 2によるWebアプリケーションは、次に挙げる3つの要素から構成される。
>
>Controller:Faces Servlet
>View:XHTML(Facelets)
>Model:Managed Bean、またはCDI(Container Dependency Injection)

JSF 2.0 の詳細について
https://yoshio3.com/2012/08/24/detail-of-jsf20/

>JSF は MVC アーキテクチャに基づく開発を行います。モデル部分を JSF の Managed Bean (もしくは CDI) を使って実装し、ビュー部分を JSF の Facelets (xhtml)、コントローラ部分を Faces Servlet で担当し実装を行っていきます。どの URL に対してリクエストが来たのか、どのビューのページで処理を行うのか等のコントロールを Faces Servlet が行いますが、この Faces Servlet は web.xml 設定ファイルに設定を行った後は、プログラマは直接この Servlet に対して操作を行う事はありません、実際にプログラマが開発を行う際には、ビューの部分とモデルの部分を中心に開発を行っていきます。

投稿日時 - 2018-08-18 16:44:56

ANo.5

JavaServer Faces
https://ja.wikipedia.org/wiki/JavaServer_Faces

>JSF 2.2(2013年5月21日) : HTML5の対応、テンプレートを切り替えるリソース・ライブラリ・コントラクト、画面遷移を管理するFacesフロー、サーバー側でコンポーネントツリーを保持しないステートレス・モードの追加、といった変更が加えられている。

JSPはもう古い?Faceletsとは
https://ti-tomo-knowledge.hatenablog.com/entry/2018/06/14/161613

>当初JSFはビューを記載する方法として、アクションベース(URLによってサーバ側の処理を決定する)で動作するJSPを使っていましたが、
>バージョン2.0以降はFaceletsが標準仕様内に組み込まれ、サーブレットと組み合わせずに動作をさせることができるようになりました。

投稿日時 - 2018-08-18 15:45:43

ANo.4

知らぬ間にManagedBeanが登場していたようですが、それも既に「ManagedBeanは次のJSFバージョンで無くなる予定だ」そうです(^_^;)

JSF(JavaServer Faces)関連
https://www.sangyo-rock.com/tech/index.php?JSF%28JavaServer%20Faces%29%B4%D8%CF%A2

>JSFはMVCにおけるVとCの機能を提供する
>View→JSFのタグライブラリで拡張されたJSPを用いてWebインターフェイスを記述
>Control→Managed Beanと設定ファイルによってコントローラを実装
>Model→EJB

Java Management Extensions
https://ja.wikipedia.org/wiki/Java_Management_Extensions

>Java EE 6仕様では、managed beanはJavaクラスで実装されたBeanであるとしており、beanクラスと呼ばれる。他の何らかのJava EE 技術仕様(たとえばJavaServer Faces技術仕様)でmanaged beanであると定義されたトップレベルJavaクラス、あるいは次の条件をすべて満たすトップレベルJavaクラスであれば、それはmanaged beanである。

JavaServer Faces入門
http://dream.mods.jp/wp/tag/jsf/

>JavaEE7からはCDIがデフォルトになっており、そのためNetBeansIDE8.xでは「ManagedBeanは次のJSFバージョンで無くなる予定だ」というメッセージが出ます。

投稿日時 - 2018-08-18 15:07:05

ANo.3

知らぬ間にJSP(JavaServer Page)の進化形として「JSF2」(JavaServer Faces 2)が登場していたようです(^_^;)
よってサーバー・サイドJavaには「Servlet(Java Servlet)、JSP(JavaServer Page)、JSF(JavaServer Faces)、Enterprise JavaBeans」の4種類有ると言うことになります。

JavaServer Faces
https://ja.wikipedia.org/wiki/JavaServer_Faces

投稿日時 - 2018-08-18 14:04:44

ANo.2

回答No.1 amanojaku1

申し訳ございません、訂正します。

>HttpServletとjsp負荷はどっちが高い?

下記のような処理が入るのでjspの方が負荷が高いと言うことになります(断定はできませんが、毎回と言う事ではなく、(作成・変更されてから)最初の1回だけだろうと思われます)。

ざっくりJava JSP/サーブレット
https://qiita.com/kazukichi/items/4325b64450f93f04e316

>JSPはJavaサーバーがJSPのコードを読み込み、それをサーブレットのソースコードに変換。
>HTMLのタグなど、すべてprintlnで書きだすように変換される。
>そして、生成されたサーブレットのソースコードをコンパイルし、サーブレットを生成してそれを呼び出す。

投稿日時 - 2018-08-17 08:32:34

ANo.1

複数の人数で開発する場合に場合に、「Model、View、Controller」に分けます。
Model(Enterprise JavaBeans)はデータベースが得意な人が担当します。
View(JavaServer Page)はデザイナーが担当します。
Controller(Servlet)はデータベースが不得意な人が担当します。
個人でプログラミングする場合は、そこまで厳密に分ける必要は有りません(もちろん分けても良いでしょうが、「JavaServer Page」だけでプログラムしても良いでしょうし、「Servlet」だけでプログラムしても良いでしょう)。

>HttpServletとjsp負荷はどっちが高い?

下記ページには「実は、JSPとサーブレットは技術的には同じもの」とされているので、ほぼ同等と思われます。

初めてのWebアプリケーション・サーバ
http://www.atmarkit.co.jp/fjava/rensai/was05/was05_1.html

>サーブレットは最初のHTTPリクエストによって初期化され、それ以降はメモリ上に常駐し、マルチスレッドでサービス処理のみを実行するようになります。そして、HTTPリクエストが来なくなると消滅処理が実行され、メモリ上から消滅します。

>実は、JSPとサーブレットは技術的には同じもので、違いはその記述方法にあります。

JavaによるWebアプリケーション入門
http://www.wakhok.ac.jp/~tomoharu/web2004/text/index_c10.html

ざっくりJava JSP/サーブレット
https://qiita.com/kazukichi/items/4325b64450f93f04e316

ServletとJSP、Beanのうまい連携方法を教えてください
http://www.atmarkit.co.jp/fjava/javafaq/jsp/jsp05.html



ちなみに知らない間に「Thread」は非推奨になっているようです。

Java EE 7で並列処理がケタ違いに速くなる! 使いこなしのポイントは?──Java Day Tokyo 2013レポート
https://blogs.oracle.com/wlc/java-ee-7-java-day-tokyo-2013

>Java EE 7では、「Concurrency Utilities for Java EE」の導入により、マルチコア・プロセッサの能力を余すことなく引き出し、並列処理を格段に速く行えるようになる。

↑このJava EE(Enterprise Edition)はサーバー側の開発環境の話です。

>2004年にJava SE 5でConcurrency Utilitiesを導入。

↑このJava SE(Standard Edition)はクライアント(一般の個人のPC)側の開発環境の話です。

>2011年にリリースされたJava SE 7ではFork/Joinに対応。さらに、2014年にリリース予定のJava SE 8ではラムダ式をサポートし、これまで以上に並列処理が簡単に記述できるようになるという。

>「スレッド処理に関して、いまだにJavaの登場当初からのnew Thread(r).start(); などと書いているプログラムを多く見かけるが、もうこのような実装はやめたほうがよい」とアドバイスした。

>そこで現在、スレッドを直接生成する方法に代わって推奨されているのが、Java SE 5 から導入されたConcurrency Utilitiesである。Concurrency Utilitiesは並列処理の実装を簡素化するために導入されたAPIで、これを利用することによってスレッドのライフサイクル管理が簡単になるほか、スケーラビリティやパフォーマンスが大幅に向上するのだという。
>このデモでは、シングルスレッドやマルチスレッドのプログラムが256個のうち一部のプロセッサしか利用できないのに対して、Concurrency Utilitiesを使った場合は256個のプロセッサの負荷がほぼ同時に限界まで達し、瞬時に処理を終えることが確認できた。
>「Javaはパフォーマンスが悪いという声を聞くことがあるが、それは間違い。パフォーマンスが悪いのは、いまだに古いやり方でプログラムを書いているからにすぎない。Concurrency Utilitiesでマルチコア・プロセッサの能力をフルに使い切れば、Javaは驚異的なパフォーマンスを発揮する」

投稿日時 - 2018-08-15 21:40:25

あなたにオススメの質問