目次
モバイルAPP開発者として、Web開発関連のコンテンツについては、これまで触れたことがないので、最近学び始めたいと思っています。そのため、最も単純な概念から始める必要があります。一週間見た後、私が見たもののいくつかを要約して整理します。
Webアプリケーションの開発
1.Webアプリケーション開発とは
Webアプリケーション開発には、2つの一般的な開発モードがあります。
- 1つはB / S(ブラウザ/サーバー)モードです。主要なPCの公式Webサイトなど、ブラウザがあれば開くことができます。
ブラウザ自体が通信プロトコルとして一般的なhttpプロトコルを持っているので、通信モジュールの開発を避けることができます。そのため、ブラウザにURLアドレスを入力すると、ブラウザはリクエストをHttpリクエストにカプセル化してサーバーに送信します。サーバーがリクエストを受信すると、レスポンスデータをHttpレスポンスにカプセル化して、に返します。データを処理した後のブラウザ。次に、このURLアドレスには、サーバー上で参照されるファイルのパスが実際に含まれています。
- 2つ目はC / S(クライアント/サーバー)モードです。ビジネスロジックを個別に処理するクライアントが必要です。ここでのクライアントは通常、PCインストールプログラムです。
2.開発プロセス
初期のWebアプリケーション開発は、静的ページを閲覧するために使用されていました。リンクをクリックするか、ブラウザにURLアドレスを入力すると、ブラウザはHttpプロトコルを介してWebアプリケーションサーバーの静的ページを要求します。Webサーバーは、要求を受信すると、URIで識別されるリソースを読み取り、情報ヘッダーをブラウザーに返します。ブラウザーは、Htmlを解析し、結果を表示する責任があります。
後で、静的ページの閲覧に限定されず、いくつかの動的な相互作用を追加する必要があります。次に、Webアプリケーションサーバーを拡張するためのCGI(Common Gateway Interface)があります。リンクをクリックするか、ブラウザにURLアドレスを入力すると、ブラウザはWebアプリケーションサーバーも要求します。Webアプリケーションサーバーは要求を受信すると、CGIプログラムを起動してユーザー要求を処理し、応答データをに返します。処理後のWebアプリケーション。サーバー、Webアプリケーションサーバーはデータをカプセル化し、Http応答の形式でブラウザに返します。ブラウザはHtmlを解析し、結果を表示する責任があります。
その後、サーブレットコンポーネントが登場し、サーバー側で実行され、動的な相互作用を実現するためにSevlertコンテナによって管理されました。リンクをクリックするか、ブラウザにURLアドレスを入力すると、ブラウザはWebアプリケーションサーバーにもリクエストを送信します。Webアプリケーションサーバーはリクエストを受信すると、そのリクエストをサーブレットコンテナに渡します。ロード、作成、インスタンス化、およびサーブレット固有のメソッドの呼び出しが処理に使用され、最後に応答結果がサーブレットコンテナによってWebアプリケーションサーバーに渡されます。Webアプリケーションサーバーはこの応答をHttp応答にラップして返します。ブラウザは、Htmlを解析し、結果を表示する責任があります。
CGIと比較したサーブレットの利点は次のとおりです。
(1)サーブレットは単一のインスタンスであり、複数のリクエストを実行できます。各リクエストは別々のスレッドで実行されます。インスタンスは通常、作成後に破棄されません。CGIは、サービスの完了後、スレッドではなくリクエストのアクティブ化プロセスに存在します。破壊されます。
(2)より多くのWebサーバーでサポートされる標準API。
(3)サーブレットはJava言語であり、CGIはPerl、シェルスクリプト、またはC言語です。
(4)サーブレットコンテナは、サーブレットのエラー処理とセキュリティを提供します。
3.Webアプリケーションサーバーとは
Webアプリケーションの開発は、ユーザーがいくつかのWebリソースにアクセスできるようにすることです。これらのWebリソースは、静的リソースと動的リソースに分けられます。HTML、CSS、一部の固定ロゴ画像などの静的リソースはブラウジングプロセス中に変更されませんが、動的リソースはブラウジングプロセス中に動的に変更する必要があります(もちろん、これらの動的な変更は複雑なビジネスロジックに対応します)。 JSP、ASP、PHPなど。
そして、ユーザーがアクセスできるようにこれらのWebリソースを外部に公開するのがWebアプリケーションサーバーであり、ユーザーはIPアドレスを介してWebアプリケーションサーバーにアクセスできるため、Webリソースにアクセスできます。一般的なWebアプリケーションサーバーWebLogicサーバー(BEA会社)、WebSphereサーバー(IBM会社)、Tomcatサーバー(Apache会社)。最初の2つは有料で、最後の1つは無料でオープンソースです。このTomcatサーバーについては後で徐々に学習します。
2つのTomcat
Tomcatは、無料のサーブレットおよびJSPコンテナです。Htmlページを処理する機能を備えており、サーブレットおよびJSPコンテナでもあります。次に、TomcatサーバーはHttpサーバー(Webサーバー/ Webコンテナー)とサーブレットコンテナーの2つの部分に分けることができます。前者は主に静的リソースの処理に使用され、動的要求は後者に委任され、後者は主に次の目的で使用されます。動的な相互作用を処理します。
1.サーブレットとは
JavaテクノロジのWebコンポーネントであるサーブレットコンポーネントについても前述しました。サーブレットコンポーネントはサーバー側で実行され、サーブレットコンテナによって管理されます。サーブレットは、主にインタラクティブなブラウジングとデータの変更を処理し、動的なWebコンテンツを生成します。つまり、主にビジネスロジックの生成に使用されます。サーブレットは単独で実行することはできません。サーブレットコンテナにデプロイする必要があります。サーブレットコンテナはインスタンス化され、Serlvetの関連メソッド(doPost / doGet)と呼ばれます。
サーブレットの仕様に従う必要があります。
2.サーブレットコンテナとは
サーブレットコンテナはサーブレットエンジンとも呼ばれます(Tomcatの4つのコンポーネントのエンジンに対応すると思います)。要求と応答のためのネットワークサービスを提供するために使用されます。MIMEのデコードとフォーマットに基づいています。一般的なMIMEタイプは、text / html、application / pdf、video / quicktime、application / java、image / jpeg、application / jar、application / octet-stream、application / x-zipです。
したがって、サーブレットコンテナの機能は次のように要約されます。
(1)ネットワークサービス。サーブレットは、ServerSocketを確立せずに、Httpサーバーと直接通信できます。サーブレットは、ビジネスロジックにのみ焦点を合わせることができます。
(2)ライフサイクル管理。サーブレットのロード、作成、インスタンス化、サーブレットの対応するメソッドの呼び出し、およびガベージコレクションを担当します。
(3)マルチスレッド管理。サーブレットのスレッドを自動的に作成します。サーブレットの実行後、スレッドは自動的に終了します。ただし、スレッドセーフの問題を考慮する必要があります。
(4)宣言方法は安全です。xmlデプロイメント記述ファイルを使用して、セキュリティを構成および変更します。プログラムにハードコーディングする必要はありません。
(5)JSPサポート。jspをJavaコードに変換できます。
3.サーブレットコンテナの分類
Webアプリケーションサーバーには、Javaサーバーと非Javaサーバーがあります。次に、Webアプリケーションサーバーは静的リソースと動的リソースの両方を処理する必要があります。
したがって、Javaサーバーの場合、サーブレットコンテナを独立したWebアプリケーションサーバーとして使用できます。これは、Serlvetコンテナの最初のタイプである独立サーブレットコンテナです。たとえば、Tomcatはデフォルトで独立サーブレットコンテナになります。
したがって、Java以外のサーバーの場合、サーブレットコンテナには次の2つの動作方法があります(サーブレットコンテナを他のサーバーと組み合わせる、サーブレットコンテナを使用して動的な対話を処理する、他のサーバーを静的リソースを処理する、と理解できると思います)。 )::
2番目のタイプのサーブレットコンテナ:インプロセスサーブレットコンテナ。
3番目のタイプのサーブレットコンテナ:アウトプロセスサーブレットコンテナ。
これら2種類のサーブレットコンテナには、WebサーバープラグインとJavaコンテナが含まれます(サーブレットはJavaテクノロジのコンポーネントであるため、Java環境で実行する必要があります)。
動作原理は次のとおりです。クライアント要求を受信すると、非Javaサーバーが要求を受信してServertコンテナに転送します。実際、Webサーバープラグインは要求の制御を取得し、要求をJavaコンテナに渡します。 、およびJavaコンテナが転送中ですリクエストはサーブレットに渡されます。
これら2つのサーブレットコンテナの違い:
(1)インプロセスサーブレットコンテナ:Webサーバープラグインは、連携するWebサーバーの内部アドレススペースでJVMを開き、JavaコンテナがJVMでサーブレットをロードして実行できるようにします。 -サーブレットコンテナを処理します。Webサーバーの外部のアドレススペースで実行され、Javaコンテナは外部JVMで実行されます。
(2)WebサーバープラグインがJavaコンテナーに渡されます。インプロセスのServlertコンテナーはJNIを使用し、アウトプロセスのサーブレットコンテナーはIPCを使用します。
(3)インプロセスサーブレットコンテナはシングルプロセスおよびマルチスレッドサーバーに適していますが、そのスケーラビリティは不十分です。アウトプロセスサーブレットコンテナはスケーラビリティと安定性が優れていますが、応答速度はそれほど良くありません。処理中のサーブレットコンテナ。
Tomcatのデフォルトは、独立したサーブレットコンテナです。
4.アーキテクチャ
(1。概要
Tomcatサーバーは、一連の構成可能なコンポーネントで構成されています。コアコンポーネントは、他のすべてのTomcatコンポーネントの最上位コンテナであるカタリナサーブレットコンテナです。まず、tomcatインストールファイルの下にあるconf / server.xmlファイルを調べて、Tomcatに含まれるコンポーネントの概要を確認できます。
<Server port="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
<GlobalNamingResources>
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
<Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="conf/localhost-rsa.jks"
type="RSA" />
</SSLHostConfig>
</Connector>
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.authenticator.SingleSignOn" />
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
</Engine>
</Service>
</Server>
このドキュメント構造から、Tomcatの構成可能なコンポーネント間の包括的な関係を大まかに見ることができます。これについては、後のサブセクションで説明します。
(2)サーバー
これは最上位のコンポーネントであり、カタリナサーブレットコンテナ全体を表します。1つ以上のサービスを含めることができます。
(3)サービス
サービスには、1つ以上のコネクタと1つのエンジンのみが含まれます。これは、主にこれらのコネクタをエンジンにバインドするためのものです。したがって、サービスは2つの部分に分けることができます。1つはコネクタ、もう1つはコンテナです(サーブレットコンテナとして理解できると思います)。また、このコンテナには主に、エンジン、ホスト、コンテキスト、ラッパーの4つの部分が含まれています。
-
1)コネクタ
クライアントと通信するために、最下層はソケットを介してクライアントとの接続を確立し、クライアントの要求を受信して応答結果をクライアントに返し、コンテナが認識して渡すことができる要求と応答に情報をカプセル化します。コンテナ。
サービスには複数のコネクタを含めることができます。一部のコネクタはHttpsプロトコルを提供し、一部のコネクタはAjpプロトコルなどを提供して、クライアントの要求への応答を完了します。
コードレイヤーから、コネクタがProtocolHandlerを使用してリクエストを処理していることがわかります。異なるProtocolHandler実装クラス(org.apache.coyoteパッケージの下)は、Http11Protocol、Http11NioProtocol、AjpNioProtocolなどの異なる接続プロトコルを表します。
各ProtocolHandlerには、EndPoint、Processor、およびAdapterが含まれています。
EndPoint:基盤となるソケットのネットワーク接続を処理し、クライアントから送信された要求を受信し、TCP / IPプロトコルを実装します。
プロセッサ:EndPointが受信したソケットを、Httpプロトコルを実装するためのリクエストにカプセル化します。
アダプタ:受信したリクエストはサーブレットの仕様に準拠していないため、アダプタはリクエストをServletRequestに変換し、コンテナに適合させて、特定の処理のためにコンテナに渡します。
-
2)コンテナ
サーブレットをカプセル化して管理し、サーブレットを介してビジネスロジックを処理します。前述のように、コンテナには、エンジン、ホスト、コンテキスト、ラッパーの4つの部分が含まれています。次の効果の簡単なステップバイステップの説明:
-
エンジン
サーブレットエンジンとも呼ばれ、私が理解しているのはサーブレットを管理することです。リクエストの処理フローを完了するためのエンジンは、サービスに1つだけあります。エンジンは複数のコネクタからリクエストを受信できます。エンジンはそれを処理した後、対応するコネクタを見つけてユーザーに返します。
エンジンは、要求と応答に加えてネットワーク処理を行います。つまり、サーブレットはビジネスロジックに注意を払うだけでよく、コネクタとの接続を確立する方法、コネクタから情報を受信する方法、以前の対応するコネクタを見つける方法などがすべてに渡されます。処理用のエンジン。
ユーザーはStandardEngineを実装できますが、通常は実装する必要はありません。
-
ホスト
サイトとも呼ばれる仮想ホスト。エンジンには、1つ以上のホストを含めることができます。ユーザーはホストをカスタマイズする必要はなく、StandardHostを実装するだけで済みます。
-
環境
Webアプリケーション(サーブレット、HTMLページ、クラス、およびその他のリソースのセットで構成され、Webサーバー上で実行されるアプリケーション)は、特定のホスト上で実行されます。ホストには1つ以上のコンテキストを含めることができ、各コンテキストには一意のパスがあります。デフォルトでは、Tomcat構成webappsの下の各フォルダーはコンテキストであり、このwebappsはホストです。
ユーザーはContextをカスタマイズする必要はなく、StandardContextを実装するだけで済みます。
-
ラッパー
各ラッパーは、サーブレットをカプセル化してビジネスロジックをカプセル化します。
コンテナのこれらの4つの部分は、責任連鎖モデルを通じてリクエストを処理します。各部分はこのBaseValueに対応し、1つの現在の値のみが処理され、実行のために次の値に渡されます.4つの値が実行された後、結果をコネクタに返すことができ、コネクタはソケットを介して顧客に。
上で紹介した非常に多くのコンポーネントで、コンポーネントはどのように体内で通信しますか?次の図は、これらの質問に答えることができます。
(4)プロセス
- 1.ユーザーがアドレスを入力するか、ブラウザーのリンクをクリックすると、ブラウザーはTCP接続要求をTomcatサーバーに送信します。
- 2. Tomcatサーバーは、要求を受信して接続を確立することに同意します。この時点で、コネクターを介してクライアントとの接続が確立されます。
- 3.ブラウザはHttp形式でデータパケットを生成し、TomcatサーバーにHttpリクエストを送信します
- 4.コネクタはリクエストを受信すると、前述の3つのコンポーネントEndPoint、Processor、Adapterを介してリクエストをServletRequestにカプセル化し、コンテナを送信します。
- 5.エンジンはリクエストを受信すると、URLとサーブレット間のマッピング関係に従って特定のサーブレットを検索します。
- 6.サーブレットがビジネスロジックを処理した後、エンジンは処理結果を対応するコネクタに返します。
- 7.Connectorは応答結果をブラウザに送信します
- 8.ブラウザはデータを受信すると、データをHttp形式で解析し、結果をユーザーに表示します。
簡単に言えば:
ブラウザは、コネクタを介してWebサーバーとの接続を確立する責任があります。
ブラウザは、対応するコネクタにリクエストを送信します。
コネクタはリクエストを受信すると、リクエストをカプセル化してコンテナに転送します。
コンテナは、ビジネスロジックを処理するための対応するサーブレットを見つける責任があります。
コンテナは、応答結果をコネクタに返す責任があります。
コネクタは、応答結果をブラウザに返す責任があります。
ブラウザは、認識可能なデータを解析してユーザーに表示する責任があります。
3つの要約
1週間の学習の後、Tomcatの基本的なリクエスト処理プロセスであるTomcatとは何かをようやく理解しました。しかし実際には、セルベットのコンテナ分類で言及されている2番目と3番目はまだ十分に理解されておらず、要約も良くありません。関連情報を探す必要があります。
また、学んだ内容と現在の会社のプロジェクトコード構造との間にはまだ少しの食い違いがあり、今後も勉強を続けていきます。さあ、最後にWebアプリケーション開発について少し理解してください。以前はこのリクエストがどのようにWebサーバーに送信されたかはよくわかりませんでしたが、ついに理解できました。
次の記事は、Xiaobai(2)の初心者のWeb開発の簡単な要約を理解することです-web.xmlとは何ですか