現在、フレームワークはプロジェクトで使用されています。現在、非常に一般的なフレームワークは
SSH(Struts+SpringMVC+Spring+Hibernate),SSM(Struts/springMVC+Spring+Hibernate)
です。私の最近のプロジェクト itoo では、使用されているフレームワークは easyUI SpringMVC EJB hibernate です。プロジェクトを階層化する目的は、より良いデカップリングと階層化は、フレームワークをまったく使用しなくても解決できます。なぜ、それほど多くのフレームワークが必要ないのでしょうか?
そして、現在、多くの Web プロジェクトの制御層の技術的なフレームワークが、 struts2 から springMVC に移行する際、Java で Web 開発を行うときに、サーブレットと jsp などのテクノロジを使用する代わりに、struts2 や springMVC などのフレームワークを選択するのはなぜですか?
特に現在、Web のフロントエンド ページは、JSP を放棄して、Velocity などのテンプレート言語を使用して開発されていますが、そのような選択は、Java Web 開発にどのようなメリットをもたらしますか?質問 この考えにより、多くの Java エンタープライズ レベルの開発者が今 Spring フレームワークを選択するのはなぜですか? Spring フレームワークは開発するアプリケーションに何をもたらしますか?という新しい質問を見つけました。
深く考えてもよく分からず、納得のいく答えを見つけるのは難しかったのですが、結局、自分が知っていると思っていたこれらの技術が、 「よく使われているもの、よく使われているものは、実はそうではありませんでした。まだまだ不思議なことや戸惑うことがたくさんあります。その不思議なことや戸惑うことが、より高いレベルで使いこなせるかどうかの鍵でもあります。しかし、長年蓄積してきた技術は、 struts2やspringなど、非常に大規模かつ複雑になり、応用範囲も広く、長年使ってきましたが、まだまだ馴染みのない、よくわからない技術もたくさんあります。
フレームワークを使用することには、非常に一般的な利点があります: まず、開発プロセスの速度が向上します。同様のプロジェクトでコードを再利用することで、開発者の時間とエネルギーを大幅に節約できます。フレームワークには、実行用の事前構築されたモジュールが用意されています。
この利点はどのフレームワークにも当てはまります。非常に当てはまります。しかし、より深く考えてみるとどうでしょうか?
実際、世界には優れたフレームワークが数多くあります。ソフトウェア. 既存の技術をベースにしているという特徴を持つフレームワークの種類があり、既存の技術と同じビジネス機能を提供する技術的なフレームワークです。オリジナルのテクノロジー。
例: jQuery、およびこの記事で説明する struts2 および springMVC これらのフレームワークは非常に複雑ですが、利点が 1 つだけあります。このフレームワークは、元のテクノロジーやビジネス開発とは関係のないあらゆる種類の技術的問題を防ぐのに役立ちます。 jQuery、struts2、springMVC などのフレームワークが優れている理由は、これらの機能が非常に優れているため、それを使用する多くのプログラマーが元のテクノロジーの本質をもはや理解していないためです。そのため、struts2 をより良く、より熟練し、深く理解する必要があります。ここでは、Struts2 テクノロジーから飛び出し、Struts2 テクノロジーの源であるサーブレットに行き、サーブレットの特性を注意深く研究する必要があります。この方法でのみ、Struts2 フレームワークをよりよく学ぶことができます。
サーブレットの機能は、ブラウザからサーバーへのリクエストを受信し、処理された応答をサーバーからユーザーのブラウザに返すことです。ブラウザとサーバーは http プロトコルを通じて通信します。通信するには、プロセスブラウザは、ユーザーの選択に従って要求された http メッセージと http プロトコル メッセージの仕様に従って関連情報を組み立て、メッセージはネットワークを通じて指定されたサーバーに送信され、サーバーは特定のサーバーを通じてメッセージ情報を受信します。 Webコンテナです。
例: Tomcat、jetty、jboss などの Web コンテナ。Web コンテナは http メッセージを解析します。それがユーザー リクエストの場合、最終的に解析されたメッセージ情報はリクエスト オブジェクトに保存されます。サーバー サーバープログラムは、このリクエストを使用して対応する処理を完了した後、結果情報を応答オブジェクトにカプセル化し、Web コンテナに応答オブジェクトを渡します。Web コンテナは、応答オブジェクトを http プロトコルのメッセージに変換して送信します。メッセージはブラウザに返され、ブラウザは最終的に応答メッセージを解析して、最終結果をユーザーに表示します。
Web コンテナは、サーブレット インターフェイスを作成しました。サーブレット インターフェイスは、開発者が独自のビジネス ロジックを実装する場所です。サーブレットを開発するプログラマは、穴埋め質問や、穴埋めのコンテキストまたはコンテキスト プロンプトを行うようなものです。 -in-the-blank の質問はリクエストとレスポンスのオブジェクトで構成されますが、JavaEE 仕様のサーブレットインターフェースは非常にシンプルで、メソッドは init、service、destroy の 3 つだけですが、このインターフェースは一般的すぎるため、仕様もhttp リクエストの種類に応じて doGet、doPost などを提供する HttpServlet クラスを提供します。サーブレット インターフェイスの最大の特徴は、http プロトコルの特性に応じて定義されていることです。特に、サーブレットを開発するときに http プロトコルの特性に精通しているため、特に複雑で特殊なリクエストの場合に、多かれ少なかれ混乱する問題に遭遇するでしょう:
たとえば、ファイルをアップロードすると、特別なファイル形式がブラウザに返されます。現時点では、サーブレット開発を使用するのはあまり便利ではありません。サーブレット開発では見落とされがちなもう 1 つの問題があります。それは、サーブレットの型変換です。要求されたデータと HTTP プロトコルの送信。これらはすべてテキスト形式であり、Web コンテナーによって解析された後もテキスト型です。通貨、数値、日付などの型が見つかった場合は、次の形式に従って変換する必要があります。ページが大量の情報を送信する場合、多くの型変換を行う必要がありますが、この種の作業には技術的な内容はなく、手作業であり、プログラム エラーが発生しやすいです。
同時に、Java のエンタープライズ開発はすべて JavaBeans を中心に行われ、型変換されたデータは対応する JavaBeans にカプセル化される必要があります。この種の回り道はプロジェクトにとって明らかに良いことではありません。そこで、古代の Struts1 は、この問題に対する解決策を見つけました。それは、特にそのようなことを行う役割を担う DTO オブジェクト (データ転送オブジェクト) を定義することでした。しかし、Struts2 では、サーブレット自体を置き換えるアクション全体がジャワビーン。
Java エンタープライズ開発の技術的特徴の 1 つは、Javabean の使用です。struts2 の特徴の 1 つは、サーブレットを置き換える操作クラスが典型的な javabean であることです。まず、struts2 フレームワークがデータを変換してカプセル化します。ページによって送信されます. 最後に, リクエスト情報はこの Javabean のプロパティにカプセル化されるので, Web プログラムを開発する際の面倒な型変換とカプセル化の問題を回避できます. 前に従来のサーブレットは http プロトコルに従って定義されていると述べました,また、リクエスト メソッド (post メソッドまたは get メソッド) に基づいてユーザー リクエストを処理します。
しかし、プログラム開発者にとって、リクエスト、具体的には URL は、実際にはサーバーによって外部に提供される関数、またはサーバー側による外部アクションです。 http アクションを特定のビジネス アクションに変換する必要があるため、プログラム開発が煩雑になり、開発の難易度が上がります。そのため、struts2 はサーブレットの Javabean を置き換えて http リクエスト メソッドをブロックし、特定のビジネス アクションの変換については、Javabean のすべてのメソッドが対応できます。各 URL リクエストに対して 1 対 1 で対応するため、必然的に開発の難易度が軽減されます。
サーブレットのもう 1 つの機能は、ページが正しい応答を取得できるように応答オブジェクトを構築することです。実際、最新のブラウザはマルチメディア ツールです。テキスト、画像、ビデオなどをブラウザのリソースの違いは、http の応答メッセージの違いにつながります サーブレット開発を使用する場合、リソースの違いに応じて Java プログラムでハードコーディングされた処理を使用する必要があります このようなプログラムは再利用が難しく、プログラマーが特定のリソースが必要な場合、処理や理解が不十分だと問題が発生します。Struts2 では、このロジックを Java プログラムから設定ファイルの形で分離し、設定メソッドを使用して一元管理します。このアプローチは Spring の AOP メソッドに似ており、処理結果がメソッドがより統一され、管理が容易になるだけでなく、プログラムの堅牢性も向上し、開発の難易度が軽減されます。
サーブレットは MVC 開発モデルの C 層であり、制御層です。制御層はロシアの双頭の鷲 (一方の頭は東を向き、もう一方の頭は西を向いています) に似ています。 M層のモデル層を見てください ほら、V層のビュー層を見てください モデル層もJavaで書かれており、制御層もサーバーサイド言語で開発されているので、自然な障壁はありませんM層とC層の間の通信ですが、V層のビュー層とは異なります そう、これはクロスランゲージコミュニケーションです ブラウザにとってはhtml、javascript、cssしか理解できません ブラウザは物事を理解することはできませんJava 言語で記述されていますが、サーバー側の処理をブラウザーが理解して受け入れるためには、サーバーからの応答情報をページ上に配置する必要があります。
したがって、Java 情報を HTML ページに変換する技術が必要です。これは、JavaEE 仕様で提供されている jsp 技術です。jsp は実際にはクライアント側の技術ではなく、サーバー側の技術ですが、見た目はHTML テクノロジと同様に、初期の JSP 開発では、Java コードをページに直接書き込むことでした。この欠点は誰もが知っています。その後、JavaEE 仕様では、HTML タグに似たメソッドを使用して Java コードを解析するカスタム タグ テクノロジが提供されました。フレームワークは、カスタム タグ テクノロジの完全なセットを提供します。大したことではないように聞こえるかもしれませんが、カスタム タグがカスタムと呼ばれる理由は、誰もがタグを自分で定義できるためです。仕様がなければ必然的に仕様が存在します。混乱を招く可能性があり、カスタム タグの完全なセットは体系的なプロジェクトです。カスタム タグの完全なセットは、新しい開発言語を自分たちで定義するのと同じです。プログラマがこれを聞くと、カスタム タグのセットの開発方法を確実に理解するでしょう。完全なカスタムタグの開発工数と開発難易度は想像を絶するものであり、カスタムタグは制御層と密接に関係しているため、別次元の難しさが加わり、struts2が提供するカスタムタグはビジネス開発に多大なメリットをもたらします。飛躍する。
サーブレットには、リスナーとフィルターという 2 つの重要なテクノロジがあります。Web 開発でリスナーが使用されるシナリオは比較的少ないです。リスナーは、いくつかの非常に特殊な状況でのみ使用されます。ほとんどの Web 開発では無視できます。 、最も一般的に使用されるリスナーは、ServletContext の作成と破棄のためのリスナーです。ServletContext は、Web アプリケーション全体のグローバル オブジェクトです。Web アプリケーションのライフ サイクルにバインドされています。そのため、Web を監視するには、このリスナーを使用します。アプリケーション. Spring コンテナの初期化操作など、アプリケーションのグローバル情報を初期化および破棄します。さらに興味深いのはフィルターです。struts2 にもインターセプターがあります。同じ機能を持ち、リクエストをインターセプトするために使用されます。インターセプターは struts2 独自の機能であるため、フィルターを使用するよりも struts2 でインターセプターを使用した方が当然便利です。実際、インターセプターで使用されるテクノロジーはフィルターよりも高度であり、インターセプターはリフレクション技術を使用するため、インターセプターはより広いエリアをインターセプトし、リクエストを制御する能力が強化され、完了できるタスクはよりカラフルになります。
私が struts2 に初めて触れたのは、gxpt システムでした。ある人が、struts 設計の目的の 1 つは、コントロール層でのリクエスト オブジェクトとレスポンス オブジェクトの操作をブロックすることであると教えてくれました。 http プロトコルの息子は Web 開発の考え方は複雑ですが、実際の開発では、これら 2 つのオブジェクトを無意識に使用することがよくあります。 struts2ではリフレクション機構が多すぎて、特にアノテーションによる設定が多く、Javaでのリフレクションの実行効率が非常に低いため、サーブレットを直接利用することでWebアプリケーションの実行効率は確実に向上します。実際、当時はサーブレットで Spring テクノロジーを柔軟に使用できなかったため、これを行うのは困難でした。
Spring テクノロジは Java エンタープライズ開発において最も重要なテクノロジと言えますが、Spring の役割や重要性を理解するのは非常に面倒です。多くの人の Spring に対する理解は実際には使用段階にとどまっています (例: 宣言型トランザクションは使いやすいなど)、今日の Spring テクノロジーの生態環境は素晴らしく、Spring は包括的であり、その内容は元の Java 言語に劣らず、Spring は非常に大きいです。フレームはすべて上に構築されています。 IOC および AOP テクノロジーこれら 2 つのテクノロジーを深く理解することによってのみ、Spring フレームがなぜこれほど多くのものを保持できるのかを理解することができます。
最初は ioc です。ioc テクノロジの最初の説明は制御の反転と呼ばれます。もう 1 つの説明は依存性注入です。これら 2 つの名前は文字通り理解するのが難しいですが、その原理を理解すると、どれほど正確であるかがわかります。それらが説明されています。 IOC 技術の本質は、オブジェクトを構築する技術です。言い換えれば、クラスをオブジェクトにインスタンス化する技術です。Java では、クラスのインスタンス化は new キーワードによって行われます。新しいクラスが作成されるたびに、プログラムを開発するとき、特定のクラスだけでインスタンス オブジェクトを 1 つだけ生成することがよくあるため、これは非常に無駄に思えますが、場合によっては非常に危険です。シングルトンモードを使用します また、デザインモードでは、 ファクトリメソッドがオブジェクトを生成する を渡すこともできます Springを使ったことがある人は、上記のテキストを見ればわかると思います SpringでのBeanの定義は、上記の内容に対応します-to-one. スコープ属性の single はシングルトンオブジェクトを生成し、プロトタイプは新しいオブジェクトを生成します Bean を渡すこともできます ファクトリメソッドはオブジェクトを生成します Spring の Bean はオブジェクトを製造するためのツールであると言えます。オブジェクト指向プログラミングでは、オブジェクトは実体を表示することに相当します。
たとえば、狩猟操作を完了するために使用されるオブジェクトがあります。この場合、狩猟オブジェクトには 2 つの補助オブジェクト (人間と銃) が含まれています。 . 人と銃だけ 銃には狩猟のオブジェクトが与えられており、狩猟対象が狩猟操作を完了できるようになります. しかし、人と銃のオブジェクトを構築することは、思っているほど簡単ではありません. ここでは、銃としての銃を示します。たとえば、銃を作成するには金属、工作機械、弾丸が必要です。工作機械と弾丸は 2 つの新しいオブジェクトです。これらのオブジェクトは 1 つずつ入れ子になっており、相互に関連しています。銃を組み立てる場合、どれほど複雑になるか想像してみてください。 Java コードのオブジェクトです。構築したいものが単純でない場合、砲オブジェクトはより複雑な航空母艦であるため、このオブジェクトの構築コストは想像を絶します。そのようなオブジェクトのネストと相互依存を排除するにはどうすればよいでしょうか?
Spring は方法を提供します。この方法は、Spring がコンテナを提供するというものです。XML ファイルで各オブジェクトの依存関係を定義し、コンテナがオブジェクトの構築を完了します。特定のオブジェクトを使用する必要がある場合Java コードでは、インスタンス化されたときにコンテナから取得でき、オブジェクトの構築操作が Spring コンテナに引き継がれるため、制御の反転と呼ばれます。 Java プログラム内のオブジェクトの構築はコンテナによって引き継がれます。依存関係の注入とは、プログラムがオブジェクトを使用したいときに、コンテナがそのオブジェクトをプログラムに注入することを意味します。これは依存関係の注入と呼ばれます。
Java開発において、あるクラスが提供する機能を利用したい場合、新規にクラスを構築してそのクラスを継承する方法と、あるクラスをIndexで定義する方法の2通りがあります。新しいクラスを作成すると、2 つのクラス間に関連付け関係が確立されます。Spring の ioc コンテナはこの関連付け関係を実装します (継承関係ではないことに注意してください)。では、特定のクラスを新しいクラスに割り当てる方法は何でしょうか? すでに? Spring コンテナで使用される標準的な注入方法は、一般にコンストラクターを使用する方法と setXXX メソッドを使用する方法の 2 種類のみです。
上記の継承方式も関連付け方式も、実は対象オブジェクトの機能を拡張するための開発手法であり、デザインパターンにはプロキシモードというものがあります。エージェント モードは継承モードと関連付けモードを合成したものですが、この合成の機能はオブジェクト インジェクションの問題を解決することではなく、特定の操作オブジェクトの乳母または秘書を見つけることです。これは小説の 2 番のボスと同じです この 2 番のリーダーは外界に対して特定のインスタンス オブジェクトを表します インスタンス オブジェクトの出入りはこの 2 番のリーダーを介して行われます。はナンバー 1 のリーダーであり、ナンバー 1 のリーダーは大きな仕事をしなければならないため、お茶を淹れたり、車の手配をしたりするような一部の取引的で反復的なタスクは、ナンバー 1 のリーダーが煩わす必要はなく、ナンバー 1 のリーダーが処理します。 「2番頭。これがAOPの考え方です。AOPはプログラム開発のトランザクション的な側面を解決するもので、コアビジネスとは何の関係もありません。しかし、これらの問題はビジネスシナリオの実現のために必要です。実際の開発では、 aop はコードを保存する方法でもあります。
Spring のコア テクノロジーの本質は通信メカニズムです。Spring は、双方の通信コストを削減しながら、双方の間の情報の流れを維持するために常に最善を尽くします。現実の組織では、それは会社のリーダーでなければなりません コミュニケーションが上手なリーダーは、さまざまなリソースの熱意を動員することができます コミュニケーションが上手なリーダーは、あらゆる立場にオープンであり、あらゆる種類の人が自分に従うようになります今日のスプリングは大きな箱で、何でもできて、中に設置できるんです。
スプリングは銀行によく似ています。物質的な富を直接生み出すことはできませんが、すべての資源は銀行を通じて循環する必要があります。経済発展の方向性を制御できます。プログラムの世界に戻ります。 Spring の役割はプログラム間の分離とされていますが、Spring は異なるモジュール間の結合を軽減することができます。その理由は、プログラム開発において、異なるモジュール間の情報の伝達はオブジェクトの転送によって完了し、オブジェクトの転送がスムーズに行われるかどうかからです。オブジェクトを適切に構築し、オブジェクトの構築方法を管理することで、オブジェクトの転送を適切に管理できることが、Spring がシステム アーキテクチャ設計にもたらす利点です。
関連する学習の推奨事項: Java 基本チュートリアル
以上がJavaフレームワークの用途は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。