、サーブレットの構成
1.フルパスの試合
/ / / AA / BBで始まります
ローカルホスト:8080 /プロジェクト名/ AA / BB
2.パスマッチング、マッチング前半
/スタート、しかし最終的には* / / * / *
*実際には、それはワイルドカードで、任意の文字に一致します
ローカルホスト:8080 /プロジェクト名/ AA / BB
3.拡張マッチ
執筆:なし/へ*開始*拡張* .aa * .BB。
二、のServletContext
サーブレットコンテキスト
各Webプロジェクトは、唯一のServletContextオブジェクトです。端的に言えするには、サーブレットの内部には、このクラスのオブジェクトが同じに得るものに関係なく、です。
オブジェクトを取得する方法
1.オブジェクト取得
のServletContextコンテキスト=のgetServletContextを();
役割とは何ですか
グローバルコンフィギュレーションパラメータを取得します。1.
リソースプロジェクトのWebゲット2.
フィールドサーブレットオブジェクト間でデータの共有、3データへのアクセスを
2. Tomcatの内部リソースへのアクセスに絶対パスを達成するために
最初のパスを取得して、自身が新しい新しいInpuStream
context.getRealPathを(「」)//ここでその内部のtomcatでのプロジェクトのルートディレクトリ。
D:\ tomcatに\のapache-tomcatに-7.0.52 \ apacheの-tomcatに-7.0.52 \ wtpwebapps \ Demo03 \
文字列パス= context.getRealPath( "ファイル/ config.properties")。
D:\ tomcatに\のapache-tomcatに-7.0.52 \ apacheの-tomcatに-7.0.52 \ wtpwebapps \ Demo03 \ファイル\ config.properties
リソースへのアクセスgetResourceAsStreamは、オブジェクトを流れ
パスへ向かい、その後ストリームオブジェクトを取得します。
破壊されたとき3.ServletContextを作成すると?
サーバーの起動時には、ServletContextオブジェクトを作成するために、ホスティング、各Webアプリケーションのためになります
サーバーから削除マネージド、またはサーバーをシャットダウンします。
スコープのServletContext
ロングこのプロジェクトに、あなたが取ることができます。同じプロジェクト限り。預金のプロジェクトは、Bプロジェクトで撤退、以下の取ることですか?異なるServletContextオブジェクト。
三、HttpServletRequestの
このオブジェクトは、上のクライアントから提出されたすべてのデータをカプセル化します。
1.クライアント要求は、ヘッダ情報を取得してもよいです
得到一个枚举集合
列挙の<string> headerNames = request.getHeaderNames()。
一方、(headerNames.hasMoreElements()){
文字列名=(文字列)headerNames.nextElement();
文字列値= request.getHeader(名);
System.out.println(名+ "=" +値)。
}
以上のクライアントから送信されたデータを取得する2
文字列名= request.getParameter( "名前");
列アドレス= request.getParameter(「アドレス」)。
System.out.println( "名=" +名)。
System.out.println( "アドレス=" +アドレス)。
-------------------------------------------------
//名前= zhangsan&名前=リージ&名前= wangwuキーが複数の値に対応してもよいです。
地図<文字列、文字列[]>地図= request.getParameterMap()。
セットの<string>のkeySet = map.keySet()。
反復子の<string>イテレータ= keySet.iterator()。
一方、(iterator.hasNext()){
文字列キー=(文字列)iterator.next();
System.out.println( "キー=" +キー+ " -的值总数有:" + map.get(キー).LENGTH)。
文字列値= map.get(キー)[0];
文字列値1 = map.get(キー)[1]。
文字列値2 = map.get(キー)[2]。
System.out.println(キー+ "=======" +値+ "=" + VALUE1 + "=" + VALUE2)。
}
3.取得中国のデータ
クライアントがサーバーにデータを提出し、中国とのデータは、その後、事態が文字化けすることができるならば、あなたは次のソリューションを参照することができます。
GETメソッド場合
1.コードはトランスコード
のString = request.getParameterユーザ名( "ユーザー名");
文字列のパスワード= request.getParameter( "パスワード");
System.out.printlnは( "ユーザ名=" +ユーザ名+「パスワード= == 「+パスワード);
バーはエンコードされたURLアドレスのデータを超える// GETリクエスト、我々は文字化けしてもらうので、
// Tomcatは、データのバッチを受け、getParameterでデフォルトのISO-8859-1へデコード
//戻り値にバイトの配列は、テキストはISO-8859-1、UTF-8を押し組み立てた文字列に対応させ
、ユーザー名=新しい文字列(username.getBytes(「 ISO-8859-1」)、「UTF- 8 ");
System.out.printlnは(" userNameの= "+ユーザー名+" ==パスワード=「+パスワード);
常にUTF-8エンコーディングでデータを乗り越え要求した後、直接に配置された内部のtomcatに行わ。
2.は、Tomcatのconf / server.xmlを=はURIEncoding追加"UTF-を。8"内の設定処理を行う
<コネクタのConnectionTimeout = "20000"ポート= "8080" =プロトコル"HTTP / 1.1"にredirectPort = "8443" =はURIEncodingを" UTF-8「/>
POSTメソッドの場合
前記本体は、リクエストの文字コードの内部に設けられています。この行で、道を得る無用です
request.setCharacterEncoding(「UTF-8」) ;
この行の前に配置されたのgetParameterを書かなければなりません。
四、HttpServletResponseの
クライアントにデータを返すための責任1.。
ページへ2.出力データ
その書き込みデータに対する//文字ストリーム
//response.getWriter().write("<h1>helloレスポンス... </ H1の>「);
//バイトストリームので、書き込みデータのよう
response.getOutputStream() .WRITE( "ハローresponse2222 ..." GetBytesメソッド ());
中国語3.応答データは、その中国の文字化けがあるかもしれません
文字ストリーム出力
response.getWriter()
UTF-8を使用してテキストをエンコードするとき1.クライアントへの出力を指定します
(「UTF-8」)response.setCharacterEncoding;
ブラウザの2.直接の規定を、このデータを見て、何を見て使用してエンコードされました。
response.setHeader( "Content-Typeの"、 "テキスト/ HTML;のcharset = UTF-8");
。response.getWriter()ライト( "私はハイテク文字化けしません");
出力バイトストリーム
response.getOutputStream()
1.このコード表のデータを使用し確認するために、ブラウザを指定
response.setHeaderを(、 "Content-Typeの" "text / htmlの;のcharset = UTF-8");
出力コード表2に指定された中国の
response.getOutputStream( ).WRITE( "私は文字化けしません。" GetBytesメソッド( "UTF-8 "));
--------------------------------------------
かどうかは、バイトストリームまたは文字ストリーム、その上のコードの直接の行。
response.setContentType( "text / htmlの;のcharset = UTF-8");
次に、データを書き込むことができます。
中国のファイルのダウンロードを実装4.
ブラウザの種類、のURLEncoderを使用してFirefoxの(Base64で)、IE、Chromeを...作るためのプロセスをコードしているファイル名の場合
中国でのファイルの名前は、あなたがプロセスをコードしているファイル名に必要がある場合
、それはIE、またはクローム(Google Chromeの)、コーディングURLエンコード使用している場合
であればFirefoxは、使用Base64でエンコード
1.取得訪れるクライアントの種類
response.setContentType( "text / htmlの;のcharset = UTF-8");
文字列filename = request.getParameter( "ファイル名");
System.out.println(ファイル名);
ファイル名=新しい文字列(filename.getBytes( "ISO-8859-1")、 "UTF-8");
System.out.println(ファイル名);
。入力ストリームは=のgetServletContext()getResourceAsStream( "dwlon /" +ファイル名)です。
Request.getHeaderクライアントタイプ=文字列( "User--エージェント");
IF(clientType.contains( "Firefoxの")){
fileNameに= DownLoadUtil.base64EncodeFileName(fileNameに);
} {他
のIE、またはクローム(Google Chromeの)、
中国語プロセス名コード
ファイル名= URLEncoder.encode(ファイル名、「UTF-8」);
}
response.setHeader( "コンテンツの廃棄"、 "添付ファイル;ファイル名=" +ファイル名)。
OutputStreamのOS = response.getOutputStream()。
int型のlen = 0;
バイト[] ARR =新しいバイト[1024];
一方、((LEN = is.read(ARR))= - 1]){
os.write(ARR、0、LEN)。
}
にos.close()。
近くにあります();
第五に、リクエストの転送とリダイレクト
1.リダイレクト
書き込み
response.setStatus(302);
response.setHeader( "場所"、 "login_success.html"); / *
リダイレクト文言:方向変更(Reorient)、すなわちジャンプパラメータで
書き込み2
response.sendRedirect( "login_success.html");
1.アドレスは、そのリソースの最後のアドレスへのパス上に表示されます
ブラウザでこのアドレスに応じ2.サーバーへの最初の要求の後に倍以上の要求の数、だけでなく、リターンアドレス302は、第二の訪問を行います。
3.任意のパスにジャンプすることができます。ではない彼らのプロジェクトはまた、ジャンプすることができます。
4.やや低い効率、実行要求。
後続の要求は、最後の要求に格納されたデータを使用することはできません、またはそれは異なる要求であるので、上のリクエストオブジェクトを使用することはできません。
2.要求の転送
転送要求文言:ジャンプ中に、すなわちパラメータ
request.getRequestDispatcher(「login_success.html」)フォワード(リクエスト、レスポンス);.
1.アドレスは、サーブレット要求アドレスに表示されています。返された200 OK
2.一度だけ要求の数、それはヘルプクライアントに内部サーバであるためには、フォローアップ作業を行います。
3.ジャンプリソースパスは自身のプロジェクトをすることができます。
4.わずかに高い効率、一度だけ要求ので。
図5は、リクエストオブジェクトを使用することができます。
また、クライアント・サーバ・サイドとして知られている2つの方法、上記3.ジャンプとジャンプ