10.5_HttpServletRequest和のHttpServletResponse

、サーブレットの構成

   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.ジャンプとジャンプ

おすすめ

転載: www.cnblogs.com/zyyzy/p/12555331.html