サーブレット / JSP とは
次案件でJavaのサーブレット/JSPでWebアプリを開発することになりました。
(実際にコーディングするのは自分じゃないかも。)
サーブレット/JSPはなんとなくは知っていました、実際に開発で触るのは初めてです。
なので、今回はまず「サーブレット」と「JSP」って何?
っていうところから勉強してみます。
1. サーブレット(Servlet)
サーブレットは、Javaでサーバーサイドのプログラムを作るためのものです。
サーブレットはブラウザからのリクエストによってアプリケーションサーバー(APサーバー)上で実行され、実行結果をHTMLとしてブラウザにレスポンスします。
また、サーブレットはJavaのクラス(サーブレットクラス)なので、ブラウザからリクエストがくるとAPサーバー上でインスタンスが生成され実行されます。
1.1. サーブレットでHTMLを出力
下記のコードはサーブレットクラスのdoGet()メソッド(サーブレットクラスがGETリクエストで呼ばれた場合に呼ばれるメソッド)で、HTMLを出力するプログラムです。
public class SampleServlet extends HttpServlet{ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ response.setContentType("text/html; charset=UTF-8"); PrintWriter out = response.getWriter(); // HTMLの生成 out.println("<html>"); out.println("<head>"); out.println("<title>割引額</title>"); out.println("</head>"); out.println("<body>"); out.println("<p>1980円の20%引きは" + 1980 * 0.8 + "円です。</p>"); out.println("</body>"); out.println("</html>"); } }
このメソッドによって生成されるHTMLは下記。
<html> <head> <title>割引額</title> <body> <p>1980円の20%引きは1584円です。</p> </body> </head> </html>
サーブレットクラスのdoGet()メソッド内でprintln()メソッドで主力した文字列がHTMLとして生成されていることわかります。
1.2. サーブレットの問題点
サーブレットはHTMLをいちいちprintln()で記述しないとならず、だいぶ冗長です。
修正や機能追加があった時の修正も面倒くさそうです。
また、HTMLを少し修正したいだけでもサーブレットクラスはJavaのクラスなので、
コード修正 ⇒ コンパイル ⇒ デプロイ
を実施しないといけません。
このような面倒を解決するために生まれたので、JSPとなります。
2. JSP(Java Server Pages)
JSPもサーブレットと同じでサーバーサイドのプログラムです。
サーブレットと違うのは、JSPファイルはコンパイル不要。APサーバーに配置するだけで環境に反映されます。
なぜかというとJSPの場合、ブラウザからリクエストを受けると、APサーバー(Tomcatなど)がJSPファイルを自動的にサーブレットクラスに変換し、コンパイルしたうえでインスタンスを生成してくれるからです。
先ほどサーブレットで書いたプログラムをJSPで書くと下記のようになります。
<html> <head> <title>割引額</title> <body> <p>1980円の20%引きは <% out.println(1980 * 0.8); %> 円です。</p> </body> </head> </html>
<% ~ %>で囲まれているところがJavaのコードが埋め込まれている場所です。
Javaのコードの中にHTMLを埋め込むよりも、メンテナンス性が断然によっそうです。
3. サーブレットとJSPの連携
実際にはサーブレット単体、JSP単体で開発を行うことはなく、サーブレットとJSPを連携させてWebアプリを作ります。
MVCモデルでいうと
・Model:ビジネスロジックを担うのは一般的なJavaクラス
・View:レスポンスとして返すのはJSPファイル
・Controller:リクエスト受けるのはサーブレットクラス
という感じで役割を分けます。
4. まとめ
サーブレットとJSPについて、それぞれどんなものかをまとめてみました。
まだJSPからサーブレットへの値の受け渡し方法とか、フォワードやリダイレクトなどなどありますが、今回はいったんここまで。
参考
- 小森裕介 「プロになるためのWeb技術入門 なぜ,あなたはWebシステムを開発できないのか」 技術評論社
- サーブレット/JSPの役割を理解する:https://www.atmarkit.co.jp/ait/articles/0301/09/news001.html