Javaを使用したWebプログラミングにおいて、ServletとJSP(JavaServer Pages)は非常に重要な技術です。Servletは、サーバーサイドのJavaプログラムであり、HTTPリクエストを処理し、レスポンスを生成する役割を担います。一方、JSPはHTMLの中にJavaコードを埋め込むことができるテンプレートエンジンで、動的なWebページの生成に使用されます。本記事では、ServletとJSPの基本を理解し、実際に簡単なWebアプリケーションを作成する流れを詳しく解説します。
Servletとは?
ServletはJava EE(Enterprise Edition)で提供されるサーバーサイドプログラミングの技術で、主にHTTPリクエストの処理を行います。Servletは`HttpServlet`クラスを継承し、`doGet`や`doPost`メソッドをオーバーライドすることで、GETリクエストやPOSTリクエストに応じた処理を行います。
import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class HelloWorldServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); response.getWriter().println("Hello, World!
"); } }
この簡単な例では、`HelloWorldServlet`というServletを定義しています。`doGet`メソッド内でHTTPリクエストを処理し、`response.getWriter().println`を使用してレスポンスとしてHTMLコンテンツ(「Hello, World!」)を返しています。Servletは、Webサーバー上で実行され、リクエストに応じて動的にコンテンツを生成することができます。
JSPとは?
JSP(JavaServer Pages)は、HTMLファイルの中にJavaコードを埋め込むことができる技術です。主にHTMLテンプレートとして使用され、動的なWebページを生成します。Servletと組み合わせて使用することで、プレゼンテーションとビジネスロジックを分離することができ、Webアプリケーションの構造が整理されます。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>Hello JSP Hello, JSP!
現在の時刻: <%= new java.util.Date() %>
このJSPファイルでは、Javaコードを`<%= %>`タグ内に埋め込んで、現在の時刻を表示しています。JSPはHTMLとしてブラウザに表示されますが、サーバー側で動的にコンテンツを生成することができます。例えば、現在時刻やユーザー入力に基づいて異なるコンテンツを表示することが可能です。
ServletとJSPの連携
通常、Servletはビジネスロジックを処理し、その結果をJSPに渡して表示させる形で使用されます。これにより、ビジネスロジックとプレゼンテーションの分離が実現され、コードの保守性が向上します。以下の例では、Servletで処理したデータをJSPに渡して表示しています。
Servletコード: データをJSPに転送
import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.RequestDispatcher; public class WelcomeServlet extends HttpServlet { @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String name = request.getParameter("name"); request.setAttribute("userName", name); RequestDispatcher dispatcher = request.getRequestDispatcher("welcome.jsp"); dispatcher.forward(request, response); } }
このServletでは、フォームから送信されたユーザーの名前を取得し、それをJSPに転送しています。`RequestDispatcher`を使用して、`welcome.jsp`にリクエストを転送し、`request.setAttribute`でデータを設定しています。
JSPコード: データを表示
<%@ page contentType="text/html;charset=UTF-8" language="java" %>Welcome Page Welcome, <%= request.getAttribute("userName") %>!
JSPファイルでは、Servletから転送された`userName`属性を`<%= request.getAttribute("userName") %>`で取得し、HTMLとして表示しています。これにより、ユーザーが入力した名前が動的に表示されるWebページが作成されます。
ServletとJSPを使ったフォーム処理の例
次に、フォームからのユーザー入力をServletで処理し、その結果をJSPで表示する例を見ていきます。フォームから名前を入力し、それをServletで処理してJSPに渡すという基本的なフローを実装します。
HTMLフォーム
このHTMLフォームでは、ユーザーに名前を入力してもらい、POSTリクエストを`/welcome`というURLに送信します。次に、Servletがこのリクエストを処理します。
Servletコード: フォームデータを処理
import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.RequestDispatcher; public class WelcomeServlet extends HttpServlet { @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String name = request.getParameter("name"); request.setAttribute("userName", name); RequestDispatcher dispatcher = request.getRequestDispatcher("welcome.jsp"); dispatcher.forward(request, response); } }
JSPコード: 結果を表示
<%@ page contentType="text/html;charset=UTF-8" language="java" %>Welcome Page こんにちは、<%= request.getAttribute("userName") %>さん!
この例では、ユーザーがフォームに入力した名前をServletが処理し、JSPに渡して表示しています。このように、Servletでロジックを処理し、JSPで結果を表示するという流れは、Java Webアプリケーションにおける典型的なパターンです。
まとめ
ServletとJSPを使用することで、Javaを利用した強力なWebアプリケーションを構築できます。Servletはリクエスト処理とビジネスロジックの実装に適しており、JSPはその結果をユーザーに提示するためのテンプレートとして利用されます。この2つの技術を連携させることで、効率的でメンテナンス性の高いWebアプリケーションが実現します。