Servlet/JSP 第1回ではWebアプリケーションのしくみについて解説しましたので、Servletの基本について学んでいきましょう。
開発環境の準備を整え、早速Servletクラスを作成していきましょう。
一見見たことないコードが並んでいるように見えますが、一つずつかみ砕いていくとJava基礎で学習した内容で理解できるはずです。
実際にコードを写してみて、Servletに触れて理解を深めていきましょう。
開発環境の準備
開発に必要なもの
開発に必要なものはたった1つ
pleiadesのインストール
pleiadesとは、統合開発環境Eclipseに、開発に便利な機能(プラグイン)を加え、さらにWebアプリケーションサーバーApache Tomcatをセットしたもの。
Webアプリケーションの開発現場でよく使用されている代表的な統合開発環境がEclipseです。
動的Webプロジェクト
Webアプリケーションのためのプロジェクトを動的Webプロジェクトといいます。
動的Webプロジェクトの中にWebアプリケーションを構成するプログラムなどを格納します。
動的Webプロジェクトの中身
動的Webプロジェクトは、原則1つのWebアプリケーションを表し、以下を格納できる
①Servletクラス、JSPファイル
②通常のJavaのクラスファイル
③HTMLファイル、CSSファイル、画像ファイルなど
Servletクラスの作成
Servletクラスの作成ルール
import java.io.IOException;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
public class HelloServlet extends HttpServlet {
protected void doGet (HttpServletRequest request,
HttpServletResponse response) throws ServletException,IOException{
}
}
Servletクラスでは以下の3つのルールに従ってクラスを定義します。
ルール① Servlet関係のクラスをインポートする
Servlet関係のクラスは、主に「jakarta.servlet」と「jakarta.servlet.http」の両パッケージに入っています。
1~6行では、Servletクラスを作成するために最低限必要なクラスです。
※Java EE8までは、javax.からはじまるライブラリとなります。
ルール② jakarta.servlet.http.HttpServletクラスを継承する
HttpServletクラスはServletクラスの元となるクラスです。
このクラスを継承することで、Servletクラスという特別なクラスを一から作成る必要がなくなります。
ルール③ doGetメソッドをオーバーライドする
doGetメソッドはServletクラスがリクエストされたときに実行されるメソッドです。
今は、Servletクラスのmainメソッドと解釈してください。
HttpServletRequestとHttpServletResponse
ブラウザからリクエストが届くと、アプリケーションサーバはサーブレットクラスのdoGet()を呼び出します。
このとき引数として渡されるHttpServletRequestはブラウザから届いた「リクエスト」、HttpServletResponseはサーバーから送り出す「レスポンス」に関係する情報と機能を持つインスタンスです。
Servletクラスでは、基本的にHttpServletRequestインスタンスに格納されているリクエストの情報を取り出して様々な処理を行い、結果画面のHTML情報をHttpServletResponseインスタンスを用いてブラウザに送り返します。
Webアプリケーション特有の処理のほとんどは、この2つのインスタンスを用いて実現可能です。
HTMLを出力
doGetメソッド内には、リクエストによって実行する処理を記述します。
HTMLを出力する処理は必須となります。
HTMLの出力はHttpServletResponseインスタンスを使用して、下記コードのように切っ述します。
protected void doGet (HttpServletRequest request,
HttpServletResponse response) throws ServletException,IOException{
response.setContentType("text/html; charset=UTF-8"); //処理1
PrintWriter out = response.getWriter(); //ここから↓処理2
out.println("<html>");
out.println("<...>");
out.println("</html>"); //ここまで↑
}
処理1 Content-typeヘッダの設定
HttpServletResponseのsetContentTypeメソッドを使用して、レスポンスのcontent-typeヘッダを指定。
指定する内容は、サーブレットクラスが出力するデータの種類に合わせる必要があります。
HTMLを出力する場合は「”text/html;charset=HTMLの文字コード”」とします。
上記コードは文字コードが「UTF-8」のHTMLを出力した例です。
処理2 HTMLの出力
実行結果のHTMLを出力する処理です。
この処理を行うのはcontent-typeヘッダの設定後でなければなりません。
HttpServletResponseのgetWriter()で取得できるjava.io.PrintWriterインスタンス(インポートが必要)
のprintln()で行います。
JavaでいうSystem.out.println()と同じように使用できると覚えてください。
response.setContentType(“text/html; charset=HTMLの文字コード”);
PrintWriter out = response.getWriter();
out.println(“…”);
※「java.io.PrintWriter」をインポートする必要がある。
※「response」はHttpServletResponseインスタンス
コメント