Java Servletとは
Java Servletとは,Webサーバ上でWebページなどを動的に生成したり,データ処理を行うためにJavaで作成されたプログラム及びその仕様である.単にサーブレットと呼ばれる
サーブレットはMVCモデルにおけるコントローラであり,Webブラウザ(クライアント)からのリクエストを受け取ったり,レスポンスを返すことが役割となる.
Webページなどの生成に関する処理やデータベースの連携などは,JSPやJavaBeansなどに依頼する.
また,サーブレットを実行するためにはサーブレットコンテナという環境が必要である.サーブレットコンテナとは,クライアントからHTTPリクエストを受け取る役割を担い,受け取ったリクエストをJavaServletに渡して処理させるという仕組み.
Servletの特徴やメリット
-
ライフサイクルの管理
ライフサイクルとは,処理が始まってから終了するまでの一連の流れのこと.インスタンスが作成されてから破棄されるまでは,メモリ上にデータを保管するため,2回目以降の処理速度が速くなる -
マルチスレッドに対応
同時に複数の処理を行うことができる.複数のユーザから同時にアクセスがある場合でも,複数の処理が行えるので効率が良い -
プラットフォームに依存しない
Javaのプログラムから作られるので,OSやハードウェアなどに依存することはない.「一度書いたらどこでも動く」というJavaの理念をそのまま受け継いでいる.
Servletファイルの基本構成
//(1)必要なパッケージのインポート
import javax.servlet.*;
import javax.servlet.http.*;
@WebServlet("/hello") //(2)アノテーションでマッピング
public class HelloWorld extends HttpServlet{ //(3)HTTPServletクラスを継承
//(4)HTTPリクエストに対するメソッドを記述
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException{
/* 処理内容を記述*/
}
}
1. パッケージのインポート
サーブレットを作成する上で必要となるクラスが含まれているパッケージは以下の2つ
import javax servlet. * ;
import javax. servlet.http.* ;
2. アノテーションでマッピング名を指定
アノテーションのマッピング機能を利用することで,サーブレットをパス(URL)にマッピングすることができる.
http://サーバホスト名:ポート番号/プロジェクト名/@WebServletアノテーション
のようにURLにアクセスされた場合にどのServletファイルを実行するかを指定する.
3. HttpServletクラスを継承
HttpServletクラスには多くのメソッドが定義されていおり,それを利用するために,作成したクラスに継承する.
4. HTTPメソッドに対する処理を記述
HTTPメソッドの種類ごとに対応するメソッドがそれぞれ用意されており,HTTPリクエストのメソッドによって対応するサーブレットのリクエストを変える.
HTTPメソッド | 用意されているメソッド |
---|---|
GET | doGet |
POST | doPost |
PUT | doPut |
DELETE | doDelete |
HEAD | doHead |
TRACE | doTrace |
OPTIONS | doOptions |
サーブレットクラスにこのどれかのメソッドを最低1つは実装する.
HttpServletRequestとHttpServletResponse
全てのHTTPメソッドの引数にはHttpServletRequestインスタンスと,HttpServletResponseインスタンスを引数にとる.
HttpServletRequest
HTTPリクエストに関する情報やデータを取得するために使用する.
クライアントからのパラメータ,ヘッダ,セッション情報を取得することができる.
HttpServletResponse
HTTPレスポンスに関する情報やデータを管理するために使用する.
クライアントに返すデータ・HTMLコンテンツ・JSON・画像などをクライアントへの出力データを設定することができる.
それぞれ多くのメソッドが用意されており,それを利用することでデータのやりとりなどを行う.
JSPからServletにデータを送る
JSP側のコード
<form action="/Servlet" method="post">
<input type="text" name="inputName">
<input type="submit" value=Submit">
</form>
JSPはフォーム送信することで,Servletにデータを送ることができる.form要素のaction属性は,データの送信先となるServletのURLを指定する.
Servlet側のコード
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// フォームの入力値を取得
String inputValue = request.getParameter("inputName");
// フォームの入力値(配列)を取得
String[] inputValues = request.getParameterValues("inputNames");
}
request.getParameter
によって入力値を受け取る.メソッドの引数にはフォームのinput要素のname属性に対応している.
(配列を受け取る場合,getParameterValuesメソッドを利用することで受け取ることができる.)
ServletからJSPにデータを送る
Servlet側のコード
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String name = "Taro"
request.setAttribute("user",name);
RequestDispatcher dispatcher = request.getRequestDispatcher("/sample.jsp");
dispatcher.foward(request,response);
}
request.setAttribute()
を利用して,キーと値のセットでデータを指定する.
RequestDispatcher
オブジェクトを利用して,データを受け渡すJSPのパスを指定する.
JSP側のコード
<div>
<% String name = (String request.getAttribute("user"); %>
<p><%= name %>
</div>
request.getAttribute()
の引数にServlet側のsetAttribute
で指定したキーを使用して,対応する値受け取る.