JSPの使用
この記事は、コードデモンストレーションを含め、参照用にJSPを学ぶ初心者に適しています。初心者は、読んだ後に何かが得られると思います。この記事は、JSPの最も重要でマスターしなければならない部分を学ぶことができます。
他のブロガーの記事も見ることができます。これらはすべて初心者に適しています。
MySQLを使用する場合は、この記事を読んでください。配信アドレス:MySQLは、
サーブレットサーバーが知っている必要があります。配信アドレス:初心者がサーブレットサーバーについて学ぶには、この記事を読んでください。
要約するのは簡単ではありません、気に入ってください~~~
Javaバックエンドの要約を更新し続けます~~~
記事ディレクトリ
1. JSPの紹介と作成
- JSPの完全な名前はJavaサーバーページ、つまりJavaサーバーページです。
- JSPの主な機能は、サーブレットプログラムを置き換えてHTMLページのデータを返すことです。
- Webディレクトリー(またはその他)を右クリック->新規作成-> JSP / JSPX->入力ファイル名->作成するJSPファイルを選択
第二に、JSPの本質
JSPページは本質的にサーブレットプログラムです。JSPページに初めてアクセスするとき(Tomcatサーバーの実行後にブラウザのアドレスバーにパスを入力)、TomcatサーバーはJSPページをJavaソースファイルに変換してコンパイルします。 .classバイトコードファイル(1つの.java、1つの.class)
。.java ファイルを開くと、次の内容が見つかります。HttpJspBaseクラスはHttpServletクラスを直接継承します。つまり、JSPによって変換されたJavaクラスはHttpServletクラスを間接的に継承します。 JSPページがサーブレットプログラムであることを証明する
3、JSPの構文
JSPヘッダーのページインストラクション:JSPヘッダーのページインストラクションは、JSP ページのいくつかの重要な属性または動作を変更できます
(以下の属性はすべてページインストラクションに記述され、デフォルトのページインストラクションに表示されない属性はデフォルト値を採用します)。
(1)contentType属性:JSPが返すデータのタイプ、つまりresponse.setContentType()のパラメーター値を
示します(2)言語属性:JSP変換後の言語ファイルを示します(現在はJavaのみをサポートしています)
(3)pageEncoding属性:現在のJSPファイル自体の文字セットを
表します(IDEAの右下隅に表示されます)(4)インポート属性:ガイドパッケージ(主要クラス)を表し、Javaと一致します
(5)autoFlush属性:出力ストリームバッファーがいっぱいになったときに設定されますバッファーを自動的にリフレッシュするかどうか、デフォルト値はtrue
(6)バッファー属性:アウトバッファーのサイズを設定、デフォルトは8kb
注:アウトバッファーがいっぱいになった後、自動的にリフレッシュできない場合はエラーを報告します
(7)ErrorPage属性:JSPページを設定しますエラーが発生したときに自動的にジャンプするページ(エラー情報ページ)のパス。このパスは通常、スラッシュで始まり、要求されたアドレスがhttp:// ip:port / project path /であることを示し、コードWebディレクトリ
(8 )isErrorPage属性:現在のJSPページがエラー情報ページかどうかを設定します。デフォルトはfalseです。trueの場合、エラー情報を取得できます
(9)セッション属性:現在のJSPページにアクセスするときにHttpSessionオブジェクトを作成するかどうかを設定します。デフォルト値はtrue
(10)です。 extends属性:デフォルトでは、JSPページから変換されたJavaクラスがだれを継承するかを設定します
注:上記のデフォルト値は、特別な必要がない限り変更することはお勧めしません
JSPで一般的に使用される4つのスクリプト
1.スクリプトを宣言する
形式:<%!Declare Java code%>
機能:JSPによって変換されたJavaクラスの属性、メソッド、静的コードブロック、内部クラスなどを定義できます。
機能:ブラウザーページに表示されず、変換後にのみ存在しますJavaクラス
コードのデモ:スクリプトの使用を宣言します(このJSPファイルはFirst.jspという名前のWebディレクトリにあります)
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.util.HashMap" %>
<%@ page import="java.util.Map" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%--1.声明类属性--%>
<%!
private String name;
private static Map<String, Object> map;
%>
<%--2.声明类方法--%>
<%!
public int sum() {
return 12;
}
%>
<%--3.声明静态代码块--%>
<%!
static {
map = new HashMap<String, Object>();
map.put("key1", "value1");
}
%>
</body>
</html>
対応する翻訳されたJavaソースファイル:
2.式スクリプト
形式:<%= Expression%>
関数:ブラウザーのJSPページにデータを出力します(このスクリプトのみがブラウザーページにデータを出力できます)
機能:
(1)すべての式スクリプトは対応するものに変換されますJavaクラスの_jspService()メソッドでは、式スクリプトは_jspService()メソッドのパラメーターでオブジェクトを直接使用できます
(2)式スクリプトは、コンパイルされたJavaクラスのout.print()メソッドによってブラウザーに出力されますデバイスページ
(3)式式スクリプトはセミコロンで終了できません
コードのデモ:式スクリプトの使用(このJSPファイルはFirst.jspという名前のWebディレクトリにあります)
<%=22 %> <br/>
<%="可以输出字符串" %> <br/>
<%=map %> <br/>
<%--使用_jspService方法中的对象--%>
<%=request.getParameter("username") %>
Tomcatサーバーを起動した後のブラウザーの実行結果:
対応する変換されたJavaソースファイル(_jspServiceメソッド内):
注:
-
書き込みメソッドのラベルとエスケープ文字は、対応する
関数として自動的に認識され、それらはページに出力されず、それらが表す関数が実行されます -
outの2つのメソッドは_jspServiceメソッドにもあり、どちらもJava言語です
-
ブラウザに表示できるのは、印刷、書き込みメソッド、および式スクリプトのコンテンツのみであり、残りのJavaコードのsoutはコンソールに出力されます
3.コードスクリプト
形式:<%Java statement%>
機能:必要なJavaコードをJSPページに書き込むことができます。
機能:
(1)コードスクリプトは_jspServiceメソッドに変換されるため、コードスクリプトはメソッドパラメーターでオブジェクトを直接使用できます
(2) )複数のコードスクリプトブロックを組み合わせる
ことにより、完全なJavaステートメントを完成させることができます(3)コードスクリプトを式スクリプトと組み合わせて、JSPページにデータを出力することもできます。
コードのデモ:コードスクリプトの使用(このJSPファイルは、First.jspという名前のWebディレクトリにあります)
<%--1.if语句--%>
<%
int i = 1;
if (i == 1) {
System.out.println("我爱祖国!");
} else {
System.out.println("我很爱祖国!");
}
%> <br/>
<%--2.for循环语句--%>
<%
for (int j = 0 ; j < 3; j++) {
System.out.println("第" + j + "次循环");
}
%> <br/>
<%--3.使用_jspService方法参数中的对象--%>
<%
String username = request.getParameter("username");
System.out.println("username对应的值为:" + username);
%>
操作結果:
Tomcatサーバーの起動後、アドレスバーに次のように入力します:http:// localhost:8080 / MyTest / First.jsp?username = Jaychou。
コンソールに表示:
対応する翻訳されたJavaソースファイル(_jspServiceメソッド内):
5、JSP 3アノテーション
- HTMLコメント:
<!--HTML注释-->
HTMLコメントは、JSPファイルに対応するJavaクラスの_jspServiceメソッドに変換され、out.write()としてクライアントに出力されます。write
メソッドは、タグを自動的に識別し、タグに対応する関数を実行します。ブラウザにはありません。ページへのコメント - Javaコメント:(1)//単一行コメント(2)
/*多行注释*/
Javaコメントは、宣言スクリプトとコードスクリプトで記述されている場合にのみJavaコメントと見なされ、対応するJSPファイルに対応するJavaクラスの_jspServiceメソッドに変換されます。コメントもJavaクラスにあります - JSPコメント:<%--これはJSPコメントです-%> JSPコメント
のコンテンツは、JSPファイルの翻訳されたJavaクラスに表示されません。つまり、コメントのコンテンツは機能しません。
6つ、9つの組み込みJSPオブジェクト
JSPの組み込みオブジェクトは、TomcatサーバーがJSPページをJavaクラスに変換した後に内部的に提供される9つのオブジェクトを参照します:(
ページインストラクションのisErrorPageプロパティをtrueとして書き込み、例外オブジェクトを表示します)
リクエスト:リクエストオブジェクト
レスポンス:レスポンスオブジェクト
pageContext:JSPコンテキストオブジェクト
セッション:セッションオブジェクト
アプリケーション:ServletContextオブジェクト
config:ServletConfigオブジェクト
out:JSP出力ストリームオブジェクト
ページ:現在のJSPオブジェクトの
例外:例外オブジェクト
7、JSP 4ドメインオブジェクト
ドメインオブジェクトは、マップなどのデータにアクセスできるオブジェクトを指します。4つのドメインオブジェクトの機能は同じですが、データアクセスの範囲が異なります。
コードのデモ1:データにアクセスする4つのドメインオブジェクトのスコープの違い(webディレクトリにscope1.jspを作成)
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>scope1</title>
</head>
<body>
<h1>scope1.jsp页面</h1>
<%
//向四个域对象中分别保存数据
pageContext.setAttribute("key", "pageContext");
request.setAttribute("key", "request");
session.setAttribute("key", "session");
application.setAttribute("key", "application");
%>
<%-- <jsp:forward page=""></jsp:forward>是请求转发标签,
page属性设置请求转发的路径 --%>
<jsp:forward page="/scope2.jsp"></jsp:forward>
</body>
コードデモ2:Webディレクトリにscope2.jspを作成する
<head>
<title>Title</title>
</head>
<body>
<h1>scope2.jsp页面</h1>
<%-- JSP页面中不加任何标签直接输入的内容被write方法输出在浏览器的页面上 --%>
pageContext域是否有值:<%=pageContext.getAttribute("key")%> <br>
request域是否有值:<%=request.getAttribute("key")%> <br>
session域是否有值:<%=session.getAttribute("key")%> <br>
application域是否有值:<%=application.getAttribute("key")%> <br>
</body>
操作結果1:
操作結果2:
注:4つのドメインオブジェクトのスコープが使用中に要件を満たすことができる場合、使用の優先順位は(小さいものから大きいものへ)です:
pageContext->要求->セッション->アプリケーション
8、JSPの出力とresponse.getWriterの出力の類似点と相違点
- 類似性:応答とは、クライアント(ブラウザ)にコンテンツを返すために使用される応答を意味します。
アウトは、クライアント(ブラウザ)にコンテンツを出力するためにも使用されます - 差:
- 注:公式コードの翻訳されたJavaコードの最下層は出力にoutを使用するため、outは通常出力に使用されます。Outは書き込みメソッドと印刷メソッドに分かれています:
(1)out.print():Anyコンテンツが文字列に変換され
たら、writeメソッドを呼び出して出力(2)を出力します。out.write():文字列の出力には問題はありませんが、int型が出力されると、intはchar出力に変換され、出力は目的の数ではなく数になります。対応するASCIIコード
結論:JSPページのコードスクリプトでブラウザーに出力されるコンテンツはすべて、out.print()メソッドを使用します。
9つのJSPで一般的に使用されるタグ
1.静的包含
(1)使用シナリオ:
(2)使用方法:
<%@ include file = ""%>
file属性は、インクルードされるJSPページを、/で始まり、http:// ip:port / project path /を表し、対応するように設定しますウェブディレクトリ
コードのデモ1:webディレクトリにbody.jspを作成する
<body>
头部信息 <br>
主体信息 <br>
<%@include file="/foot.jsp"%>
</body>
コードデモ2:webディレクトリにfoot.jspを作成する
<body>
页脚信息 <br>
</body>
運用結果:
(3)静的インクルードの機能:
① 静的インクルードは、インクルードされたJSPページを.java.classファイルに変換しません② 静的インクルード
は、インクルードページのコードをbody.jspに対応するJavaファイルにコピーすることです対応ポジション実行出力
2.動的包含
(1)使用方法:
<jsp:include page =””” </ jsp:include>
page属性は、インクルードされるJSPページを設定します。これは、静的なインクルードと一貫しています。
(2)動的インクルードの機能:
① 動的インクルードは、インクルードされたJSPページを.java.classファイルに変換します。②動的インクルードは、
パラメーターを渡すこともできます。③動的
インクルードは、次のコードを使用して、インクルードされたJSPページを呼び出し、出力を実行します:
org.apache .jasper.runtime.JspRuntimeLibrary.include(request、response、“ /foot.jsp”、out、false);
コードのデモ1:webディレクトリにbody.jspを作成する
<body>
头部信息 <br>
主体信息 <br>
<jsp:include page="/foot.jsp">
<jsp:param name="username" value="Jaychou"/>
<jsp:param name="password" value="root"/>
</jsp:include>
</body>
注意:
- 設定パラメーターのラベルは、動的インクルードに書き込む必要があります
- 「name」属性と「value」属性を持つ「jsp:param」標準アクションが異常であると
予期される場合、2つの理由:①パラメーターが動的インクルードに設定されていないが、<jsp:include page = ""> </ jsp:include>が配置されていない1行
で、動的インクルード
コードデモ2にコメントが追加されます。Webディレクトリにfoot.jspを作成します。
<body>
页脚信息 <br>
<%=request.getParameter("username")%>
</body>
運用結果:
(3)動的包含の基本原則:
10、ServletContextListenerリスナー
1.リスナーの紹介
(1)リスナーはJavaWebの3つの主要コンポーネントの1つです
(2)リスナーはJavaEEの仕様(インターフェース)です
(3)リスナーの役割は何かの変更を監視し、コールバック関数を通じてプログラムにフィードバックすることですいくつかの処理を行います
2. ServletContextListenerリスナー
ServletContextListenerリスナーは、ServletContextオブジェクトの作成と破棄を監視できます(Webプロジェクトの開始時に作成され、停止すると破棄されます)。作成と破棄をリッスンした後、フィードバックのためにServletContextListenerリスナーメソッドを呼び出します。
public interface ServletContextListener extends EventListener {
//在ServletContext对象创建之后调用
public void contextInitialized(ServletContextEvent sce);
//在ServletContext对象销毁之后调用
public void contextDestroyed(ServletContextEvent sce);
}
3. ServletContextListenerリスナーを使用する手順
(1)ServletContextListenerインターフェースを実装するクラスを記述します
(2)2つのメソッドをオーバーライドします
(3)web.xmlファイルでリスナーを設定します
コードデモ1:クラスを作成する
public class ListenerTest implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
System.out.println("ServletContext对象创建");
}
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
System.out.println("ServletContext对象销毁");
}
}
コードデモ2:web.xmlで構成する
<listener>
<!-- <listener-class>标签中写上述程序的全类名 -->
<listener-class>com.qizegao.servlet.ListenerTest</listener-class>
</listener>
実行結果:
Tomcatサーバーが起動すると、コンソール出力のServletContextオブジェクトが作成され、
Tomcatサーバーが停止すると、コンソール出力のServletContextオブジェクトが破棄されます。
注意:
- 翻訳されたJavaソースファイルを表示するには、Tomcatサーバーを起動してJSPページにアクセスし、コンソールの情報出力のフロントエンドにあるCATALINA_BASEを使用してパスを見つけ、ハードディスクのこのディレクトリを開いて、[作業]-> [Catalina]-> [localhost]をクリックします。 、対応するプロジェクトフォルダを見つけて検索
- JSPページにアクセスすると、対応する翻訳済みJavaコードの_jspServiceメソッドが実際に実行されます。翻訳済みJavaクラスにはサービスメソッドがありませんが、親クラスの_jspServiceメソッドがオーバーライドされます。このメソッドは、親クラスのサービスメソッドになります転送