サーブレット+JSP+データクラス/Beanを使った、最も簡単なプログラムの作成方法について解説します。
最も簡単なプログラムのサンプルとして、「Hello World!」を表示します。
サーブレット、JSP、データクラス/Beanの関係は、オブジェクト指向のMVCモデルで表されます。
データクラス/Beanは、モデル(M)に相当し、データへのアクセスを行います。
データクラス/Beanは、getXXX、setXXXのメソッドを使ってアクセスしたり、フィールド(プロパティ)の参照などができます。
JSPは、ビュー(V)に相当し、データの表示方法を記述します。
JSPは、HTMLの中に変数などを記述することができます。
サーブレットは、コントローラ(C)に相当し、データクラス/BeanやJSPの制御を行います。
データクラス/Beanのスコープには、application、session、requestなどがありますが、ここでは、requestを使っています。
パッケージ名と、ソースファイルの格納ディレクトリは、以下のようにします。
パッケージ名 | jp.ash.webapp |
---|---|
JSPディレクトリ名 | /home/WebApp/src/ |
Javaソースディレクトリ名 | /home/WebApp/src/jp/ash/webapp/ |
サンプルプログラムの主なファイル構成です。
ファイル名 | ファイルの内容 |
---|---|
Hello.jsp | 「Hello World!」表示画面 |
HelloData.java | ユーザ情報オブジェクト |
HelloServlet.java | 制御用サーブレットソース |
build.xml | 生成方法を定義した、Ant用ビルドファイル |
以下のJSPファイルで画面イメージを定義します。 JSPファイルは基本的にHTMLで記述し、<%= 変数名 %>で、変数の参照を行います。 参照する変数の値は、HelloData.javaに定義されています。
Hello.jsp |
---|
<%@ page contentType="text/html; charset=Shift_JIS" %> <jsp:useBean id="hello" class="jp.ash.webapp.HelloData" scope="request" /> <html> <head> <title>Hello Webアプリケーション</title> </head> <body> <h1>Hello Webアプリケーション</h1> <p><%=hello.getMsg()%></p> </body> </html> |
サーブレットとJSP間のデータは、データBeanとして作成します。 JSPで、scope="request"を指定することで、同一リクエスト内で有効な変数となるため、サーブレットからJSPへデータを渡すことができます。 HelloDataでは、msgに格納した「HelloWorld!」データにgetMsg、setMsgのメソッドを使ってアクセスすることができます。
HelloData.java |
---|
package jp.ash.webapp; /** Helloデータ **/ public class HelloData { private String msg; /** HelloWorldの設定 **/ HelloData () { msg = "Hello World!"; } /** メッセージの取得 **/ public String getMsg () { return msg; } /** メッセージの設定 **/ public void setMsg (String msg) { this.msg = msg; } } |
画面定義用のJSPファイルと、データ設定用、制御用のJavaソースファイルは分けて作成します。
HelloServletでは、HelloDataを作成し、forwardによって、画面定義用のJSPファイル(Hello.jsp)を呼び出しています。
Hello.jspでは。getMsgメソッドを使って「HelloWorld!」を表示しています。
HelloServlet.java |
---|
package jp.ash.webapp; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; /** Helloサーブレット **/ public class HelloServlet extends HttpServlet { public void service (HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { req.setCharacterEncoding("Shift_JIS"); // Helloオブジェクトの作成 HelloData hello = new HelloData(); } req.setAttribute("hello", hello); // Hello画面の表示 req.getRequestDispatcher("Hello.jsp").forward(req, res); } } |
WEB-INF/web.xmlファイルに、サーブレットの登録を行います
web.xml |
---|
<?xml version="1.0" ?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <display-name>ASH Sample Web Application</display-name> <servlet> <servlet-name>HelloServlet</servlet-name> <servlet-class>jp.ash.webapp.HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloServlet</servlet-name> <url-pattern>/HelloServlet/*</url-pattern> </servlet-mapping> </web-app> |