サーブレットとJSP間のデータは、データクラス、データBeanとして作成します。
データクラス、データBeanにはスコープという概念があり、データの有効範囲を設定できます。
このスコープを使い分けることで、効率よく通信を行うことができます。
 サーブレットにはセッション管理機能があるため、複数のHTTPプロトコルにまたがるデータや、複数のサーブレットで共通なデータを管理することもできます。
 データ変数は、setAttribute()メソッドで設定し、getAttribute()メソッドで参照します。
また、removeAttribute()メソッドで削除することもできます。
 以下のサンプルでは、それぞれのスコープ毎のアクセス例を示しています。
| 
// データ変数の作成と設定
インスタンス変数名 = new データクラス名();
オブジェクト.setAttribute("データ変数名", インスタンス変数名);
// データ変数の取得
データクラス名 インスタンス変数名 = (データクラス名)オブジェクト.getAttribute("データ変数名");
// データ変数の削除
オブジェクト.removeAttribute("データ変数名");
 | 
 データクラスをアプリケーション変数、セッション変数、リクエスト変数にそれぞれ代入し、以前のIDの値と現在のIDの値を表示しています。
 アプリケーション変数では、他のコンピュータやブラウザなどからアクセスがあると、直前にアクセスがあったIDの値が表示されます。
 セッション変数では、同じブラウザから再度アクセスがあると、以前のIDの値が表示されます。
 データクラスをアプリケーション変数、セッション変数、リクエスト変数に代入し、以前のIDの値と現在のIDの値を表示しています。
 jsp:usrBeanタグのscope属性の値に、それぞれのスコープを指定しています。
| Scope.jsp | 
|---|
| <%@ page contentType="text/html; charset=Shift_JIS" %> <jsp:useBean id="appData" class="jp.ash.example.ScopeData" scope="application" /> <jsp:useBean id="sesData" class="jp.ash.example.ScopeData" scope="session" /> <jsp:useBean id="reqData" class="jp.ash.example.ScopeData" scope="request" /> <html> <head><title>スコープのテスト</title></head> <body> <h1>スコープのテスト</h1> <h2>scope="application"</h2> <pre> oldId: <%= appData.oldId %> newId: <%= appData.newId %> </pre> <h2>scope="session"</h2> <pre> oldId: <%= sesData.oldId %> newId: <%= sesData.newId %> </pre> <h2>scope="request"</h2> <pre> newId: <%= reqData.newId %> </pre> </body> </html> | 
データクラスでは、以前のIDと現在のIDを設定、参照できるようになっています。 publicフィールドを直接、参照更新します。
| ScopeData.java | 
|---|
| 
// Copyright (C)1995-2002 ASH multimedia lab. http://ash.jp/
package jp.ash.example;
/** スコープテストデータ **/
public class ScopeData {
  /** oldID **/
  public String oldId;
  /** newID **/
  public String newId;
};
 | 
 サーブレットでは、アプリケーション変数は、ServletContextクラスにsetAttributeし、セッション変数は、HttpSessionクラスにsetAttributeし、リクエスト変数は、HttpServletRequestクラスにsetAttributeしています。
 既存の変数がある場合は、それを更新し、ない場合は新規に作成しています。
| ScopeServlet.java | 
|---|
| 
// Copyright (C)1995-2002 ASH multimedia lab. http://ash.jp/
package jp.ash.example;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
/** 変数のスコープテストサーブレット **/
public class ScopeServlet extends HttpServlet {
  public void service (HttpServletRequest req, HttpServletResponse res)
      throws ServletException, IOException {
    ServletContext sc = getServletConfig().getServletContext();
    HttpSession session = req.getSession();
    req.setCharacterEncoding("Shift_JIS");
    // パラメータの取得
    String id = req.getParameter("id");
    if (id == null) { id = "joe"; }
    // アプリケーション変数の取得、設定
    ScopeData appData = (ScopeData) sc.getAttribute("appData");
    if (appData == null) { appData = new ScopeData(); }
    sc.setAttribute("appData", appData);
    appData.oldId = appData.newId;
    appData.newId = id;
    // セッション変数の取得、設定
    ScopeData sesData = (ScopeData) session.getAttribute("sesData");
    if (sesData == null) { sesData = new ScopeData(); }
    session.setAttribute("sesData", sesData);
    sesData.oldId = sesData.newId;
    sesData.newId = id;
    // リクエスト変数の設定
    ScopeData reqData = new ScopeData();
    req.setAttribute("reqData", reqData);
    reqData.newId = id;
    // 画面の表示
    req.getRequestDispatcher("Scope.jsp").forward(req, res);
  }
}
 | 
サーブレットを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>
  <servlet>
    <servlet-name>ScopeServlet</servlet-name>
    <servlet-class>jp.ash.example.ScopeServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>ScopeServlet</servlet-name>
    <url-pattern>/ScopeServlet/*</url-pattern>
  </servlet-mapping>
</web-app>
 |