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 {
res.sendRedirect("http://search.www.infoseek.co.jp/");
}
}