ServletAPI詳細解説(4) - HttpServletResponse

3 番目のメソッド HttpServletResponse を見てみましょう。

サーブレットの動作原理で述べたように、サーブレット コードの doXXX メソッドの目的は、リクエストに応じてレスポンスを計算し、レスポンス データを HttpServletResponse オブジェクトに設定することです。Tomcat は HttpServletResponse オブジェクトをHTTP プロトコル文字列の形式に従って文字を変換し、Socket を介してブラウザに書き戻します。

次のメソッドは、HttpServletResponse オブジェクトを介して利用可能な応答ヘッダーを設定できます。

シリアルナンバー 方法と説明
1 String encodeRedirectURL(String url)
sendRedirect メソッドで使用される指定された URL をエンコードするか、エンコードが不要な場合は URL を変更せずに返します。
2 String encodeURL(String url) は、
セッション ID を含む指定された URL をエンコードするか、エンコードが必要ない場合は URL を変更せずに返します。
3 boolean containsHeader(String name)
指定された応答ヘッダーが設定されているかどうかを示すブール値を返します。
4 boolean isCommitted() は、
レスポンスがコミットされたかどうかを示すブール値を返します。
5 void addCookie(Cookie cookie) は、
指定された Cookie を応答に追加します。
6 void addDateHeader(String name, long date)
指定された名前と日付値を持つ応答ヘッダーを追加します。
7 void addHeader(String name, String value) は、
指定された名前と値を持つ応答ヘッダーを追加します。
8 void addIntHeader(String name, int value)
指定された名前と整数値を持つ応答ヘッダーを追加します。
9 void flushBuffer()
バッファにあるものをクライアントに強制的に書き込みます。
10 void reset() は、
ステータス コードやヘッダーを含む、バッファ内に存在するすべてのデータをクリアします。
11 void resetBuffer() は、
応答の基本バッファーの内容をクリアしますが、ステータス コードとヘッダーはクリアしません。
12 void sendError(int sc) は、
指定されたステータス コードでエラー応答をクライアントに送信し、バッファをクリアします。
13 void sendError(int sc, String msg) は、
指定されたステータスでエラー応答をクライアントに送信します。
14 void sendRedirect(String location)
指定されたリダイレクト ロケーション URL を使用して、一時的なリダイレクト応答をクライアントに送信します。
15 void setBufferSize(int size)
応答本文の優先バッファ サイズを設定します。
16 void setCharacterEncoding(String charset)
クライアントに送信される応答の文字エンコーディング (MIME charset) を設定します (UTF-8 など)。
17 void setContentLength(int len) は、
HTTP サーブレット レスポンスのコンテンツ ボディの長さを設定します。このメソッドは、HTTP Content-Length ヘッダーを設定します。
18 void setContentType(String type)
応答が送信されていない場合に、クライアントに送信される応答のコンテンツ タイプを設定します。
19 void setDateHeader(String name, long date)
指定された名前と日付値で応答ヘッダーを設定します。
20 void setHeader(String name, String value) は、
指定された名前と値で応答ヘッダーを設定します。
21 void setIntHeader(String name, int value)
指定された名前と整数値で応答ヘッダーを設定します。
22 void setLocale(Locale loc)
応答が送信されていない場合、応答のロケールを設定します。
23

void setStatus(int sc) は、
この応答のステータス コードを設定します。

24

void setCharacterEncoding(文字列文字セット)

クライアントに送信される応答の文字エンコード (MIME 文字セット) を設定します (例: UTF-8)。

25

void sendRedirect(文字列の場所)

指定されたリダイレクト先 URL を使用して、一時的なリダイレクト応答をクライアントに送信します。

3XX ステータス コード、ブラウザは新しいアドレスにジャンプします

26

PrintWriter getWriter()

テキスト形式のデータをボディに書き込むために使用されます

27

出力ストリーム getOutputStream()

バイナリ形式のデータを本体に書き込むために使用されます

void setCharacterEncoding(文字列文字セット)

 重启服务器后输入URL,发现不能正确识别中文 

如果URL中有中文字符,没有设置UTF8,返回的响应就会出现乱码,浏览器默认不知道字符的编码方式,要通过方法显示的告诉浏览器,就可以正确识别了

或者直接和contenttype一起设置

 重启服务后再次刷新页面,就正常了 

注意:设置字符集和contenttype必须要在返回对象的代码上面,必须先被执行,写到下面不会生效

void sendRedirect(String location)我们使用重定向方法

@WebServlet("/redirct")
public class RedirctServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.sendRedirect("http://www.baidu.com");
    }
}

输入URL(http://127.0.0.1:8080/ServletHelloWorld/redirct)后会直接跳转到百度页面

通过抓包我们可以看到响应中有个Location,这个就代表重定向的地址

keep-Alive是建议浏览器和服务器之间保持长连接,短链接是每个连接只进行一次请求和响应,长连接可以进行多次请求和响应 

我们也可以不用sendRedirect方法,分步进行,可以先设置状态码,再设置Location

 重新启动服务器,输入后发现效果是相同的

おすすめ

転載: blog.csdn.net/chenchenchencl/article/details/129889231