Javaに関する様々な情報をご紹介します。

3クライアントへのデータ返信

Javaに関する様々な情報をご紹介します。

クライアントへのデータ返信

このページでは、Servletプログラムからクライアントへデータを返信する方法、指定したページにリダイレクトする方法について解説します。それぞれのプログラムはHttpServletResponseインタフェースを使用します。

データの返信

ここでは、クライアントへデータを返信する方法について解説します。HttpServletResponseインタフェースにはこれらのデータを返信するためのメソッドが用意されています。Servletプログラムが通常オーバーライドするdoXxxメソッドの引数にはHttpServletResponseインタフェースのオブジェクトが定義されています。このオブジェクトを通じでクライアントへデータを返信します。

HttpServletResponseで定義されているデータ返信関連のメソッド

戻り型 メソッド 説明
Print
Writer
getWriter( ) クライアントにテキストデータを返信するためのPrintWriterオブジェクトを生成します。
ServletOutputStream getOutputStream( ) クライアントにバイナリデータを返信するためのServletOutputStreamオブジェクトを生成します。
void setContentType(String) クライアントへデータを返信する際のデータタイプを指定します。指定しない場合はHTMLファイル(text/html)になります。その他、image/jpeg, application/javaなどがあります。データを返信する処理の前に指定します。
void addHeader(String, String) 第一引数にヘッダー名、第二引数にヘッダー値を指定し、ヘッダーデータを返信します。ヘッダー値がすでに設定されている場合は、既存のヘッダー値に追加されます。
void setHeader(String, String) 第一引数にヘッダー名、第二引数にヘッダー値を指定し、ヘッダーデータを返信します。ヘッダー値がすでに設定されている場合は、既存のヘッダー値を上書きします。
boolean containsHeader(String) 引数に指定されたヘッダーがすでに設定されているかどうかを調べます。
void sendError(int) 引数に指定されたHTTPプロトコルのエラーステータスコードをクライアントに返します。
void setStatus(int) エラーではないときに、クライアントに返すスタータスコードを指定します。エラーの時は、sendErrorメソッドが使用されます。

クライアントへ、テキストデータを返信する(ブラウザにテキストデータを表示する)プログラムを例示します。

ResponseServ.java

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class ResponseServ extends HttpServlet {
    public void doGet(HttpServletRequest req, HttpServletResponse res)
            throws ServletException, IOException {
        //(1)ContentTypeの指定
        res.setContentType("text/html; charset=Windows-31J");
        
        //(2)PrintWriterオブジェクトの生成
        PrintWriter out = res.getWriter();
        //(3)テキストデータの返信
        out.println("<HTML>");
        out.println("<BODY>");
        out.println("Hello! Javaの道");
        out.println("</BODY>");
        out.println("</HTML>");
        out.flush();  //(4)データ返信の終了
    }
}
  1. (1)setContentTypeメソッドで返信するデータの種類を指定します。ここでは、HTMLファイルを返すため、"text/html; charset=Windows-31J"を指定します。
  2. (2)テキストデータを返信するためにgetWriterメソッドで、PrintWriterオブジェクトを生成します。
  3. (3)PrintWriterオブジェクトのprintlnメソッドでテキストデータをクライアントへ返信します。
  4. (4)テキストデータの返信後、PrintWriterオブジェクトのflushメソッドを実行します。

【実行結果】Servletプログラムの実行方法に関しては、Javaの道:Tomcat(プログラム配置・実行)を参照してください。

Javaの道_HttpServletResponse_1

リダイレクト

ここでは、sendRedirectメソッドを利用して、他のページへリダイレクトする方法を解説します。よくforwardメソッドと混同されますが、sendRedirectメソッドとforwardメソッドは明確に異なります。
sendRedirectメソッドは、一旦クライアントへ転送先の情報を返し、クライアントから転送を行います。転送先のHTTPセッションは、転送元のセッションとは異なるセッションで行われます。
forwardメソッドは、サーバ内で転送を行います(HTTPセッションは同一)。転送元と転送先でデータを引き継ぎたいときにforwardメソッドを使用します。

HttpServletResponseで定義されているsendRedirectメソッド

戻り型 メソッド 説明
void sendRedirect
(String)
引数に指定されたURLへのリダイレクトを行います。

Javaの道のトップページへリダイレクトするプログラムを例示します。プログラムにアクセスするとJavaの道のトップページへリダイレクトされます。Servletプログラムの実行方法に関しては、Javaの道:Tomcat(プログラム配置・実行)を参照してください。

SendRedirect.java

package pack;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class SendRedirect extends javax.servlet.http.HttpServlet {
    protected void doGet(HttpServletRequest req, HttpServletResponse res)
            throws ServletException, IOException {
        //(1)引数にリダイレクト先を指定します。
        res.sendRedirect("http://www.javaroad.jp/");
    }
}

3クライアントへのデータ返信