記事ディレクトリ
1.JavaWeb
JavaWeb 開発は、これまでに学習した内容をすべて組み合わせた組み合わせです。JavaWeb の新しい内容はそれほど多くありませんが、
この段階で JavaWeb 開発のアイデアが形成されるはずです。現在の開発では、JavaWeb 関連のテクノロジーは直接使用されておらず、一部のテクノロジーは現在では使用されていませんが、Web 開発のモードと考え方
では、ソフトウェアとは呼べない、初期段階ですべてのコンテンツを形成する必要があります。JavaWeb 以降、ビュー (インターフェース) + サーバー側の処理 + データベースが相互作用して、完全なプロジェクトを形成することがわかります。
1.1 開発モード
( 1) C/S:クライアント/サーバー (クライアント/サーバー)
自分のコンピュータに専用クライアントをインストールし、このクライアントを使用してサーバーと対話することを指します。
類似: QQ/WeChat/大規模オンラインゲーム/マルチメディア教育ソフトウェア
利点:
1. 保存が簡単 (帯域幅を有効に利用でき、変更されたデータをネットワーク送信で送信するだけで済み、ソフトウェアの保持率が向上します)
2.大規模なソフトウェアが使いやすい
デメリット:
1. 開発コストが高い
2. メンテナンスコストが高い
(2) B/S: Blag/Server (ブラウザ/サーバー)
B/S構造とは、ユーザーがブラウザ経由で直接アクセスできることを意味し、現在最も広く使用されている方法です。
利点:
- 開発コストが低い
- メンテナンスコストが低い
- 直接開発が容易
短所:
1. 保存が簡単ではない (ユーザーは URL を覚えておく必要がある) [内部利用向け]
2. 現時点では大容量データの送信には適していない
1.1.1 B/S構造の関連技術
(1) サーバー: JavaSE\Database\Setvlet/JavaEE フレームワーク テクノロジ
(2) クライアント: HTML\avaScript\JQuery\Ajax\その他のフロントエンド フレームワーク
1.1.2 B/S動作モード
- IPアドレスはネットワーク上の各コンピュータのアドレスです
- 使用しているIPアドレスは動的です
Web アプリケーションでは、すべてリクエスト/レスポンス モードが使用されます。B
/S 構造では、サーバーからクライアントにデータを直接プッシュするリクエストはありません。
1.2 JavaWeb のサーバー – tomcat
1.2.1 サーバー
(1) ハードウェアサーバー:コンピュータ、クラウドサーバー
(2) ソフトウェアサーバー:ソフトウェアサーバーはアプリケーションサーバーとも呼ばれ、
他のアプリケーションを展開して実行できるコンピュータ上で動作するソフトウェアです。 、ソフトウェアそれをサーバーと呼びましょう。
1.2.2 Tomcatサーバー
Tomcat は JavaEE アプリケーション サーバーです。作成した Web アプリケーションが Tomcat サーバーに公開されると、作成した Web アプリケーションがコンパイル、解析、公開に使用された後、ユーザーがサーバーにアクセスできるようになります (ブラウザーと URL を介した直接アクセス)。私たちのプログラム。
1.2.3 Tomcatのインストール
- Tomcat のディレクトリ構造
- 環境変数を構成する
- システム変数を追加します。
CATALINA_HOME
- システム変数のパスに
%CATALINA_HOME%in
と を%CATALINA_HOME%lib
- テスト走行
管理者として cmd を開き、Tomcat の bin ディレクトリに入り、次のように入力します。service.bat install
bin ディレクトリを開き、startup.bat ファイルをダブルクリックします。
ブラウザに入力します:http://localhost:8080/
正常に開いた場合は、ダウンロードと構成が成功したことを意味します。
1.2.4 IDEA が javaweb プロジェクトを作成する
この記事を参照してください: https://zhuanlan.zhihu.com/p/100092323
1.3 JSP
1.3.1 Jsp の概要
JSP正式名: Java Server Page (Java Server Page)
JSPはHTMLファイルにJavaコードを埋め込むもので、ページ内ではJavaコードを使用して動的コンテンツを実行したり、HTMLコードを使用して静的コンテンツを実行したりできます
。関数の処理を担当し、結果を動的に生成します。ページと Java によって生成された結果を美しく表示するための HTML
共通エンコーディング: ISO-8859-1: 西欧エンコーディングは中国語GB 2312 を
サポートしません。中国語をサポートし、簡体字中国語のみGBK: サポートします。中国語、簡体字中国語と繁体字中国語をサポートUTF-8: 世界すべての国の言語をサポート
1.3.2 JSPページのコンテンツ構成
1. 静的コンテンツ: HTML/CSS/JavaScript
2. コマンド <%@ コマンド名 %>: コマンド名は通常、ページを設定するために使用されます
3. 小さなスクリプト <%java code%>: Java コードの作成に使用されます。メソッドやプロパティを定義できないことに加えて、任意の Java コードを作成できます。
4. 式 <%=expression%>: Java コンテンツをページに出力するために使用されます
5. 宣言 <%! 宣言内容 %>: ページ内のメソッドを宣言するために使用されます。
6. コメント <%–JSP–%>: JSP コメント
7. 標準アクション < jsp: アクション名 />: JSP ページ内の関数を実行するために使用されます。
1.3.3 JSPの実行処理
.ispエスケープ>.javaコンパイル>.クラス埋め込む>JVM
JSP ページは、初めて実行するときは非効率的です。最初の実行はコンパイルして実行する前にエスケープする必要があり、 2 回目以降はエスケープしてコンパイルして直接JVM の実行を
実行する必要がないためです。
クラスファイルのJSPページ 2つの部分:
1. まずサーバーがJavaコードを実行し、実行後に実行結果がHTML形式でクライアントに応答されます 2. クライアントは
応答されたHTMLコードを解釈して実行します。
1.3.4 リクエストオブジェクトとレスポンスオブジェクトを利用してユーザー登録・ログイン機能を実現する【簡易ユーザー管理プロジェクト】
- JSPの処理の流れ
-
リクエストオブジェクト
リクエスト オブジェクト。クライアントはリクエスト オブジェクトをサーバーに送信します。
request.getParameter("paramName"): クライアントによって送信されたパラメータ名に従って、対応するパラメータ値 (フォーム) を取得します
request.setCharacterEncoding("UTF-8"): リクエスト オブジェクトのエンコーディング セットを設定します
request.setAttribute( " key", "value"):リクエストオブジェクトのスコープ内に属性が格納されます(属性は複数格納可能)
request.getAttribute("key"):属性名に応じてリクエストオブジェクトに格納されている属性値を取得します
request .getRequestDispatcher(url).forward(リクエスト, レスポンス): リクエストの転送 -
応答オブジェクト
応答オブジェクト。サーバーからクライアントに送信される応答オブジェクトは、response.sendRedirect("ur1") と呼ばれます。リダイレクト。ページ ジャンプを実現するために使用されます (ハイパーリンクと似ていますが、リダイレクト
は自動的にジャンプするためにクリックする必要はありません)。
ページジャンプを実現するために使用できますが、「リクエストオブジェクト」をターゲットページに渡すことはできません -
リクエスト転送とリダイレクトの違いは何ですか? (面接では必ず質問します)
共通点: どちらもページジャンプを実現できます
相違点:
(1) ブラウザはアドレスバーに異なるアドレスを表示します-
ブラウザのアドレスバーに表示されるアドレスがリダイレクト実現時のターゲットアドレスとなります。
-
ブラウザのアドレスバーに表示されるアドレスがリクエスト転送実装時の送信元アドレス(転送元)となります。
(2)転送データが異なる
- リダイレクションは、ジャンプを実現する際にプロジェクトアドレスの形でデータを転送する「URLパラメータ転送」の形式を使用できます。
- リクエスト転送は、ジャンプ実装時にプロジェクトアドレスの形でデータを転送する「URLパラメータ転送」の形式を利用できるほか、「リクエストオブジェクト」をターゲットアドレスに転送することもできます。
(3) 異なるプロセッサ機構
- リダイレクトは、リダイレクト時に別のリクエストをサーバーに送信することと同じです。
- ジャンプを実現するためのリクエスト転送はサーバの内部ジャンプに属し、ジャンプ処理はサーバ内で直接実行され、リクエストは再送信されないため、リクエスト転送を使用すると元のリクエストオブジェクトを転送できます。ターゲットの場所に到達し、リクエスト延長の効果が達成されました。
-
-
リクエストの転送とリダイレクトの選択?
一般に、ページにジャンプしたいがリクエスト データを渡す必要がない場合は、この時点ではリダイレクトを使用します。
サーバー内のハンドラー間でジャンプする場合や、 request オブジェクトがページに渡されるため、この時点ではリクエスト転送を使用することをお勧めします。
1.4 JSP組み込みオブジェクト
1.4.1 組み込みオブジェクトとは
組み込みオブジェクトは開発者ではなく「アプリケーションサーバー(tomcat)」によって作成され、これらのオブジェクトはJSPページで直接使用できます。
1.4.2 JSP 9 つの組み込みオブジェクト (暗黙的オブジェクト)
-
request: (リクエストオブジェクト)
これはスコープ オブジェクトであり、クライアントからサーバーに送信されるリクエストを表します。
- リクエストのライフサイクル: リクエストは 1 つだけです。クライアントがサーバーにリクエストを送信すると、リクエストがなくなるとサーバーはリクエストを直接破棄します。
- デフォルトでは、リクエスト オブジェクトのライフ サイクルは 1 つのリクエストに制限されており、その寿命は比較的短いです
- リクエストオブジェクトのライフサイクルを延長し、「リクエスト転送」によりリクエストオブジェクトを他のJSPページやサーブレットに渡すことで、リクエストオブジェクトを拡張できます。
- リクエストオブジェクト内のデータ:
-
リクエストを送信するとき、クライアントはクライアントの関連データを「バイトコードの形式」でサーバーに送信し、サーバーはこれらのリクエストのバイトコードをデコードしてリクエスト オブジェクトにカプセル化します。
-
クライアントから送信されたデータ:
- クライアントホスト情報
- クライアントのブラウザ情報
- リクエストヘッダーの追加情報
- リクエストパラメータ(フォームデータ/URLデータ)
-
- リクエストのライフサイクル: リクエストは 1 つだけです。クライアントがサーバーにリクエストを送信すると、リクエストがなくなるとサーバーはリクエストを直接破棄します。
-
リクエスト オブジェクトには属性も保存できます。これらの属性はクライアントによって渡されるのではなく、サーバーが「データを渡す」リクエストでアクティブに保存するデータです。
- JavaWeb のスコープ オブジェクトは、データの受け渡しに使用できるプロパティを追加できます。
- リクエストは内部で Map コレクションを使用して属性を保存します。キーは文字列型で、値はオブジェクト型です。
- request.setAttribute("key", "value"): リクエストオブジェクトのスコープに属性を格納
request.getAttribute("key"): 属性名に従ってリクエストオブジェクトに格納されている属性値を取得 - 削除.getAttribute
- JavaWeb のスコープ オブジェクトは、データの受け渡しに使用できるプロパティを追加できます。
-
一般的な方法:
(1) request.setCharacterEncoding("utf-8"):设置request对象的编码集 (2) request.getParameter("paramName"):根据参数名获得对应的参数值 (3) request.getParameterValues("paramName"):根据参数名获得一组同名的参数值,返回字符串数组 (4) request.setAttribute(attrName,attrValue):向request作用域中设置一个属性 (5) request.getAttribute(attrName);从request作用域中获取一个属性的值,默认为Object类型 (6) request.getRequestDispatch(url).forward(request,response);请求转发
-
応答: 応答オブジェクト、クライアントに対するサーバーの応答
-
サーバーは応答としてデータをクライアントに渡すこともできます。渡されるのは文字列です
-
応答オブジェクトがクライアントにデータを転送するには、次の 3 つの方法があります。
-
URLを介してパラメータを渡す
-
クッキーを通過する
-
//创建Cookie对象 Cookie cookie = new Cookie("phone","110"); //将cookie对象添加到response对象中 response.addCookie(cookie); response.sendRedirect("demo2.jsp");
- パススルー I/O ストリーム (フロントエンドとバックエンドの分離後に一般的に使用されます)
PrintWriter writer = response.getWrite(); out.println("hello");
-
-
応答オブジェクトの一般的なメソッド:
response.sendRedirect(url) //重定向,用于实现页面跳转 response.setContentType("text/html;charset=utf-8") //设置响应的内容类型及编码集 response.addCookie(cookie) //向请求对象中添加Cookie对象,此时response对象就会将cookie发送到客户端由浏览器保存cookie response.getWrite();获得一个输出流,通过该输出流可以向客户端直接输出内容,如果需要输出中文则需要设置"内容类型"
-
-
セッション: セッションオブジェクト
セッションを示します。セッションとは何ですか?
- セッションとは、リクエストに対する応答の集合を指します。
- セッションとは、クライアントが初めてサーバーにリクエストを送信したとき、クライアントのブラウザが閉じられるか、サーバーが閉じられるかタイムアウトになるか、手動で破棄されて終了されるまでを指します。
- セッション中のすべての「リクエストとレスポンス」は同じセッション内にあります
JavaWeb にセッションという概念があるのはなぜですか?
- Http プロトコルを理解する: Http プロトコルはステートレス プロトコルです。ステートレスとは、このプロトコルではクライアントとサーバー間の接続状態が維持されないことを意味します。
- Http プロトコルを使用しているため、サーバーはリクエストが以前に行われたかどうかを判断できませんが、現在のクライアントとサーバーの状態はセッションを通じて維持できます。
- Web 開発では、セッションを使用してクライアントとサーバー間の関係を維持できます。
Web アプリケーションでセッションを使用してクライアントとサーバー間の関係を維持するにはどうすればよいですか?
-
sessionId によって維持される
-
クライアントが初めてサーバーにアクセスするとき、サーバー上に対応する sessionId があるかどうか、ない場合は最初のアクセスになります。
-
サーバーはセッション オブジェクトを作成して一意の sessionId を生成し、sessionId をサーバーに保存してクライアントに応答します。
-
クライアント ブラウザが sessionId を受信すると、自動的に sessionId を保存します (一時ストレージ)。
-
sessionId は、クライアントがサーバーにリクエストを送信するたびに自動的にサーバーに送信されます。
-
サーバーは sessionId を受信して sessionId が有効かどうかを確認し、同時にセッション オブジェクトからデータを取得できます。
-
-
セッションはブラウザーに依存し、ブラウザーが異なれば生成される sessionId も異なります。
セッションの開始条件と破棄条件
- 開始: クライアントが初めてサーバーにアクセスします。
-
破壊は次の方法で実行できます。
-
ブラウザを閉じる
-
サーバーは session.invalidate(); を使用して手動で破棄されます。
-
タイムアウト。クライアントが一定時間内にサーバーにリクエストを送信しない場合、サーバーはセッションが無効であるとみなし、自動的にセッションを破棄します (Tomcat のデフォルトのタイムアウトは 30 分です)。
-
サーバーのシャットダウンまたは再起動
- Session もスコープ オブジェクトであり、そのスコープは最初のリクエストからセッション破棄の終了までであり、スコープ内のデータは同じセッションで共有されます。
-
-
セッション共通メソッド
session.getId():获得sessionId session.invalidate():销毁session session.setAttribute(attrName,attrValue):向session作用域中存放一个属性 session.getAttribute(attrName):从session中获取一个属性值
-
アプリケーション: アプリケーションサーバーオブジェクト
-
このオブジェクトは現在のアプリケーション サーバーを表します
-
このオブジェクトはデータを保存できるスコープ オブジェクトでもありますが、このオブジェクトのスコープはサーバー全体に設定されており、このオブジェクトはどこにいても誰でも取得できます。
したがって、アプリケーションオブジェクトに保存されるデータはサーバー全体の共有データであり、ユーザーに関するデータをオブジェクトに保存することはできません。
-
-
out: 出力オブジェクト (コンテンツ オブジェクトをページに出力します。このオブジェクトは使用されていません)
-
page: 現在のオブジェクトを示します (現在のページ オブジェクト、このキーワードに相当)
-
pageContext: ページ コンテキスト オブジェクト (現在のページ コンテキスト オブジェクト、このオブジェクトは使用されません)
-
config: 設定オブジェクト (設定オブジェクト、設定情報はページ内で取得可能、使用されません)
-
例外: 例外オブジェクト (JSP ページ例外を処理します。現在は使用されていません)
1.5 サーベルト(キー)
1.5.1 サーブレットの基本的な使い方
- サーブレットとは何ですか? (インタビューの質問)
回答: サーブレット クラスはサーバー側で動作する Java クラスであり、リスペクト (リクエスト オブジェクト)、レスポンス (アクセス オブジェクト)、およびアクセス アドレスを持っています。
- サーブレットの役割
クライアントのリクエストを取得し、クライアントに応答するために使用されます
- 主にリクエストとレスポンスを担当し、特定の関数処理は行わず、基礎となる関数処理のクラスとメソッドを呼び出します。
- サーブレットの使用
-
(1) HttpServlet クラスを継承するクラスを作成する HttpServlet クラスを継承するクラスが Servlet クラスになります。
-
(2) HttpServlet クラスの doGet メソッドと doPost メソッドを書き換えます (どちらかまたは両方を書き換えます)
doGet メソッド: クライアントによって送信された get リクエストを処理するために使用されます。
doPost メソッド: クライアントによって送信された Post リクエストを処理するために使用されます。
Get リクエストと Post リクエストの違い(インタビューの焦点)
-
get リクエストは通常、データを取得することです (実際にはデータを送信することもできますが、一般的な方法はデータを取得することです)。post リクエストは通常、
データを送信することです。 -
get のパラメータは URL に配置されるため、プライバシーとセキュリティが不十分です。要求されるデータの長さは制限されています。
異なるブラウザとサーバーは異なります。一般的に、制限は 2 ~ 8K であり、より一般的なものです。 1K 以内です。;
投稿リクエストの長さに制限はなく、リクエスト データはボディに配置されます。 -
get リクエストはサーバーを更新しますが、ロールバックは効果がありません。post リクエストがロールバックすると、データ リクエストが再送信されます。
-
Get リクエストはキャッシュできますが、POST リクエストはキャッシュされません。
-
取得リクエストはブラウザ履歴に保存されますが、投稿は保存されません。
取得リクエストはパラメータが URL 内にあるためブックマークできますが、投稿リクエストはブックマークできません。そのパラメータは URL に含まれていません。 -
Get リクエストは URL エンコードのみ可能 (application-x-www-form-urlencoded)、
post リクエストは複数のタイプ (multipart/form-data) をサポートします。
-
-
(3) サーブレットを設定する サーブレットを設定するには 2 つの方法があります。
サーブレット クラスのインスタンスは開発者自身によって作成されるのではなく、アプリケーション サーバー自体によって作成され、
サーブレット クラスが正常に作成されると、サーバーのメモリに保存されます。サーブレットが作成されると、サーブレットはサーバーのメモリに保存され、サーブレット オブジェクトの「マッピング アドレス」を介してサーブレット オブジェクトにアクセスできます。
サーブレットのアクセス フロー:
(1) クライアントは URL パターンに直接アクセスし、サーバーは URL パターンに従って現在のマッピング パスに対応するサーブレット オブジェクトを検索します。
(2) サーブレットオブジェクト名に基づいて、現在のオブジェクトに対応するオブジェクト名を検索します。
(3) リクエストの種類に応じて、オブジェクト内の対応するメソッドを実行します。
- (1) web.xmlファイルでの設定
<!-- servlet配置 servlet-name:指定对象的对象名 servlet-class: --> <servlet> <servlet-name>demoServlet</servlet-name> <servlet-class>com.jiazhong.registeAndLogin.servlet.ServletDemo</servlet-class> </servlet> <!--servlet映射配置 servlet-name:Servlet对象名,与servlet配置的对象名一致 url-pattern:配置当前Servlet映射地址,地址名可以任意 --> <servlet-mapping> <servlet-name>demoServlet</servlet-name> <url-pattern>/demo.do</url-pattern> </servlet-mapping>
-
(2) アノテーションによる設定
-
サーブレット クラスの @WebServlet (現在のサーブレット アクセス パス) アノテーションを使用して設定します。
- デフォルトでは、サーブレット オブジェクトの名前はクラス名の最初の文字を組み合わせた小文字です。
- 完全な構成 @WebServlet (name="名前はオブジェクト名を指定します" urlPatterns="パス名を指定します" 現在のサーブレット アクセス パス)
-
1.5.2 サーブレット変更登録・ログイン機能【簡易ユーザ管理プロジェクト】
1.5.3 サーブレットのライフサイクル管理
サーブレットのライフサイクル
サーブレットの生成から消滅までのプロセス
-
最初のリクエストとサーブレット: 最初にパラメータなしの構築メソッドを実行してサーブレット オブジェクトを作成し、次に init メソッドを実行し、doGet メソッドを実行します。
-
2 番目のリクエストからは、Servlet オブジェクトを作成する代わりに、doGet メソッド (サービス メソッド) に直接アクセスします。
(1) サーブレットのライフサイクルには次の段階が含まれます。
- インスタンス化: 引数なしのコンストラクターを呼び出して、サーブレット オブジェクト (Web サーバーによって作成される) を作成します。
サーブレットが初めて要求されると、Web サーバーはサーブレットをインスタンス化し、サーブレット クラス オブジェクトを作成します
。 最初のアクセス時に作成され、オブジェクトは作成されます。オブジェクトはメモリ内に常駐し、アクセスされるたびにオブジェクトがメモリから取得され、直接使用されます。 - 初期化: サーブレット オブジェクトが作成されると、初期化メソッドが自動的に呼び出され、初期化操作が実行されます。このメソッドは 1 回だけ呼び出されます。
- サービス: サービスは doGet|doPost|doDelect|doPut|Servcie を指します... これらはすべてサービス メソッドです
サーブレットがリクエストされるたびに、特定のサービス メソッドが実行され、リクエストの種類に応じて実行されるサービス メソッドは違う - Destroy: サーバーが閉じられると、現在のサーブレットが占有しているリソースをクリーンアップするために destroy メソッドが自動的に呼び出されます。
サーブレット作成のタイミング:
1. デフォルトでは、ユーザーが初めてサーブレットにアクセスすると、サーバーはサーブレット オブジェクトを作成します (遅延読み込みメカニズム) 2. タグを追加または追加して、
サーブレット作成注解
の"loadOnStartup=0"
作成web.xml
優先順位を変更できます。値は 0 で、サーバーの起動時にサーブレット オブジェクトが自動的に作成されることを意味します。<servlet>
<lodad-on-startup>
- インスタンス化: 引数なしのコンストラクターを呼び出して、サーブレット オブジェクト (Web サーバーによって作成される) を作成します。
1.5.4 サーブレットクラスの構造と実行プロセス
- カスタム サーブレットは HttpServlet を継承します
- HttpServlet は GenericServlet を継承します
- GenericServlet はサーブレット インターフェイスを実装します
- 現在のプロジェクトは Web プロジェクトであり、すべての Web プロジェクトは Http プロトコルに基づいています。HttpServlet は Http プロトコルに基づいたサーブレットです。
- クライアントリクエストはサーブレットの doGet リクエストまたは doPost リクエストに送信されます。
- クライアントはHttpServletクラスのサービスメソッド(サービスメソッド)に直接リクエストを送信し、サービスメソッド内のリクエストの判定メソッドをdoGetやdoPostなどのメソッドに委譲し、リクエストメソッドに応じて実行します。
- 私たちの実装では、カスタム サーブレットのサービス メソッドを書き換え、サービス メソッドで直接関数を処理し、リクエストを doGet メソッドまたは doPost メソッドに委任しません。
1.5.5 リクエスト転送とリダイレクトを利用した機能実装【簡易ユーザー管理プロジェクト】
- 管理者ログイン機能
- クライアントは管理者アカウントとパスワードを入力し、クライアントからデータを取得するためのloginServletを定義し、それを基礎となるadminLoginメソッドに渡し、応答応答を取得します。
- リクエストを使用してデータを取得する
- 取得したデータを基礎となる関数実装に渡します。
- 応答は成功ページにリダイレクトされ、リクエストは失敗ページに転送されます。
- クライアントは管理者アカウントとパスワードを入力し、クライアントからデータを取得するためのloginServletを定義し、それを基礎となるadminLoginメソッドに渡し、応答応答を取得します。
- ユーザークエリ機能
- データベースからユーザー情報を取得するには
- queryuserServlet を定義してサーバーからユーザー データを取得し、JSP ページに表示します。
- サーバーから JSP ページにデータを渡すと、ページが表示されます。
- ユーザー削除機能
- ユーザーIDをサーバーに渡します
- サーバーはユーザー番号を取得し、削除 SQL ステートメントをデータベースに送信し、指定されたデータを削除します。
- 削除が成功したらユーザーリストにジャンプします
- ユーザー変更機能
- ユーザーIDに基づいてユーザー情報を取得するサーブレットにリクエストを送信します。
- 基礎となる関数実装を呼び出す
- 最下層はクエリ結果を返します
- 変更ページ表示にユーザー情報を送信します
- 「サーブレットの変更」に変更を送信すると、サーブレットは基礎となる関数を呼び出します。
- 変更したデータを「Modify Servlet」に返す
- 「サーブレット変更」からユーザ一覧ページ表示へジャンプ
1.6 JSPタグライブラリとEL式
JSP ページには大量の JAVA コードが含まれます
- 問題があります:
- JSP ページが乱雑である
- フロントエンドスタッフがフロントエンドコードを開発するのには適さない
- 開発で JSP ページも使用する場合は、スクリプトレス ページを実装する必要があります
- 開発時に JSTL および EL 式を使用してスクリプトレス ページを実装する
- JSTL と EL は単独で使用できますが、通常は一緒に使用されます
1.6.1 JSTLの基本的な使い方
-
JSTLページとは
JSTL の正式名称は JSP Standard Tag Library で、JSTL を使用すると、一部のタグを使用して JSP ページに論理処理機能を実装できます。
JSTL はページタグですが、各タグの背後には Java クラスの継承があります。
-
JSTLには次のタグが含まれています
- コア タグ: このタグは主に、if|for... などのページ ロジック プログラムを処理するために使用されます。
- フォーマットタグ: このタグは主に時間と数値のフォーマットを処理するために使用されます。
- SQL タグ: このタグにより、JSP ページで SQL ステートメントを使用できるようになりますが、開発では許可されていません (使用されません)。
- XML タグ: このタグを使用すると、JSP ページ内の XML ファイルの解析と処理が可能になります (適用されません)。
- I18N タグ: (国際化): 国際化タグ。主に多言語システムを扱うために使用されます。
- fn 関数: fn 関数は、コレクションと文字列のサイズを取得する一般的な方法など、処理のためのいくつかのメソッドを提供します。
-
JSTLの利用
①MavenにJSTL依存パッケージを導入する
<dependency> <groupId>org.apache.taglibs</groupId> <artifactId>taglibs-standard-compat</artifactId> <version>1.2.5</version> </dependency>
② JSPページはJSTLコアタグライブラリをインポートします
<%-- taglib:引入JSTL标签库 prefix:设置标签的前缀,核心标签一般为c url:指定标签库位置 --%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
③ページ内で使用
-
JSTLコアタグの共通タグ
①outタグ:
<c:out>
outタグは主にコンテンツをページに出力するために使用されます。<c:out value="${name}" default="自定义内容" escapeXml="false"/> <!-- value:表示输出的值,如果输出的值为EL表达式,则表示为某个作用域的值 default:默认值,若value没有值则输出 dafault的值 escapexml:是否对xml/html解释执行 --!>
②set タグ:
<c:set>
、属性を特定のスコープに設定するために使用され、setAttribute() を置き換えるために使用されます。<c:set value="20" var="age" scope="request"></c:set> <!-- 向requst作用域设置一个age=20的属性 -->
③remove tag:
<c:remove>
、主にスコープから属性を削除するために使用されます。<c:remove var="age" scope="request"></c:remove> <!-- 删除request中属性名为age的属性 -->
④ifラベル:
<c:if>
単一分岐文ラベル<c:if test="${判断语句}"> 输出内容 </c:if> <!-- 判断test属性的值,如果为true则执行标签体内容,如果为false则不执行 *JSTL中只有if标签没有else标签,JSTL没有if-else标签,JSTL可以使用choose标签来替代 -->
⑤chooseタグ:
<c:choose>
JavaのSwitchステートメントに相当します。このタグは単独で使用できません。whenタグおよびotherwiseタグと一緒に使用する必要があります。<c:choose> <c:when test="判断语句">输出内容</c:when> <c:when test="判断语句">输出内容</c:when> <c:otherwise>其他内容</c:otherwise> </c:choose> <!-- 判断 第一个when标签的test属性,若true则执行,反正向后继续执行, 若when标签test属性都为false 则返回 otherwise标签 -->
⑥forEachタグ:
<c:forEach>
Javaのforループに相当<% List<String> strList =new ArrayList<>(); strList.add("1"); strList.add("2"); strList.add("3"); request.setAttribute("strList",strList); %> <c:set var="str" value="${strList}" scope="request"></c:set> <c:forEach var="str1" items="${str}" varStatus="status"> ${str1}--->${status.index}---->${status.count}<br> </c:forEach> <!-- items:用于执行遍历的集合 str:每次遍历的值会赋给该遍历 varStatus:循环的状态 循环下标:status.index 循环次数:status.count --> <c:forEach begin="1" end="9" step="1" varStatus="status"> ${status.index}-------->你好《=<br> </c:forEach> <!-- begin:从某值开始循环,起始大小 end:表示结束大小 step:表示步长,相当于 i++,i+2.... --!>
-
書式設定タグの使用
-
書式タグの導入
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
-
フォーマット時間:
<fmt:formatDate value="${nowTime}" pattern="yyyy年MM月dd日 HH:mm:ss"/>
-
フォーマット番号
<fmt:formatNumber value="1234567895.646" pattern="###,###,###.##"></fmt:formatNumber>
-
1.6.2 EL式の使用
JSP 内の <%=Java code%> を置換するために使用されます
EL 式構文の概要、強力な関数、従来のスクリプトの代わりに JSP ページで使用される多数の EL 式
EL 式は主にスコープから属性の値を取得し、それをページに出力するために使用されます。
-
EL式の基本機能
コンピューターがコンテンツをページに出力します
------------------------セパレータ----------------------------- - ----------------
EL 式は現在デフォルトで無効になっており、それを使用するには構成する必要があります。JSP ページで EL 式を設定することは、
isELIgnored="false"
EL 式をオフにするか、Web.xml ファイルで構成することを意味します。プロジェクトの作成によって生成される web.xml ファイル標準の設定ファイルではありません。削除できます- サーバーの config フォルダーにある web.xml ファイルはプロジェクトと共有されており、EL 式はその中に構成されており、通常どおり使用できます。
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
-
内容を計算して出力する
${ "hello,word"} ${ 2+2}
-
スコープからオブジェクトを取得する
JSP スコープ オブジェクトにはリクエスト、セッション、アプリケーションが含まれており、これらはすべて属性を格納でき、属性の値は EL 式を通じてこれら 3 つのスコープから簡単に取得できます。
<c:set value="1" var="sex" scope="request"/>${sex==1?"男":"女"} <!--传统方式--> <br><hr> <% Integer i=Integer.valueOf((String) request.getAttribute("sex")); %> <%=i+10%> <!--使用EL表达式--> ${sex+11}
- オブジェクト型は従来の方法で変換する必要がありますが、EL 式を使用して自動的に変換されます。
スコープから EL 式によって取得される値は、デフォルトで、小さいものから大きいものまでのスコープの範囲に従って順序付けされます。
- ページ----->リクエスト----->セッション----->アプリケーション
EL 式はデフォルトで最小のスコープを持つスコープ オブジェクトからデータを検索するため、属性がページ スコープ内にない限り、他のスコープを探すことになり、効率的ではありません。
通常、スコープからの EL 式の自動検索を回避し、指定されたスコープから検索します。
<c:set var="name" value="sessionName" scope="session"/> <c:set var="name" value="application" scope="application"/> <c:set var="name" value="requestName" scope="request"/> ${sessionScope.name}------->session作用域取值<br> ${requestScope.name}-------->request作用域取值<br/> ${applicationScope.name}------->application取值<br/>
-
オブジェクト内のプロパティ値を取得する
-
エンティティ オブジェクトから属性の値を取得するために EL 式で使用される名前は、属性名 ${requestScope.student.stuName} とは何の関係もありません。
-
EL 式は、文字列「stuName」の最初の文字を内部的に大文字に変換し、先頭の「get」文字列を結合して get メソッドのメソッド名文字列を形成します。
-
次に、リフレクション技術を使用して、get メソッドのメソッド名に従って get メソッドのメソッド オブジェクトを取得し、メソッドを呼び出します。
-
EL は get メソッドに基づくエンティティ オブジェクトの属性値の取得に基づいていることを理解してください。
-
1.6.3 JSTLとEL式を使用して[簡易ユーザー管理プロジェクト]を変更する
1.7 フィルターフィルター
1.7.1 フィルターとは何ですか?
- システムに送信されるリクエストと応答をインターセプトするために使用されます (異なるフィルターによってインターセプトされるリクエストは、異なる設定によって決定されます)
- フィルタは特別なサーブレットであり、フィルタがパスを構成した後に呼び出す必要はありません。これらの構成の現在のパスが要求されると、フィルタは自動的に呼び出されます。
- システムへのアクセス要求が行われると、まずフィルターが要求を受信して処理し、処理後、要求は次のフィルターまたはサーブレットに渡されます。
1.7.2 フィルタの使用
-
package javax.servlet.Filter
インターフェースを実装するクラスを作成する -
インターフェイスの doFilter メソッドを実装します (このメソッドはフィルタリング ロジックを実装するために使用されます)
-
doFilter で結果処理 (リクエストを解放するか、他の場所に転送する) が必要です。そうでない場合、リクエストはフィルター内に留まります。
filterChain.doFilter(servletRequest,servletResponse);
// 引き続きその場所への訪問を許可します- コードの前に要求期間コードがあり、その後に応答期間コードが続きます
-
-
フィルタを設定する
- Web.xml 設定ファイルに基づく設定
<!-- 配置过滤器对象,配置后tomcat会自动创建过滤器对象 <filter-name>:指定过滤器对象名 <filter-class>:指定要配置过滤器的类 --> <filter> <filter-name>demoFilter</filter-name> <filter-class>com.jiazhong.filters.demoFilter</filter-class> </filter> <!-- 配置过滤器映射,配置后当浏览器访问该映射路径时对应过滤器会自动执行 <filter-name>:要执行的过滤器对象 <url-pattern>: 过滤器映射路经,配置后,只要访问该路径下资源过滤器自动执行 --> <filter-mapping> <filter-name>demoFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
- 注釈ベースの
@WebFilter()
構成
1.7.3 フィルターのライフサイクルとは何ですか?
①サーバー起動時にFilterオブジェクトが作成され、initメソッドが自動実行されます。
②フィルターでインターセプトしたWebリソースにアクセスするたびにFilterのdoFilterメソッドを実行してフィルタリング機能を実装する
③サーバー終了時にFilterのdestroyメソッドを実行し、関連リソースを破棄します。
1.7.4 フィルタチェーンとは
- 実行チェーンは複数のフィルターで構成されます。これがフィルター チェーンです。
- システムが複数のフィルタにアクセスする場合、アクセス要求は各フィルタの傍受パス構成に基づいて実行するフィルタを選択します。
1.7.5 フィルタの実行順序
- アノテーションに基づいて設定する場合、文字列内のコンパレータはクラス名のアルファベット順にソートするために使用されます。
- XML 設定に基づいている場合は、設定マッピング パスに従って順番に実行されます。
1.7.6 フィルタを使用して簡単なフィルタリング機能を完成させ、[簡単なユーザー管理プロジェクト] を改善します
- 学びは西安家中の訓練から生まれる