ソフトウェアアーキテクチャ:
B/S アーキテクチャ: ブラウザ/サーバー アーキテクチャ。クライアントはブラウザを使用してサーバーにアクセスします。ユーザーはクライアントをインストールする必要はなく、コンピュータのみがアクセスできるブラウザを持ちます。
C/S アーキテクチャ: クライアント/サーバー アーキテクチャ: クライアントは、ソフトウェア プロバイダーが提供するクライアント プログラムを使用してアクセスし、ユーザーはクライアント プログラムをダウンロードしてインストールする必要があります。
C/S
- C/S 構造は、QQ などのクライアント/サーバー (Client/Server) です。
- サーバー側プログラムとクライアント側プログラムを作成する必要があります。たとえば、インストールしたのは QQ クライアント側プログラムです。
- 短所: ソフトウェアを更新する場合、クライアントとサーバーの両方を同時に更新する必要があり、面倒です。
- 利点: セキュリティが向上します。
B/S
- B/S 構造はブラウザ/サーバー (ブラウザ/サーバー) です。
- 利点: サーバー側のプログラムを作成するだけで済みます。
- デメリット:セキュリティが弱い。
Web リソースにアクセスします。
動的リソースへのアクセス: サーバーは動的リソースを実行し、実行後に結果 (静的リソース) をクライアントに応答する必要があります。
アクセスされた静的リソース: サーバーは静的リソースを使用してクライアントに直接応答します。
サーバ
サーバー: ハードウェア サーバーとソフトウェア サーバーを示します。
ハードウェアサーバー: コンピューター
ソフトウェア サーバー: ソフトウェア JavaWeb はソフトウェア サーバーを使用します
- Tomcat (Apache): 中小規模の JavaEE サーバーである Apache Foundation は、少数の JavaEE 標準サーブレット/jsp のみをサポートします。オープンソース、無料(開発用)
- JBoss (JBOSS): すべての JavaEE 仕様をサポートする有料の大規模 JavaEE サーバー。
- Weblogic (Oracle): すべての JavaEE 仕様をサポートする有料の大規模 JavaEE サーバー。
- Websphere (IBM): IBM Corporation は大規模な JavaEE サーバーであり、すべての JavaEE 仕様をサポートしており、料金がかかります。
Webプロジェクトの構造
-
静的な Web プロジェクト構造の理解
静的リソースを保存するディレクトリを作成します。
- bin: このディレクトリにはバイナリの実行可能ファイルが格納されます。インストール バージョンの場合、このディレクトリには 2 つの exe ファイルがあります: tomcat6.exe と tomcat6w.exe。前者はコンソールで Tomcat を起動し、後者は UGI ウィンドウをポップアップして Tomcat を起動します。解凍バージョンの場合は、startup.bat ファイルと shutdown.bat ファイルがあります。
- conf: これは非常に重要なディレクトリです。このディレクトリには 4 つの最も重要なファイルがあります。
- server.xml: サーバー全体の情報を設定します。たとえば、ポート番号の変更、仮想ホストの追加など; tomcat-users.xml: Tomcat ユーザーのファイルを保存し、Tomcat のユーザー名とパスワード、およびユーザーのロール情報が保存されます。ファイル内のコメント情報に従って Tomcat ユーザーを追加し、Tomcat ホームページの Tomcat Manager ページに入ることができます。
- web.xml: デプロイメント記述子ファイル。このファイルには多くの MIME タイプ、つまりドキュメント タイプが登録されます。これらの MIME タイプは、クライアントとサーバーの間でドキュメント タイプを記述するために使用されます。ユーザーが HTML Web ページをリクエストすると、サーバーはクライアントのブラウザに、ブラウザから応答されたドキュメントが MIME タイプである text/html タイプであることも伝えます。クライアントのブラウザは、この MIME タイプを通じてそれを処理する方法を認識します。もちろん、このhtmlファイルはブラウザ上で表示されます。ただし、サーバーが exe ファイルで応答した場合、ブラウザがそれを表示することはできませんが、代わりにダウンロード ウィンドウがポップアップ表示されます。MIME は、ドキュメントのコンテンツの種類を記述するために使用されます。
- context.xml: すべてのアプリケーションの統合設定。通常は設定しません。
- lib: Tomcat のクラス ライブラリ。多くの jar ファイルが含まれています。Tomcat が依存する jar ファイルを追加する必要がある場合は、このディレクトリに置くことができます。もちろん、アプリケーションが依存する jar ファイルをこのディレクトリに置くこともできます。このディレクトリ内のすべての jar プロジェクトは共有できますが、アプリケーションが他の Tomcat の下に配置されると、このディレクトリ内の Jar パッケージを共有できなくなります。したがって、Tomcat に必要な Jar パッケージのみをこのディレクトリに置くことをお勧めします。
- logs: このディレクトリには、Tomcat の起動とシャットダウンに関する情報が記録されるログ ファイルが格納されています。Tomcat の起動時にエラーが発生した場合、例外もログ ファイルに記録されます。
- temp: Tomcat の一時ファイルを保存します。このディレクトリ内の内容は Tomcat を停止した後に削除できます。
- webapps: Web プロジェクトを保存するディレクトリ。それぞれがプロジェクトです。このディレクトリにすでにディレクトリがある場合、それらはすべて Tomcat によってもたらされます。計画。このうちROOTは特殊なプロジェクトであり、アドレスバーにプロジェクトディレクトリが指定されていない場合はROOTプロジェクトに相当します。http://localhost:8080/examples にサンプル プロジェクトを入力します。このうち例として挙げられるのはプロジェクト名、つまりフォルダーの名前です。
- work: 実行時に生成されるファイルと、最終的に実行されるファイルはすべてここにあります。Web アプリのプロジェクトを通じて生成されます。このディレクトリの内容を削除しても、再実行すると作業ディレクトリが再生成されます。クライアント ユーザーが JSP ファイルにアクセスすると、Tomcat は JSP を通じて Java ファイルを生成し、その Java ファイルをコンパイルしてクラス ファイルを生成します。生成された Java ファイルとクラス ファイルはこのディレクトリに保存されます。
- ライセンス: ライセンス。
- 注意: ドキュメント。
プロジェクト展開:運用・保守
-
プロジェクト ディレクトリを (war パッケージ内に) tomcat インストール ディレクトリ/webapps ディレクトリにコピーします。
jar: Java プロジェクトを jar に入れる
war: Web プロジェクトは war としてマークされ、Tomcat の webapps ディレクトリにコピーされます。Tomcat が起動すると、war は自動的に解凍されます。
- Tomcat インストール ディレクトリ/conf/server.xml ファイルに、プロジェクトを公開するための
<Host>
ラベルを追加します。<context>
<Context docBase="项目路径" path="/访问项目名" />
- conf/Catalina/localhost に任意の名前の XML ファイルを作成します。ファイルに書き込む
アクセスしたプロジェクト名:xmlファイル名
非公開: XML ファイル名に .backup を追加します。
本手法:アイデアリリースプロジェクト手法
javaWeb の動的プロジェクト構造
-
プロジェクトのルートディレクトリ
|–WEB-INF
|–lib サードパーティの jar
|--classes クラスパス src ディレクトリ、クラスコンパイル後のバイトコードファイルの保存パス、設定ファイル
|–web.xml ファイル 現在の Web プロジェクトの構成ファイル
|– 静的リソース
WEB-INF 下のリソースにはブラウザから直接アクセスできません
サーブレット
javaWeb の 3 つのコンポーネント:
サーブレット: ユーザーリクエストを受信し、リクエストを処理し、結果に応答します。
フィルター: リクエストをインターセプトするために使用されるフィルター
リスナー: リスナー、特定の動作を監視し、ユーザーがこの動作をトリガーしている限り、コードを実行します
聞く:
リクエストヘッダーとリクエストボディが含まれます (get にはリクエストボディがありません)
応答:
応答ヘッダー、応答本文 (応答本文とも呼ばれます) が含まれます。
サーブレットを実装するには 3 つの方法があります。
-
javax.servlet.Servlet インターフェースを実装します。
-
javax.servlet.GenericServlet クラスを継承します。
-
開発によく使用されるjavax.servlet.http.HttpServlet クラスを継承します。
HttpServlet は、HTTP リクエストを処理するために使用される、GenericServlet クラスのサブクラスである抽象クラスです。
javaweb の 3 つの主要コンポーネントのメソッドのほとんどは、私たちが呼び出す必要はなく、通常はサーバーによって呼び出されます。そして、サーブレット オブジェクトは私たちではなくサーバーによって作成されます。
サーブレットのライフサイクル (インタビューで一般的)
Born : デフォルトでは、サーブレットはサーバーによって作成され、初めてアクセスされたときに 1 回だけ作成され、サーブレットの作成後にinit() メソッドが 1 回呼び出されます。
Service :ユーザーがリクエストするたびに、service() メソッドが呼び出されます。
Death : サーバーがシャットダウンする前に、destroy() メソッドを呼び出して、作成されたすべてのオブジェクトを破棄します。
サーブレット内のその他のオブジェクト
-
ServletConfig オブジェクト: Tomcat によって作成されたサーブレットの構成に対応し、
- サーブレットの初期化パラメータパラメータ名を取得します。パラメータ値はString型です。
String getInitParameter(String name) 初期化パラメータ名に従って初期化パラメータ値を取得します
Enumeration getInitParameterNames() すべての初期化パラメータ名を取得します
jdk の初期のコレクション: 列挙
[外部リンク画像の転送に失敗しました。ソース サイトには盗難防止リンク メカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-DoNZxysk-1667533413184) (D:/%E9%A3%9E%E6%80%9D%E5%AE%9E%E8%AE%AD%E4%B8%89/6.JavaWeb/%E8%AF%BE%E4%BB%B) 6/%E8% 80%81%E5%B8%88%E7%AC%94%E8%AE%B0/10-17%E7%AC%94%E8%AE%B0/assets/image-20221017112339511.png)]
サーブレットの設定では、
<servlet> <!-- 名称 随意取, 一般取名类名--> <servlet-name>AServlet</servlet-name> <!--对应的Servlet类, 全限定名(包.类名) --> <servlet-class>com.fs.web.AServlet</servlet-class> <!--配置初始化参数--> <init-param> <param-name>name</param-name> <param-value>张三</param-value> </init-param> <init-param> <param-name>age</param-name> <param-value>21</param-value> </init-param> </servlet>
- ServletContext getServletContext() 最大のドメイン オブジェクト (アプリケーション ドメイン) である ServletContext を取得します。
-
ServletRequest オブジェクト: リクエスト オブジェクト。Tomcat のコア作成については後で詳しく説明します。
コアメソッド: リクエストパラメータを取得する
String getParameter(String name) リクエストパラメータ名に従ってリクエストパラメータ値を取得します
3. ServletResponse オブジェクト: 応答オブジェクト。Tomcat の作成のコアについては後で詳しく説明します。
getWriter() は文字応答出力ストリームを取得し、サーバーは出力ストリームを変更することでクライアントのブラウザ ページにデータを書き込みます。
System.out.println(): データをサーバー コンソールに出力します。
フロントエンドがリクエストを送信する方法は次のとおりです。
- フォームのアクションは get、post メソッドです。デフォルト値は get、set post、send post request
- ハイパーリンクは
<a href="">
取得のみ可能です - ブラウザのアドレスバーに URL を直接入力し、取得するだけです
- jsはajaxリクエストを送信し、取得、投稿することができます
リクエストメソッド:GETリクエスト/POSTリクエスト
get リクエスト: リクエスト パラメータは URL 経由で渡されます。リクエスト パラメータ URL: url?k1=v1&k2=v2&…
安全ではありません。文字列を渡します。ファイル データを渡すことはできません
ポストリクエスト: リクエストパラメータはリクエストボディを通じて渡されます。
高いセキュリティ、文字列を渡す、ファイルデータを渡す
サーブレットの詳細
サーブレットに注釈を付ける
アノテーション: 特別なインターフェース、メソッド、クラス、プロパティで @ アノテーション名を使用します... (アノテーション クラスのオブジェクトを作成します)
クラスタイプ: クラスインターフェイス列挙型 @interface
アノテーション機能:設定ファイルの置き換え
@WebServlet アノテーションはサーブレット構成ファイルを置き換えます
// name 忽略: //@WebServlet(name="DServlet",urlPatterns="/DServlet") //@WebServlet(urlPatterns="/DServlet") //urlPatterns 与value 等同 //@WebServlet(value="/DServlet") // 如果只给value赋值, 省略 value= @WebServlet("/DServlet")
サーブレットはスレッドセーフですか?
判断基準:複数のスレッドが統一リソースを共有しているか、共有していない場合:安全、共有:安全ではない
Tomcat では、サーブレット クラスのオブジェクトは 1 つだけです。複数のリクエストがある場合、同じサーブレット オブジェクトがリクエストされ、同じオブジェクトが複数のスレッドで使用されます。サーブレット オブジェクトは共有され、スレッドは安全ではありません。
サーブレットはスレッドセーフではないため、サーブレットにデータを保存するための属性を提供しないでください
サーブレット URL パターン
url-pattern 関数: このサーブレットの URL にアクセスするためにこのサーブレットをバインドします。
サーブレットは 1 つの URL のみをバインドできますか?
複数の URL をバインドできますが、実際の開発では通常、バインドされるのは 1 つだけです
URLパターンの書き方
/string は決定された URL をバインドします
* を組み合わせる (ワイルドカード、任意)
- /user/* プレフィックスは、/user で始まり、その後ろにあるもの (/user/a /user/b など) に一致します。
- *.do サフィックス一致。URL がサフィックス名で終わる限り、a.do c.do のように一致します。
注: /*。サフィックス名はタイプミスです。
- /* すべて一致
URL の一致が正確であればあるほど優先順位が高くなります。アスタリスクのない URL はアスタリスクのある URL よりも優先されます。
サーブレットの作成タイミングを変更する
サーブレットのデフォルトの作成時間は、初めてサーブレットの作成がリクエストされたときであり、これは最初のペナルティとも呼ばれ、最初のリクエストにはもう少し時間がかかります。
サーブレット作成のタイミングを変更する: Web サーバーの起動時にサーブレットを作成します
<servlet>
<!--设置tomcat启动的时候,创建-->
<load-on-startup>非负整数</load-on-startup>
</servlet>
「load-on-startup」の数値が小さいほど、早く作成されます。
ServletContext (コンテキスト)
ServletContext オブジェクトの寿命は空 (tomcat) と同じです
ServletContext は Tomcat の起動時に作成され、Tomcat の終了時に破棄されます。Webプロジェクト全体で1 つだけ存在します。
Web プロジェクト内のどこにいても、すべてのユーザーがアクセスできます
役割:グローバル共有データ コンテナとして、ドメイン オブジェクトとしても知られています。ServletContext はアプリケーション ドメインと呼ばれます。
ドメインオブジェクト関数:データにアクセス、データはキー/値構造キー:文字列型値:オブジェクト型
javaWeb には 4 つのドメインがあります。
1. アプリケーション ドメインはプロジェクト全体で有効です
- セッション ドメインは通常、同じセッション内で有効です
- リクエストフィールドは通常、同じリクエスト内で有効です
- ページ フィールドは同じページ/サーブレット上で有効です。これと同等です。
ドメインオブジェクトには次のメソッドがあります
void setAttribute(String name, Object object) ドメインにデータを保存します。名前が存在しない場合は追加し、名前が存在する場合はオブジェクトを上書きします。
Object getAttribute(String name) ドメインからデータを取得します。名前が存在しない場合は、null を返します。
RemoveAttribute(String name) はフィールドからデータを削除します
Enumeration getAttributeNames() ドメイン内のすべての名前を取得します
ページ フィールドは同じページ/サーブレット上で有効です。これと同等です。
ドメインオブジェクトには次のメソッドがあります
void setAttribute(String name, Object object) ドメインにデータを保存します。名前が存在しない場合は追加し、名前が存在する場合はオブジェクトを上書きします。
Object getAttribute(String name) ドメインからデータを取得します。名前が存在しない場合は、null を返します。
RemoveAttribute(String name) はフィールドからデータを削除します
Enumeration getAttributeNames() ドメイン内のすべての名前を取得します