クライントへのデータ返信とリダイレクト処理

1.クライアントへのデータ返信の仕方は?

  • HttpServletResponseインターフェースにデータ返信するためのメソッドが用意。
  • Servletプログラムが通常オーバーライドするdoXxxメソッドの引数にはHttpServletResponseインタフェースのオブジェクトが定義されてる。

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

戻り型 method 説明
PrintWrite getWriter() クライアントにデータを返信するためのPrintWriterオブジェクトを生成。基本だね。
SerlvetOutputStream getOutputStream クライアントにバイナリーデータを返信する時に
void setContentType(String) データ返信する際のデータタイプ指定。指定しない場合は、HTMLファイル(text/html)になる。
void addHeader(String,String) 第一引数にヘッダー名、第二引数にヘッダー値を設定。
boolean containsHeader(String) 引数に指定されたヘッダーがすでに設定されているかどうかを調べる。
void sendError(int) 引数に指定されたHTTPプロトコルのエラーステータスコードをクライアントに返す。
void sendStatus(int) エラーではないときに、クライアントに返すスタータスコードを指定します。エラーの時は、sendErrorメソッドが使用される。
- sample
- "unko"というのをheaderに設定してみる。
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class Response extends HttpServlet{
	public void doGet(HttpServletRequest req, HttpServletResponse res)
				throws ServletException, IOException {
	
		res.setContentType("text/html");
		res.addHeader("unko","unko-koba");
		
		PrintWriter out = res.getWriter();
		
		out.println("<html><head><title>response test</title></head>");
		
		
		out.println("<body>");
		boolean sethead_flg;
		sethead_flg = res.containsHeader("unko");
		if(!sethead_flg){
			out.println("<p>unko doesn't set!!</p>");
		}
		else{
			out.println("<p>unko set!!</p>");
		}
		
		out.println("</body></html>");	
	}
}

2.リダイレクトするときは、sendRedirectメソッドを使う。

redirectとforwardの違い

  • sendRedirectメソッドは、一旦client側へ転送先の情報を渡す。転送先のhttpセッションは、転送元のセッションとは異なるよ。
  • forwarメソッドは、サーバサイドで転送処理する。だからセッションは同じ。
- sample
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://search.www.infoseek.co.jp/");  // ここで転送先のURLを!
  }
}