Servlet、JSP、JavaBeansの連携
このページでは、Servlet、JSP、JavaBeansの連携方法について解説します。
ServletとJavaBeansの連携
JSPとJavaBeansの連携方法については、前ページで解説しましたため、ここではServletとJavaBeansの連携方法について解説します。
ServletもJavaBeansもJavaプログラムであるため、連携方法は他のJavaプログラムの連携と変わりません。Servletの中で、JavaBeansのオブジェクトを生成し、オブジェクトを通してJavaBeansのメソッドを呼び出すことで行います。他のJavaプログラムとの違いはWebアプリケーションのスコープを意識する必要があることです。スコープを意識することで、Servlet、JSP、JavaBeans間で連携が図れます。
Servletでスコープを意識したデータ管理を行うには、各スコープのsetAttributeメソッドや、getAttributeメソッドを使用します。それらのメソッドを使用してJavaBeansオブジェクトの管理を行うことにより、Servlet、JSP、JavaBeans間で各スコープにおける連携を行えます。Servletのスコープの詳細はJavaの道:Servlet(スコープ)を参照してください。
Servletの例
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
//JavaBeansのConnectBeanクラスが属するパッケージをインポート
import Beans.*;
public class ConnectServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
String userName = req.getParameter("userName");
//ConnectBeanクラスのオブジェクト reqObjectを宣言
ConnectBean reqObject = null;
-----------------------------
//req.getAttributeメソッドで、requestスコープの
//reqObjectオブジェクトを取得
reqObject = (ConnectBean)req.getAttribute("reqObject");
if (reqObject == null) {
//reqObjectオブジェクトが生成されていない場合、生成。
//生成されたreqObjectオブジェクトをreq.setAttribute
//メソッドで、requestスコープとして保存。
reqObject = new ConnectBean();
req.setAttribute("reqObject", reqObject);
}
//reqObjectオブジェクトを通して、JavaBeansのアクセスメソッド
//setUserNameを呼び出し、userNameデータを保存
reqObject.setUserName(userName);
-----------------------------
}
}
連携例
Servlet、JSP、JavaBeansの連携例について解説します。この連携例はMVC2開発モデルに沿っています。連携例のプログラム動作は以下のようになります。
- クライアントからのリクエストをServletで受け付けます。
- ServletとJavaBeansの連携によりクライアントからのデータをJavaBeansに保存します。
- ServletからJSPを呼び出します。
- JSPとJavaBeansの連携によりJavaBeansに保存されたデータをJSPから呼び出し、クライアントに表示します。
【ConnectServlet.java】クライアントからのリクエストを受付、リクエストデータをJavaBeansに保存、該当のJSPを呼び出します。
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import Beans.*;
public class ConnectServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
//(1)リクエストデータuserNameをgetParameterメソッドで取得します。
String userName = req.getParameter("userName");
//(2)JavaBeansのオブジェクト変数を宣言します。
ConnectBean reqObject = null;
ConnectBean sesObject = null;
ConnectBean appObject = null;
//(3)req.getAttributeメソッドで、requestスコープのreqObject
// オブジェクトを取得します。
// reqObjectオブジェクトが生成されていない場合、生成します。
// 生成されたreqObjectオブジェクトをreq.setAttributeメソッド
// で、requestスコープとして保存します。
// reqObjectオブジェクトを通して、JavaBeansのアクセスメソッド
// を呼び出し、userNameデータを保存します。
reqObject = (ConnectBean)req.getAttribute("reqObject");
if (reqObject == null) {
reqObject = new ConnectBean();
req.setAttribute("reqObject", reqObject);
}
reqObject.setUserName(userName);
//(4)session.getAttributeメソッドで、sessionスコープのsesObject
// オブジェクトを取得します。
// sesObjectオブジェクトが生成されていない場合、生成します。
// 生成されたsesObjectオブジェクトをsession.setAttributeメソッド
// で、 sessionスコープとして保存します。
// sesObjectオブジェクトを通して、JavaBeansのアクセスメソッド
// を呼び出し、userNameデータを保存します。
HttpSession session = req.getSession();
sesObject = (ConnectBean)session.getAttribute("sesObject");
if (sesObject == null) {
sesObject = new ConnectBean();
session.setAttribute("sesObject", sesObject);
}
sesObject.setUserName(userName);
//(5)sc.getAttributeメソッドで、applicationスコープのappObject
// オブジェクトを取得します。
// appObjectオブジェクトが生成されていない場合、生成します。
// 生成されたappObjectオブジェクトをsc.setAttributeメソッドで、
// applicationスコープとして保存します。
// appObjectオブジェクトを通して、JavaBeansのアクセスメソッド
// を呼び出し、userNameデータを保存します。
ServletContext sc = getServletContext();
appObject = (ConnectBean)sc.getAttribute("appObject");
if (appObject == null) {
appObject = new ConnectBean();
sc.setAttribute("appObject", appObject);
}
appObject.setUserName(userName);
//(6)ServletからJSPを呼び出します。JSPを呼び出す際はrequestスコ
// ープのデータを引き継ぐ必要からforwardメソッドを使用します。
RequestDispatcher rd
= req.getRequestDispatcher("./connectJsp.jsp");
rd.forward(req, res);
}
}
【ConnectBean.java】Servletと連携しクライアントからのデータを保存し、JSPと連携しJSPから保存したデータを参照します。
package Beans;
public class ConnectBean {
//(1)データを保存する変数を宣言します。
private String userName;
//(2)変数にデータを保存するsetメソッドを宣言します。
public void setUserName(String userName) {
this.userName = userName;
}
//(3)データを参照するgetメソッドを宣言します。
public String getUserName() {
return this.userName;
}
}
【connectJsp.jsp】JavaBeansからデータを参照し、表示します。
<%@ page import="Beans.*" %>
<%-- (1)各スコープのJavaBeansオブジェクトを生成します。 --%>
<jsp:useBean id="reqObject" class="Beans.ConnectBean"
scope="request" />
<jsp:useBean id="sesObject" class="Beans.ConnectBean"
scope="session" />
<jsp:useBean id="appObject" class="Beans.ConnectBean"
scope="application" />
<html>
<body>
<%-- (2)requestスコープを持つ、JavaBeansオブジェクトreqObjectを
通して、JavaBeansに保存されたデータを参照します。 --%>
equestスコープのuserName:
<jsp:getProperty name="reqObject" property="userName" />
<br><br>
<%-- (3)sessionスコープを持つ、JavaBeansオブジェクトsesObjectを
通して、JavaBeansに保存されたデータを参照します。 --%>
sessionスコープのuserName:
<jsp:getProperty name="sesObject" property="userName" />
<br><br>
<%-- (4)applicationスコープを持つ、JavaBeansオブジェクトappObject
を通して、JavaBeansに保存されたデータを参照します。 --%>
applicationスコープのuserName:
<jsp:getProperty name="appObject" property="userName" />
<br><br>
</body>
</html>
【実行結果】Servletプログラムにデータを渡すため、URLで引き渡すデータを指定してServletプログラムにアクセスします。Servlet・JSPプログラムの実行方法に関しては、Javaの道:Tomcat(プログラム配置・実行)を参照してください。
URL:http://localhost:8080/serTest/ConnectServlet?userName=java
※ ConnectServletプログラムにパラメータ名(userName)、パラメータ値(java)のデータを引き渡しています。
※ ConnectServletプログラムにパラメータ名(userName)、パラメータ値(java)のデータを引き渡しています。

3ServletとJavaBeansの連携