JSP知識の要約
目次
- JSPの概要
- JSP-Velocity-FreeMarkerの比較
- JSP構造
- JSPライフサイクル
- JSP構文
- JSP-HTTPステータスコード
- JSPフォーム処理
- JSPエンコーディング設定
- JSPは排除されません
- JSP VelocityFreeMarkerの比較
- JSTLライブラリのインストール
JSPの概要
- Java Server Pagesとは何ですか?
JSPは、動的Web開発テクノロジであるJava ServerPagesの略です。JSPタグを使用して、HTMLページにJavaコードを挿入します。タグは通常<%で始まり、%>で終わります。
JSPはJavaサーブレットであり、主にJavaWebアプリケーションのユーザーインターフェイス部分を実装するために使用されます。Webページ開発者は、HTMLコード、XHTMLコード、XML要素、および埋め込まれたJSP操作とコマンドを組み合わせてJSPを記述します。
JSPは、Webフォームを介してユーザー入力データを取得し、データベースやその他のデータソースにアクセスして、動的にWebページを作成します。
JSPタグには、データベースへのアクセス、ユーザー選択情報の記録、JavaBeansコンポーネントへのアクセスなど、複数の機能があり、制御情報を転送したり、さまざまなWebページで情報を共有したりすることもできます。
- なぜJSPを使用するのですか?
JSPプログラムとCGIプログラムの機能は似ていますが、CGIプログラムと比較すると、JSPプログラムには次の利点があります。
- JSPは、CGIファイルを個別に引用する必要なしに、要素をHTMLページに直接動的に埋め込むことができるため、パフォーマンスはさらに向上します。
- サーバーは、CGI / Perlのようなインタープリターとターゲットスクリプトをロードする代わりに、コンパイルされたJSPファイルを呼び出します。
- JSPはJavaサーブレットAPIに基づいているため、JSPには、JDBC、JNDI、EJB、JAXPなどのさまざまな強力なエンタープライズレベルのJavaAPIがあります。
- JSPページは、ビジネスロジックを処理するサーブレットで使用できます。このモードは、Javaサーブレットテンプレートエンジンでサポートされています。
最後に、JSPはJava EEの不可欠な部分であり、完全なエンタープライズレベルのアプリケーションプラットフォームです。これは、JSPが最も単純な方法を使用して最も複雑なアプリケーションを実装できることを意味します。
- JSPの利点
以下は、JSPを使用するその他の利点のリストです。
- ASPとの比較:JSPには2つの大きな利点があります。まず、動的部分はVBやその他のMS特殊言語ではなく、Javaで記述されているため、より強力で使いやすくなっています。2つ目のポイントは、JSPはMS以外のプラットフォームに簡単に移植できることです。
- 純粋なサーブレットとの比較:JSPは、多数のprintlnステートメントに直面することなく、HTMLページを簡単に記述または変更できます。
- SSIとの比較:SSIはフォームデータを使用できず、データベースに接続できません。
- JavaScriptとの比較:JavaScriptはクライアント上で動的にHTMLを生成できますが、サーバーとの対話が難しいため、データベースアクセスや画像処理などの複雑なサービスを提供できません。
- 静的HTMLとの比較:静的HTMLには動的情報が含まれていません。
JSP-Velocity-FreeMarkerの比較
- JSP->速度-> FreeMarker
- JSP
- 利点:
- サポートは良いです。公式の承認、多数のタグライブラリ、JSPタグのサポート、EL式言語のサポート、強力な関数、JAVAコードを記述できます
- 開発とデバッグを容易にします。
- 短所:
- mvc構造を破壊しました
- jspは、実行するためにクラスファイルにコンパイルする必要があります
- 利点:
- Velocity:jspの代わりに使用される最も初期のテンプレート言語であるApacheによって生成されます
- 利点:
- 厳密なMVC分離を実現できます
- jspより性能が良いと言われています
- 習得が容易
- 短所:
- サードパーティのタグライブラリはほとんどありません
- デバッグが難しい
- jspタグのサポートが不十分
- 利点:
- FreeMarker:Apache
- 利点:
- 厳密なMVC分離を実現できます
- 組み込みの一般的に使用される機能は強力で使いやすい
- jspタグの優れたサポート
- 短所:
- jspほど多くのサードパーティタグライブラリはありません
- デバッグが難しい
- 利点:
- JSP
- JSPを使用する際の問題点
- 動きと静的の真の分離を達成することができません 動的リソース(JSPに埋め込まれたJAVAコード)と静的リソース(HTML / CSS)が結合され、サーバーに大きなプレッシャーがかかります。サーバーが不安定になると、フロントエンドとバックエンドが一緒にダウンし、ユーザーは経験が乏しい。
- JSPは、JAVAをサポートするWebサーバーで実行する必要があります。images / CSS / JSなどの一部の純粋に静的なリソースでは、Nginxを使用できず、パフォーマンスを向上させることができません。
- 最初のリクエストは遅くなります。JSPが初めて要求されるときは、Webサーバーのサーブレットにコンパイルする必要があります。
- 効率は、htmlを直接使用するほど高くはありません。JSPが要求されるたびに、JSPはservlertにアクセスし、出力ストリームを使用してhtmlページを出力します。
- JSP自体は同期的にロードされます。ページ構造が複雑な場合、応答が遅くなります。
JSP構造
- JSP処理フロー
JSP処理
次の手順は、WebサーバーがJSPを使用してWebページを作成する方法を示しています。
- 他の通常のWebページと同様に、ブラウザはHTTPリクエストをサーバーに送信します。
- Webサーバーは、これがJSP Webページの要求であることを認識し、その要求をJSPエンジンに渡します。これは、URLまたは.jspファイルを使用して行われます。
- JSPエンジンは、ディスクからJSPファイルをロードし、それらをサーブレットに変換します。この変換は、すべてのテンプレートテキストをprintln()ステートメントに変更し、すべてのJSP要素をJavaコードに変換するだけです。
- JSPエンジンは、サーブレットを実行可能クラスにコンパイルし、元の要求をサーブレットエンジンに渡します。
- Webサーバーの特定のコンポーネントは、サーブレットエンジンを呼び出してから、サーブレットクラスをロードして実行します。実行プロセス中に、サーブレットはHTML形式の出力を生成し、それをHTTP応答に埋め込み、Webサーバーに送信します。
- Webサーバーは、静的HTMLページの形式でHTTP応答をブラウザーに返します。
- 最終的に、Webブラウザーは、静的Webページを処理しているかのように、HTTP応答で動的に生成されたHTMLWebページを処理します。
通常の状況では、JSPエンジンは、JSPファイルに対応するサーブレットがすでに存在するかどうかをチェックし、JSPファイルの変更日がサーブレットよりも前であるかどうかをチェックします。JSPファイルの変更日が対応するサーブレットよりも前の場合、コンテナは、JSPファイルが変更されておらず、サーブレットが有効であると判断できます。これにより、プロセス全体が他のスクリプト言語(PHPなど)よりも効率的かつ高速になります。
一般に、JSP Webページは、Javaプログラミングマスターになることなく、サーブレットを作成するために別の方法を使用します。解釈段階を除いて、JSPWebページはほとんど通常のサーブレットとして扱うことができます。
JSPライフサイクル
- JSPライフサイクル:コンパイルフェーズ->初期化フェーズ->実行フェーズ->破棄フェーズ
- コンパイル段階:ServeltコンテナはJSPをサーブレットソースファイルにコンパイルし、サーブレットクラスを生成します。ブラウザがJSPページを要求すると、JSPエンジンは最初にファイルをコンパイルする必要があるかどうかを確認します。このファイルがコンパイルされていない場合、または最後のコンパイル以降に変更されている場合は、このJSPファイルをコンパイルします。
- 初期化段階:JSPに対応するサーブレットクラスをロードし、そのインスタンスを作成して、その初期化メソッドを呼び出します。コンテナはJSPファイルをロードした後、最初にjspInit()メソッドを呼び出して初期化作業を行い、初期化は1回だけ実行する必要があります。
- 実行フェーズ:JSPに対応するサーブレットインスタンスのサービスメソッドを呼び出します。
- 破棄フェーズ:JSPに対応するサーブレットインスタンスの破棄メソッドを呼び出してから、インスタンスを破棄します。
- サンプルコード
<%!
public void jspInit() {
System.out.println("JSP Init");
}
public void jspDestroy() {
System.out.println("JSP Destory");
}
%>
JSP構文
- JSPは変数メソッドなどを宣言します。
<%! declaration; [ declaration; ]+ ... %>
<%! int i = 0; %>
<%! int a, b, c; %>
- JSP式
<%= 表达式 %>
<p>
今天的日期是: <%= (new java.util.Date()).toLocaleString()%>
</p>
- JSPコメント
<%-- 该部分注释在网页中不会被显示--%>
- JSP命令:JSP命令は、JSPページ全体に関連する属性を設定するために使用されます。
<%@ directive attribute="value" %>
<%@ page ... %> 定义页面的依赖属性,比如脚本语言、error页面、缓存需求等等
<%@ include ... %> 包含其他文件
<%@ taglib ... %> 引入标签库的定义,可以是自定义标签
- JSPの動作
<jsp:action_name attribute="value" />
jsp:include 用于在当前页面中包含静态或动态资源
jsp:useBean 寻找和初始化一个JavaBean组件
jsp:forward 从一个JSP文件向另一个文件传递一个包含用户请求的request对象
jsp:text 用于封装模板数据
...
- JSP9組み込みオブジェクト
application: ServletContext类实例,与应用上下文有关
page: 类似Java类中的this关键字
pageContext: PageContext类的实例,提供对JSP页面所有对象以及命名空间的访问
config: ServletConfig类实例
out: PrintWriter类的实例,用于把结果输出到页面上
request: HttpServletRequest类的实例
respone: HttpServletResponse类的实例
session: HttpSession类的实例
exception: Exception类的对象,代表发生错误的JSP页面中对应的异常对象
JSP-HTTPステータスコード
ステータスコード | ニュース | 説明 |
---|---|---|
200 | OK | リクエストが確認されました |
201 | 作成した | 要求されたときに完了し、新しいリソースが作成されます |
JSPフォーム処理
- フォームの送信:
get
VSpost
- パラメータは
request.getParameter("xxx")
読み:他にはありrequest.getParameterValues()
、request.getParameterNames()
、request.getInputStream()
JSPエンコーディング設定
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
</head>
<body>
<h1>Hello World!</h1>
</body>
</html>
- JSPページエンコーディング:jspファイル自体のエンコーディング
<%@ page pageEncoding="UTF-8" %>
- Webページ表示エンコーディング
<%@ page contentType="text/html; charset=UTF-8" %>
- HTMLページエンコーディング
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- Webサーバーの入出力ストリーム設定エンコーディング
request.setCharacterEncoding("UTF-8")
response.setCharacterEncoding("UTF-8")
- Webサーバー応答出力ストリーム
response.setContentType("UTF-8")
- 彼らの相互の影響力と範囲、そして彼らの行動の順序
-
pageEncoding:JSPページ自体のエンコード形式を指定するだけで、ページに表示されるエンコードとは関係ありません。
コンテナが(ファイル)、(データベース)、または(文字列定数)を読み取ると、Unicodeに変換されます。内部使用のために、ページが表示され
、内部のUnicodeをcontentTypeので指定されたエンコーディングに変換され、ページのコンテンツが表示され、
pageEncoding属性が存在する場合、JSPページの符号化文字がpageEncodingはによって決定され、
それ以外の場合はcontentType属性の文字セットによって決定されます。文字セットが存在しない場合、JSPページの文字エンコードは
デフォルトのISO-8859-1を使用します。 -
contentType:JSPページ応答のMIMEタイプと文字エンコード方式を指定します。MIMEタイプのデフォルト値は「text / html」、
文字エンコードのデフォルト値は「ISO-8859-1」です。MIMEタイプと文字エンコードはセミコロンで区切られています。 -
pageEncodingとcontentTypeの関係:
- pageEncodingのコンテンツは、jspが出力されるときのエンコーディングにのみ使用され、ヘッダーとして送信されません。これは
、jspページが出力されるエンコーディング、つまり応答ストリームのエンコーディングをWebサーバーに通知します。 Webサーバーによる出力。 - 最初の段階は、jspを.javaにコンパイルすることです。pageEncodingの設定に従ってjspを読み取り、その結果は、指定されたエンコードスキームから
統合UTF-8 JAVAソースコード(つまり、java)に変換されます。 - 第2段階は、JAVACのJAVAソースコードからjava byteCodeへのコンパイルです。JSPの記述時に使用されるエンコード方式に関係なく
、この段階の結果はすべてUTF-8エンコードのjavaソースコードになります。JAVACはUTF-8エンコードを使用してread
javaソースコードを取得して、UTF-8エンコーディングのバイナリコード(つまり、クラス)にコンパイルします。これは、バイナリコード
(javaエンコーディング)で表現された定数桁の文字列に対するJVMの仕様です。 - 3番目のステージは、Tomcat(またはそのアプリケーションコンテナ)がステージ2からJAVAバイナリコードをロードして実行するときであり、
出力結果はクライアント側に表示されるものです。このとき、ステージ1のパラメータcontentTypeに隠されています。そしてステージ2。それはうまくいった
- pageEncodingのコンテンツは、jspが出力されるときのエンコーディングにのみ使用され、ヘッダーとして送信されません。これは
-
contentTypeと同じ効果を持つ設定メソッドには、htmlページの文字セット、response.setCharacterEncoding()、
response.setContentType()、response.setHeader(); response.setContentType()、
response.setHeader();優先度が最適です。 、続いてresponse.setCharacterEncoding();もう1つは
<%@ page contentType = "text / html; chareset = gbk"%>、そして最後に。 -
Webページ入力エンコーディング:ページエンコーディング<%@ page contentType = "text / html; chareset = gbk"%>を設定すると、ページの入力エンコーディングも指定されます。ページ表示がUTF-8に設定されている場合は、ユーザーのすべてのページ入力はUTF-8に従ってエンコードされます。サーバー側プログラムは、フォーム入力を読み取る前に入力エンコードを設定する必要があります。フォームが送信された後、ブラウザーはフォームフィールドの値をバイトに変換します。指定された文字セットに対応する値。次に、HTTP標準URLエンコードスキームに従って結果バイトをエンコードします。ただし、ページはサーバーに現在のページのエンコード方法を通知する必要があります。request.setCharacterEncoding()はサーバーレットのエンコードを変更できます。リクエストを取得するために、response.setCharacterEncoding()は、結果のエンコーディングを返すようにサーバーレットを変更できます。