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
重新启动服务器,输入后发现效果是相同的