1.1 JSP の概要

サーブレットを作成するには、命令型宣言型の2 つの一般的な方法があります。最初のものについてはすでに説明しました。これは実際にはサーブレットです。2 つ目は JSP (Java Server Pages) と呼ばれるもので、ここで詳しく説明します。

サーブレット JSP の例:


<html> 
    <body> 
        <% out.print(2*5); %> 
    </body> 
 </html> 

私たちが慣れ親しんでいる古典的なサーブレットとはあまり似ていませんね。これは本当です。JSP は、Java コードが挿入された HTML ページです (緑色で強調表示されています)

ご存知のとおり、サーブレットに大量の Java コードがあり、HTML コードが少ない場合は、従来のサーブレットを使用するほうが快適です。しかし、サーバーによって数行しか変更されない大きな HTML ページが必要な場合はどうすればよいでしょうか?

この場合、最も簡単なのは、この HTML ページを作成し、その中でサーバー上の Java コードを何らかの方法で実行することです。

1.2 JSPのコンパイル

別の例を見てみましょう。


<html> 
  <body> 
    <%
        double num = Math.random();
        if (num > 0.95) {
     %>
         <h2>You are lucky, user!</h2><p>(<%= num %>)</p>
    <%
        }
    %> 
  </body> 
</html> 

乱数を取得し、それが 0.95 より大きい場合は、「幸運です、ユーザー!」というテキストを出力します。

ここでは Java コードが青で強調表示されています。通常 (強調表示されていない) - HTML コード、および赤色 - サービス タグ。Java コードがどこにあるか、HTML がどこにあるかを理解するのに役立ちます。

何かおかしいことに気づきましたか?閉じ中括弧は"}"別の にあります"code block"。このようなコードを記述する正しい方法は何でしょうか? それはどのように機能するのでしょうか?

答えはとても簡単です:)

Web サーバーは、JSP ファイルを見つけた後、それをクラシック サーブレットにコンパイルします。上記の JSP ページに基づいて、このサーブレットが生成されます。

public class HelloServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response)  throws Exception {
    PrintWriter out = response.getWriter();
    out.print("<html> ");
    out.print("<body>");
        double num = Math.random();
        if (num > 0.95) {
            out.print("<h2>You're lucky user! </h2><p>(" + num + ")</p>");
        }
    out.print("</body>");
    out.print("</html>");
    }
}

Web コンテナはサーブレット コードを生成したところです。HTML はテキストに変わり、挿入された Java コードは通常の Java コードになりました。