ITエンジニア日記 ~NO SKILL, NO LIFE~

学んだ技術や、気になることをアウトプットしていきます。プログラミング, インフラ, etc...

サーブレット / 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. JSPJava 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からサーブレットへの値の受け渡し方法とか、フォワードやリダイレクトなどなどありますが、今回はいったんここまで。

参考