サーブレット+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>
|