English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Servlet サーバー HTTP レスポンス

前述の章で議論されたように、WebサーバーがHTTPリクエストに応答する際には、通常、ステータスライン、いくつかの応答ヘッダー、空行、そしてドキュメントが含まれます。典型的な応答は以下のようになります:

HTTP/1.1 200 OK
Content-Type: text/html
Header2: ...
...
HeaderN: ...
  (Blank Line)
<!doctype ...>
<html>
<head>.../head>
<body>
...
</body>
</html>

状態行には、HTTPバージョン(本例ではHTTP/1.1)、状態コード(本例では 2(ステータスコード00)および状態コードに対応する短いメッセージ(本例ではOK)を含みます。

以下の表は、Webサーバーからブラウザに返される最も有用なHTTPヘッダーをまとめています: 1.1 レスポンスヘッダーは、Webプログラミングで頻繁に使用されるものであります:

ヘッダー情報説明
Allowこのヘッダー情報は、サーバーがサポートするリクエストメソッド(GET、POSTなど)を指定します。
Cache-Controlこのヘッダー情報は、レスポンスドキュメントがどのような状況で安全にキャッシュできるかを指定します。可能な値には:public、private または no-cache Publicは、ドキュメントがキャッシュ可能であり、Privateは、ドキュメントが個別のユーザー用の私用ドキュメントであり、私有的(共有外)キャッシュにのみ保存されることを意味します。no-cacheは、ドキュメントがキャッシュされないことを意味します。
Connectionこのヘッダー情報は、ブラウザが持続可能なHTTP接続を使用するかどうかを示します。 close ブラウザが持続可能なHTTP接続を使用しないことを示します。 keep-alive これは持続可能な接続を使用することを意味します。
Content-Dispositionこのヘッダー情報は、ブラウザがユーザーに指定された名前のファイルとしてレスポンスをディスクに保存するよう要求することができます。
Content-Encoding転送中に、このヘッダー情報はページのエンコーディング方法を指定します。
Content-Languageこのヘッダー情報は、ドキュメントを書いた際に使用された言語を示します。例えば、en、enなど-us、ruなどで使用されます。
Content-Lengthこのヘッダー情報は、レスポンス中のバイト数を示します。ブラウザが持続可能(keep-alive)HTTP接続を使用する場合にのみ-HTTP接続が維持されている(保持可能)場合にのみ、これらの情報が必要です。
Content-Typeこのヘッダー情報は、レスポンスドキュメントの MIME(多目的インターネットメールエクステンション)タイプを提供します。
Expiresこのヘッダー情報は、内容がキャッシュされない時間を指定します。その後、内容はキャッシュされません。
Last-Modifiedこのヘッダー情報は、ドキュメントの最終修正日を示します。その後、クライアントはファイルをキャッシュし、以降のリクエストで If-Modified-Since リクエストヘッダー情報は日付を提供します。
Locationこのヘッダー情報は、すべてのステータスコードを持つレスポンスに含まれるべきです。次に、 300s以内に、これはブラウザにドキュメントのアドレスを通知します。ブラウザは自動的にこの位置に再接続し、新しいドキュメントを取得します。
Refreshこのヘッダー情報は、ブラウザがどのように早くページを更新するかを指定します。ページのリフレッシュ秒数を指定できます。
Retry-Afterこのヘッダー情報は、 503(Service Unavailable サービス不可用)応答と一緒に使用すると、クライアントに再びリクエストを送れるまでの時間を伝えます。
Set-Cookieこのヘッダー情報は、ページに関連付けられたcookieを指定します。

HTTP応答ヘッダーを設定する方法

以下のメソッドは、ServletプログラムでHTTP応答ヘッダーを設定するために使用できます。これらのメソッドは、 HttpServletResponse オブジェクトが利用可能です。

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

HTTPヘッダー応答例

setContentType() メソッドについて、前の例で見たことがあります。以下の例でも同じ方法を使用し、さらに以下を使用します。 setIntHeader() メソッドで設定 Refresh ヘッダ。

//導入必要な java ライブラリ
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/Refresh")
//HttpServletクラスを拡張
public class Refresh extends HttpServlet {
    // GETメソッドのリクエストを処理するメソッド
      public void doGet(HttpServletRequest request,
                        HttpServletResponse response)
                throws ServletException, IOException
      {
          // 自動リフレッシュの時間を設定 5 秒
          response.setIntHeader("Refresh", 5);
          // 設定レスポンスの内容タイプ
          response.setContentType("text/html;charset=UTF-8");
         
          //デフォルトの時区と言語環境を使用して日付を取得  
          Calendar cale = Calendar.getInstance();  
          //Calendar型をDate型に変換  
          Date tasktime=cale.getTime();  
          //日付出力のフォーマットを設定  
          SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
          //フォーマット出力  
          String nowTime = df.format(tasktime);
          PrintWriter out = response.getWriter();
          String title = "自動リフレッシュ ヘッダー 設定 - 基础教程网示例";
          String docType =
          "<!DOCTYPE html>\n";
          out.println(docType +
            "<html>\n" +
            "<head><title>" + title + "</title></head>\n"+
            "<body bgcolor=\"#f0f0f0\">\n" +
            "<h1 align="center">" + title + "</h1>\n" +
            "<p>現在の時間は:" + nowTime + "</p>\n");
      }
      // POST メソッドリクエストを処理するメソッド
      public void doPost(HttpServletRequest request,
                         HttpServletResponse response)
          throws ServletException, IOException {
         doGet(request, response);
      }
}

このテスト例は TomcatTest プロジェクトの下にあり、対応する web.xml 設定は以下の通りです:

<?xml version="1.0" encoding="UTF-8"?>  
<web-app>  
  <servlet  
     <!-- クラス名 -->  
    <servlet-name>Refresh</servlet-name>  
    <!-- のパッケージ -->  
    <servlet-class>com.w3codebox.test.Refresh</servlet-class>  
  </servlet>  
  <servlet-mapping>  
    <servlet-name>Refresh</servlet-name>  
    <!-- 訪問したウェブサイト -->  
    <url-pattern>/TomcatTest/Refresh</url-pattern>  
    </servlet-mapping>  
</web-app>

現在、上記のサーブレットを呼び出し、毎隔 5 現在のシステム時間が表示されます。サーブレットを実行し、少し待って、以下のような結果が見られます: