JSPとJava Servletについて
JSPとJava Servletについて
環境
JSP
JSP は、Java Server Pages の略。 画面表示とJavaの処理を行い、 HTMLとJavaが一緒になったような技術。
JSPファイルの仕組み
JSPのメリット
JSPのデメリット
-
HTML内にJavaプログラムが混在するので可読性が下がる。
そのため、 JSPファイル内には、画面表示に関する最低限の処理を書くのが理想的になる。 (MVCモデルで設計すると改善できる。)
JSPもJavaファイル
ユーザからJSPファイル(例:index.jsp)にリクエストがあった場合、サーバ側では以下の手順で処理される。
JSPの構文
JSPの要素
基本的な要素
名称 | 説明 | 構文 |
---|---|---|
テンプレート | HTMLで書かれた場所 | <!DOCTYPE html> など |
Pageディレクティブ | JSPの設定を定義する場所 | <%@page %> |
スクリプトレット | Javaプログラムを記入する場所 | <% %> |
スクリプト式 | 変数の値やメソッドの戻り値を出力する場所 | <%= %> |
JSPコメント | JSP内のコメントを記入する場所 | <%-- --%> |
知っておいたほうが良い要素
名称 | 説明 |
---|---|
includeディレクティブ | 他のJSPページを取り込む場所 |
tagディレクティブ | 使用するタグライブラリを宣言する場所 |
スクリプト宣言 | JSP内で変数やメソッドを宣言する場所 |
アクションタグ | tagディレクティブで読み込んだタグを使用する場所 |
EL式 | 処理結果などを簡単に使用するための式 |
テンプレート
HTMLで書かれた部分。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
</body>
</html>
etc.
Pageディレクティブ
<%@page
で始まり、 %>
で終わる。 JSPで使用する言語や JSPページの設定(文字コードなど)を指定する。
<%@page language="java" contentType="text/html; charset=UTF-8"%>
importするライブラリを書く。
<%@page import="java.util.ArrayList"%>
スクリプトレット
<% %>
の中にJavaコードを書く。 複数行も書ける。 PHPのようにHTMLと組み合わせて 跨いで書くこともできる。
<body>
<% for(int i = 0; i < 5; i++ ){ %>
<p>cartman</p>
<% } %>
</body>
スクリプト式
<%=
で始まり、 %>
で終わる。 出力関数無しで式を評価して表示できる。
<body>
<%= 1 + 2 + 3 + 4 + 5 %> //15
</body>
JSPコメント
<%--
で始まり、 --%>
で終わる。
HTMLのコメント(<!-- -->
)と違って、 ブラウザからソースを開いても 画面上には表示されない。 見えてもいい場合はHTMLのコメントをつかう。
<body>
<%-- 変数の宣言 --%>
<% int i = 0; %>
</body>
JSPのサンプル
生成されるソースは以下。 JSPコメントは表示されない。
Servlet
Java Servlet(Servlet) は、Javaの処理を行う。 サーバ側(バックエンド)での処理を担当する。
リクエストの受付窓口のようなものとなっている。
Servletの仕組み
HttpServletクラスを継承することで使える。
public class SampleServlet extends HttpServlet {
}
HttpServletクラスからオーバライドできるメソッド
メソッド名 | 説明 |
---|---|
doGet | GETメソッドでリクエスされた場合に呼び出される |
doPost | Postメソッドでリクエスされた場合に呼び出される |
doHead | Headメソッドでリクエスされた場合に呼び出される |
doPut | Putメソッドでリクエスされた場合に呼び出される |
doDelete | DELETEメソッドでリクエストされた場合に呼び出される |
HTTPメソッド
クライアント端末からサーバへ リクエストが有った場合、 サーバはレスポンスを返す。 通信プロトコル「HTTP」で振る舞いが決められている。
主に使われるHTTPメソッドは2つある。
GETメソッド
サーバに値を渡す場合、 URLに続けて値を付加する方式。 URLの後ろにクエリパラメータが付く。
POSTメソッド
サーバに値を渡す際、 見えない部分(HTTPリクエストボディ) に値を付加する方式。
一般的には「見られたくない情報を送受信するとき」に使用する。
HTTPメソッドとServletの関係
-
クライアント端末:使用されたHTTPが 「GETメソッド」の場合
サーバ:「doGet()」が呼びだされる。
-
クライアント端末:使用されたHTTPが 「POSTメソッド」の場合
サーバ:「doPost()」が呼びだされる。
Servletがどうやって実行されるか
リクエストが受け取ったとき、 WebコンテナであるApache Tomcat がGetかPostかなどを自動で振り分けてくれる。
振り分け処理(自動判別)後、 Getであれば、doGet()
メソッドが呼ばれ、 Postであれば、doPost()
メソッド が呼ばれる。
HttpServletからオーバーライドするメソッド
IDEでServletファイルを新規作成した場合、 以下のメソッドは自動的にオーバーライドされる。
コメントも、NetBeansで生成されたもの。
/**
* Handles the HTTP GET method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
/**
* Handles the HTTP POST
method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) hrows ServletException, IOException {
}
Servletの構文
クラス宣言部
-
@WebServlet()
でリクエストがきた際に使用するURLを決める。 -
クラス宣言時に必ず「HttpServlet」を継承する。 (IDEではServletファイルを新規作成したときに自動的につく。)
-
private static final long serialVersionUID
をユニークになるように決める。
@WebServlet(urlPatterns = {"/SampleServlet"})
public class SampleServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
...
}
コンストラクタ
NetBeansでは自動で追加されないようなので手動で書く。
/**
* コンストラクタ.
*/
public SampleServlet() {
super();
}
メソッド
Servletファイルを新規作成すると、 doGet()
やdoPost()
が自動的にオーバーライドされる。
/**
* Handles the HTTP GET method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
/**
* Handles the HTTP POST method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
Servletのサンプル
Servletで簡易なWebページをつくるサンプル。
まとめ
JSPのまとめ
Servletのまとめ
-
Servletは決まったmethod(getやpostなど)で 呼び出されたメソッド(doGetやdoPostなど)の処理を書く。
参考リンク
関連リンク