5.doGetとHtml出力 |
(1) doGet メソッドの構文 |
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, java.io.IOException |
(2) ブラウザからURL指定時の確認 |
// PortCheck.java import java.io.*; import java.net.*; public class PortCheck{ public static void main(String argv[]) throws IOException{ String gyo; ServerSocket ss = new ServerSocket(5555); while(true){ Socket s = ss.accept(); BufferedReader br = new BufferedReader( new InputStreamReader(s.getInputStream())); PrintWriter pw = new PrintWriter(s.getOutputStream(),true); pw.println("<html><head></head><body>"); pw.println("Access port 5555!"); pw.println("</body></html>"); while(!(gyo = br.readLine()).equals("")){ System.out.println(gyo); } s.close(); } } } |
C:\java_test>javac PortCheck.java C:\java_test>java PortCheck GET / HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms- excel,application/msword,application/vnd.ms-powerpoint,*/* Accept-Language: ja Accept-Encoding: gzip, deflate User-Agent:Mozilla/4.0(compatible;MSIE 5.5;Windows NT 5.0) Host: 127.0.0.1:5555 Connection: Keep-Alive |
※Servletでは「GET」の要求があった時に、 doGetメソッドを呼び出すようです。
(3) Html 文書の送出 |
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, java.io.IOException 引数 HttpServletResponse resp サーブレットで処理した結果 |
ServletResponseクラスのsetContentTypeメソッドを使ってMIMEタイプと文字符号化方法(Charset)を指定します。
構文 : public void setContentType(java.lang.String type) 引数 : type - a String specifying the MIME type of the content
例 : resp.setContentType("text/html; charset=Shift_JIS");
MIMEタイプとCharset には、次のような種類(一部)があります。
シフトジス "text/html;charset=Shift_JIS" 一般的なJIS "text/html;charset=ISO-2022-JP" EUC "text/html;charset=EUC-JP" テキスト形式 "text/plain" GIFイメージ形式 "image/gif"
次に実際にデータを書き出すためのWriterを取得します。文字を書きだすのであれば getWriter()メソッドを使ってPrintWriterを取得します。
構文 : public java.io.PrintWriter getWriter() throws java.io.IOException 引数 : なし 戻り値 : a PrintWriter object that can return character data to the client
例 : PrintWriter out = resp.getWriter();
画像などのバイナリを書き出すのであればgetOutputStream()を使ってServletOutputStreamを取得します。
この取得したPrintWriterなりServletOutputStreamなりに対してデータを書き出すことで、呼び出し元にデータを返すことができます。
HTML文書を返す場合には、先ほどのgetWriterメソッドで取得したPrintWriterに対して"println"メソッドでデータを書きだしてあげます。今までの説明を含めて、実際には次のようになります。
// 例 SanServlet.java import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class SanServlet extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, java.io.IOException{ resp.setContentType("text/html;charset=Shift_JIS"); PrintWriter out = resp.getWriter(); out.println("<html>"); out.println("<head><title>タイトル</title></head>"); out.println("<body>"); out.println("Hello World!"); : out.println("</body></html>"); out.close(); } }
書き出しが終わったら、PrintWriterをcloseします。
以上が基本的なdoGetが呼び出されたときにHTML文書を返す場合の手順となります。