サーブレットの主な機能は、クライアントのリクエストを処理して応答することです。このため、リクエストごとに、WebコンテナはService()、つまりhttpservletrequestとhttpservletResponseを呼び出す前に2つのオブジェクトを作成します。 httpservletrequestがHTTP要求メッセージをカプセル化する場合、httpservletResponseはHTTP応答メッセージをカプセル化します。 Webサーバーの操作中に、各サーブレットは1つのインスタンスオブジェクトのみを作成しますが、すべてのリクエストはサーブレットインスタンスのサービス(ServletRequest REQ、ServleTResponse Res)メソッドを呼び出すことに注意してください。ここでは、httpservletrequestはservletrequestのサブクラスであり、httpservletresponseはservletresponseのサブクラスです。
httpservletrequestおよびhttpservletresponseインターフェイスの継承関係図は次のとおりです。
1。HTTPSERVLETRESPONSE
HTTPSERVLETRESPONSEインターフェイスは、ServleTResponseインターフェイスから継承されます。 HTTP応答メッセージは、ステータス行、応答メッセージ本文、メッセージ本文の3つの部分に分割されるため、HTTPSERVLETRESPONSEインターフェイスは、応答ステータスコード、応答メッセージヘッダー、および応答メッセージ本文をクライアントに送信するメソッドを定義します。 httpservletResponseインターフェイスには多くの方法がありますが、一般的に使用されるいくつかの方法しか使用しません。他の方法を使用する場合は、応答のソースコードまたは関連情報を読むことができます。
ステータスコード関連関数を送信します
方法 説明 public void setStatus(int sc) 応答メッセージのステータスコードを設定します。 Webサーバーは、デフォルトで200のステータスコードでステータス行を生成します。 public void senderror(int sc) エラーメッセージを示すステータスコードを送信します。 2番目の方法では、説明をプロンプするためのテキストメッセージも追加されます public void senderror(int sc、string msg)
応答メッセージヘッダー関連機能を送信します
方法 説明 public void addheader(文字列名、文字列値) HTTP応答ヘッダーフィールドを設定し、名前をフィールド名を指定し、値はフィールド値を指定します。 Addheaderは同じ名前で応答ヘッダーフィールドを追加できます。Setheaderは、同じ名前の Public Void Public Void Setheader(String name、String Value) ヘッダーフィールドをSetContentLength (int Len) でオーバーライド します。コンテンツ、つまり、コンテンツタイプのフィールドの値を設定します public void setcharacterencoding(string charset) は、出力コンテンツ文字エンコードを設定します。つまり、コンテンツタイプのフィールドの値を設定します。この方法の優先順位は、setContentType の優先度よりも高いことに注意してくださいpublic void sendredirect(string location location) request redirect
応答メッセージ本文関連機能を送信します
| 方法 | 説明します |
| public servletoutputStream getOutputStream() | HTTPSERVLETRESPONSE SERVLETOUTPUTSTRAMタイプのバイト出力ストリームを取得します |
| パブリックプリントライターgetWriter() | キャラクター出力ストリームサーブレットライターのタイプのhttpservletresponseを取得します |
中国の出力は文字化けした問題
コンピューターのデータはバイナリ形式で保存されるため、テキストが転送されると、文字のバイト間の変換が発生します。文字とバイト間の変換は、コード検索テーブルを介して完了します。文字をバイトに変換するプロセスはエンコードと呼ばれ、バイトを文字に変換するプロセスはデコードと呼ばれます。エンコードとデコードに使用されるコードテーブルが異なる場合、文字化けのコードの問題が発生します。
注: httpservletResponseオブジェクトの文字出力ストリームをエンコードする場合、デフォルトはISO 8859-1エンコードです。このエンコーディング方法は、中国語と互換性がありません。たとえば、「中国」は「63 63」としてエンコードされます(ISO 8959-1コードテーブルにはない文字が表示されます63)。ブラウザが受信したデータをデコードすると、デフォルトでGB2312を使用し、「63」を「?」にデコードし、ブラウザは2つの文字「中国」を「??」にデコードします。
httpservletResponseプログラムの例
パッケージZzz; Import java.io.ioexception; Import java.io.printwriter; Import javax.servlet.http.httpservlet; Import javax.servlet.httpservletrequest; Import javax.servlet.http.httpservletresponseponse doget(httpservletrequest request、httpservletresponse応答)は、「中国」にコメントした後、「text/html; charset = utf-8 "); print.getwriter out.getwriter(fuidrn(out utwriter"); out.print.getwriter "); out.print.getwriter"); dopost(httpservletrequest request、httpservletresponse応答)IoException {this.doget(request、response)};時々、ページを定期的にジャンプする問題に遭遇します。 HTTPの更新ヘッダーフィールドは、ブラウザに指定された時間内に他のページに自動的に更新およびジャンプするように通知することができ、Webページは定期的に指定されたページに更新してジャンプします。
パッケージZzz; Import java.io.ioexception; Import java.io.printwriter; Import javax.servlet.http.httpservlet; Import javax.servlet.httpservletrequest; Import javax.servlet.http.httpservletresponseponse doget(httpservletrequest request、httpservletResponse応答)をスローIoException {//応答メッセージをエンコードする応答をエンコードします。 Response.setheader( "REFRESH"、 "2; url = http://www.baidu.com"); printwriter out = response.getWriter(); out.println( "こんにちは中国、2秒でバイドゥにジャンプ..."); } @Override public void dopost(httpservletrequest request、httpservletResponse応答)IoException {this.doget(request、response); }}2。HTTPSERVLETREQUEST
HTTPSERVLETREQUESTインターフェイスは、ServletRequestインターフェイスを継承し、カプセル化されたHTTP要求メッセージに特別に使用されます。 HTTP要求情報には、リクエストライン、リクエストヘッダー、リクエスト本体の3つの部分が含まれているため、HTTPSERVLETREQUESTインターフェイスは、リクエストライン、リクエストヘッダー、リクエストボディを取得するための関連方法を定義します。
要求行を取得するための関連方法
| 方法 | 説明します |
| public string getMethod() | HTTPリクエストメソッド、投稿、取得などを取得します。 |
| パブリックストリングgetRequesturi() | リクエスト行でリソース名の部分を取得します |
| public string getqueryString() | リクエスト行でパラメーターパーツを取得します |
| public string getProtocol() | HTTP 1.1などのリクエスト行でプロトコル名とバージョンを取得します |
| public string getContextPath() | リクエストURLでWebアプリケーションに属するパスを取得します |
実際、リクエスト行の方法はメソッド名から見ることができるので、ここには1つずつ投稿することはありません。
リクエストメッセージヘッダーを取得するための関連方法
| 方法 | 説明します |
| public string getheader(文字列名) | nullが返されない場合、指定されたフィールドの値を取得します。複数の返品がある場合は、最初の値を取得します |
| public列挙<string> getheaders(string name) | 指定されたフィールドで列挙コレクションオブジェクトを返します |
| public列挙<string> getheadernames() | すべてのフィールドを含む列挙コレクションオブジェクトを返します |
| public string getContentType() | コンテンツタイプのフィールドの値を取得します |
リクエストヘッダーフィールドのすべての値を印刷します
パッケージZzz; Import java.io.ioexception; import java.io.printwriter; Import java.util.Enumeration; Import javax.servlet.http.httpservlet; Import javax.servlet.http.httpservletrequest; Import Javax.http.http.htptpretspons; httpservlet {@override public void doget(httpservletrequest request、httpservletresponse応答)IoException {//応答をエンコードする応答メッセージを設定します。 printwriter out = response.getWriter(); ENUMERATION <String> names = request.getheadernames(); while(names.hasmoreElements()){string name = names.nextelement();文字列値= request.getheader(name); out.println(name + ":" + value + "</br>"); }} @Override public void dopost(httpservletrequest request、httpservletresponse応答)throws ioexception {this.doget(request、response); }}リクエスト本文を取得するための関連方法
方法 説明 public servletinputStream getInputStream() 要求されたservletinputStreamオブジェクトを取得します。エンティティのコンテンツが非テキストの場合、GetInputStreamメソッドを介してのみリクエストボディメッセージボディを取得できます。 要求されたbufferedreader getReader ()は、要求されたbufferedreaderオブジェクトを取得します。このオブジェクトは、エンティティコンテンツバイトデータを指定された文字セットによってエンコードされたテキスト文字列に変換します。
リクエストパラメーターを取得します
| 方法 | 説明します |
| public string getParameter(文字列名) | 指定されたパラメーター値を取得し、このパラメーターなしでnullを返します |
| public Enumeration <string> getParameternames() | すべてのパラメーター名を含む列挙オブジェクトを返します |
| public string [] getParametervalues(文字列名) | HTTP要求には、同じパラメーター名に対応するすべてのパラメーター値を取得するために、複数の同じパラメーターがある場合があります。 |
3。RequestDispatcherインターフェイス
クライアントがWebリソースを要求した場合、サーバーにリクエストの処理などの別のリソースに通知したい場合は、関数sendredirect()を使用してredirectを実装することに加えて、requestdispatcherインターフェイスのインスタンスオブジェクトを介して実装することもできます。 RequestDispatcherオブジェクトを取得する方法は、ServletRequestインターフェイス-GetRequestDispatcher(String Path)で定義されます。パラメーターパスは、現在のWebアプリケーションのルートディレクトリを表すために「/」で開始する必要があります。つまり、このWebプログラムにパスパスが必要です。そうしないと、例外が発生します。
RequestDispatcherインターフェイスのメソッド
| 方法 | 関数 |
| public void forward(servletRequestリクエスト、サーブレスポンス応答) | サーブレットを別のWebリソースに渡し、リクエストを別のリソースに渡すために渡す |
| public void incluse(servletRequestリクエスト、サーブレスポンス応答) | 現在の応答コンテンツとして他のリソースを含めるために使用されます |
上記は、編集者によって導入されたJava Webリクエストと応答の例の詳細な説明です。私はそれが誰にでも役立つことを願っています!