コースリンク:https://www.imooc.com/learn/166
3-1:JSPは、組み込みオブジェクトの紹介
JSPは、組み込みオブジェクト、Webコンテナによって作成されたオブジェクトのセット、作成する新しいキーワードを使用する必要はありませんで、直接使用することができます。例:
<%
INT []の値= {60、70、80}。
{(値iは整数)のために
out.printlnを(I);
}
%>
JSP 9ビルトインオブジェクト:
一般的に5を使用:アウト、リクエスト、レスポンス、セッション、アプリケーション、珍しい4:ページ、pageContextの、例外、コンフィグ。
3-3:Web要求と応答モードプログラム
Webアプリケーションは、要求/応答モードに基づいています。
ユーザーは、要求(リクエスト)を送信
ユーザサーバ(応答)に応答して
ログインをクリックして、サーバにリクエストを送信するリクエスト・オブジェクト内のユーザ名とパスワードをカプセル化します。
サーバは、ユーザの要求を受け付けると、クライアントはページへの応答を送信し、ユーザー名とパスワードを決定します。
3-4:アウトオブジェクト
バッファとは何ですか。
バッファ:バッファ、一時的にデータを格納するために使用されるメモリの領域です。
以下のためのアウト:
対象外のJspWriterがクラスのインスタンスである、クライアントは一般的に、コンテンツオブジェクトを出力しています。(ここに私たちのクライアントのブラウザを指します)
次のように一般的な方法は以下のとおりです。
(1)空のprintln()クライアントへの印刷文字列を
(2)フラッシュが例外をスローした後、あなたが呼び出す場合、バッファの内容をクリア)(明確な空
呼び出しがフラッシュ後に例外をスローしない場合(3)無効clearBuffer()、バッファの内容をクリア
(4)空隙フラッシュ()クライアントのバッファ出力の内容
(5)ボイドgetBufferSize()はバッファ0と比較して、バッファ内のバイト数のサイズを返します
(6)ボイドgetRemaining()も、残りの使用可能なバッファの数を返します
(7)ブールisAutoFlush()は、バッファがいっぱいになる戻るとき、それは自動的に空にするか、例外をスローされます
(8)空に近い()は、出力ストリームを閉じ、
学習の例:
プラスout.flush()、クライアントへのバッファ出力の内容を強制します。
それは何の効果も認められなかったが、残りのバッファサイズが大きいです。その理由は、()フラッシュされた後、いくつかの以前の内容は、それがクリアされることです。したがって、残りのバッファサイズが大きくなります。
フラッシュ()メソッドの呼び出しでは後にクリアします。
出力のみ最初の2文、バックグラウンド・エラー。「エラー:バッファがリフレッシュされた空にしてみてください。」
例外が文の後ろに投げられた後、彼らは実行されません。
out.clearは()コメントアウト。実行out.clearBuffer():
すべてはプリントアウトして、背景が例外をスローしません。
3-6:取得し、ポストは方法の違いによって提出
一般的に使用されるフォームの送信:
取得し、差異を転記:
<フォーム名=「regForm」アクション=「操作」メソッド=「服従」>
</フォーム>
method属性は、提出フォームを示します。
フォームを送信する方法は2つあります。getとpost
取得(1):URLを通じて提出クリアテキストデータを、データはURLで見ることができます。データは2キロバイト以下で提出していません。安全性の低いが、ポストの方法よりも効率的。適切なデータの量を提出し、データのセキュリティが高くありません。例えば、我々は、検索クエリなどを行います。
(2)ポスト:HTMLヘッダー内のユーザーによって提出されたカプセル化した情報。データ容量、利用者情報の高セキュリティの提出。以下のような:登録、修正、アップロードおよびその他の機能。
演習の例:
ポスト提出の場合:実際にカプセル化されたフォーム情報データパッケージに、パケットは、HTMLヘッダーです
3-7:リクエスト・オブジェクト(上)
クライアントの要求を表すリクエストオブジェクト。クライアントの要求情報は、それが顧客のニーズを理解することが可能なリクエストオブジェクトにカプセル化され、その後、応答します。これは、クラスのHttpServletRequestのインスタンスです。要求フィールドを有する要求オブジェクトは、すなわち、要求しているクライアントが完了する前に、オブジェクトが有効でした。次のように一般的な方法は以下のとおりです。
(1)文字列のgetParameter(String name)指定したパラメータ名パラメータの値を返します。
(2)文字列[] getParameterValues(文字列名)は、パラメータ名のすべての値を含む配列を返します
(3)空のsetAttribute(文字列、オブジェクト)ストレージは、この要求の属性
(4)オブジェクトのgetAttribute(String name)指定属性値属性を返します。
(5)文字列のgetContentType()要求本体のMIMEタイプを取得します
(6)文字列getProtocol()を使用し要求されたプロトコルのタイプとバージョン番号を返します
(7)文字列getServerName()の要求を受け入れるようにサーバーのホスト名を返します。
中国の台頭が文字化け。フォームが送信されるtomcatに、中国のゴミ問題を修正するためには、ISO-8859-1文字セットを使用して、デフォルトを提出した文字列を、最も簡単な方法:
これらのパラメータを受け入れる前に、メソッド要求を使用すると、デフォルトの文字セットを設定します。
<%
request.setCharacterEncoding( "UTF-8");
%>
この値は、それをのsetCharacterEncoding設定されている、私は、フォームセットを提出するページの文字セットエンコーディングと一致する必要があります。
nullポインタ例外がありました。あなたはURLを介してパラメータを渡すとき、あなただけの情報にユーザー名を渡すと、趣味に合格しなかったので。
プラスの判断:
3-8:リクエストオブジェクト(下)
ボイドのsetAttribute(文字列、オブジェクト)の属性が要求されたリクエスト・オブジェクトに格納することができます。
getAttribute(文字列名)プロパティを取得できるオブジェクト。
リクエストボディのMIMEタイプを取得する文字列のgetContentType()
文字列getProtocol()が使用され要求されたプロトコルの種類とバージョン番号を返します。
文字列getServerNameは()の要求を受け入れるようにサーバーのホスト名を返します。
int型getServerPort()は、サーバーのポート番号でリクエストを受信返します
文字列getCharacterEncoding()は、文字エンコーディングを返します。
空のsetCharacterEncoding()文字エンコーディング設定要求
INT getContentLength()(バイト単位)リクエストボディの長さを返します
文字列getRemoteAddr()戻り値は、クライアントのIPアドレス、この要求を送信しました
文字列getRealPath(文字列のパス)真の仮想パス(または、要求の物理パス)のパスを返します。
ストリングrequest.getContextPath()は、コンテキストパスを返します
3-10:レスポンスオブジェクト
レスポンスオブジェクト
応答オブジェクトは、顧客の要求に応答に関する情報が含まれていますが、めったにJSPに直接それを使用しません。これは、クラスのHttpServletResponseのインスタンスです。レスポンスオブジェクトはページスコープを持っている、すなわちページを参照してください、ページ内のレスポンスオブジェクトのみがこの訪問に有効であることができ、現在のページの他のページへの応答が無効です。次のように一般的な方法は以下のとおりです。
文字列getCharacterEncoding()は、どのような文字エンコーディングで応答を返します
空隙に、setContentType(文字列型)応答MIMEタイプで提供されます
PrintWriterにgetWriter()は、ターゲット・クライアントは、(出力ストリームオブジェクトを取得するために)文字(:アウト建てPrintWriterオブジェクト間の差の比較注)に出力することができ返します
sendRedirect(java.lang.Stringで場所)リダイレクトクライアント要求(要求のリダイレクト)
ビルトインが後PrintWriterオブジェクトの出力に表示される出力の内容をオブジェクトながら、出力は常に前面に印刷された外側のオブジェクトの内容:私たちは奇妙な現象を発見しました。
すなわち:印刷時に得られたPrintWriterオブジェクトレスポンスオブジェクトは、先に私たちの目標のうちに構築されています。
組み込みオブジェクト<H1>応答は、それの出力の内容の前に</ H1> PrintWriterオブジェクトオブジェクトの出力を作る方法を内蔵しますか?
)(out.flush; //強制的にバッファを空にし、バッファが同時に空にされ、バッファの内容がブラウザに書き込まれます。
sendRedirect(のjava.lang.String場所)は、要求をリダイレクトします。クライアントと同等のは、新しい要求をしたので、要求が新しいリソースにリダイレクトされます。
register.jspにジャンプし、register.jspを訪問し、Enterキーを押します。
3-11:リクエスト差が転送された要求をリダイレクト
リクエストをリダイレクト:この方法は、リダイレクト応答が属しています。クライアントの動作、response.sendRedirect()は、要求と本質的に同等二回、リクエストオブジェクトが保存されません一度前に、アドレスバーにURLアドレスが変更されます。
フォワード要求:サーバー側の動作は、リクエストの方法です。request.getRequestDispatcher()前進(REQ、RESP)が;.アドレスバーにURLアドレスは変更されませんが、リクエストオブジェクトが保存されます転送した後、最初の要求です。
(1)試験は、要求をリダイレクトします。
要求をリダイレクトすると、レスポンスオブジェクトを属します。response.sendRedirect( "request.jsp")。
その後、我々は、通常のビューでrequest.jspにユーザー名や好みを受信するかどうかを見てください。正常受信した場合、オブジェクト要求の前の説明は、保存されています。それは新しい要求であることを、正常な受信ができない場合。
ユーザー名がnullの場合、趣味は表示されませんでした。それはrequest.jspにジャンプするアドレスバーを変更しました。それは新しいものであるため、この形式は、でrequest.jspでは、クライアントの同等は、新しい要求、request.jspする要求を行った、結果が要求をリダイレクトしたresponse.jsp行うに対処するたresponse.jspに提出しなければなりませんリクエストは、提出され、これらのパラメータを愛するオブジェクト間のそれので、最後の要求のユーザー名は、保存する方法はありません。だからここに表示されたユーザ名がnullで、趣味は空です。これは、要求は、要求オブジェクトは保存されません一度前に、二度本質的に、要求をリダイレクトし、説明し、URLアドレスバーが変更されます。
(2)試験は、要求を転送します。
リクエスト・オブジェクトを転送する方法の要求は、request.getRequestDispatcher( "request.jsp")の.forward(要求、応答)属します。あなたのアドレスに転送されるパラメータの背後にあるgetRequestDispatcher。それが私たちの組み込みのオブジェクトリクエストとレスポンスを渡し、前方のリクエストオブジェクトなので、復路が保存されますので。
パラメータは通常、上を通過することができます。ページのコンテンツは、ページのrequest.jspの内容ですが、アドレスバーやたresponse.jsp上のアドレスは、アドレスバーは変更されていません。これは、要求は、要求と同等のサーバー側の転送動作、であることを意味し、要求はその要求の前にオブジェクトを保存した後に転送されますが、アドレスバーにURLアドレスが変更されません。実際には、最初の要求は、実際の、または最後の要求を転送します。