複数セッション

XML グラファーは、サーブレットの単一マネージャー・ビューを作成する非常に簡単な例です。これは、サーブレット (つまりすべてのクライアント) へのすべての呼び出しは同じビューを見ているということです。これは、すべてのクライアントに対して同じデータが使用される場合は問題ありませんが、アプリケーションによっては、例えばユーザーがグラフィック表示を編集できるようにして、各クライアントに対してビューとマネージャーを持つようにする場合があります。この場合、HTTP セッションの概念を使用することができます。ビューとマネージャーを作成し、セッションのパラメーターとして保存できます。
次に、セッションを使用した XML グラファー・サーブレットを少々変更したバージョンを紹介します。
package demo.xmlgrapher.servlet;
import javax.servlet.*;
import javax.servlet.http.*;
import java.net.*;
import ilog.views.*;
import ilog.views.servlet.*;
import demo.xmlgrapher.*;

public class XmlGrapherServlet extends IlvManagerServlet
{
  String xmlfile;
  
  public void init(ServletConfig config) 
       throws ServletException 
  {
    
    xmlfile = config.getInitParameter("xmlfile");
    if (xmlfile == null) 
      xmlfile = config.getServletContext().
                   getRealPath("/data/world.xml");
    setVerbose(true);
  }

  protected void prepareSession(HttpServletRequest request)
  {
    HttpSession session = request.getSession();
    if (session.isNew()) {
      
      XmlGrapher xmlGrapher = new XmlGrapher();
      try {
        xmlGrapher.setNetwork(new URL("file:" + xmlfile));
      } catch (MalformedURLException ex) {
      }
      session.putValue("IlvManagerView", xmlGrapher);
    }
  }

  public IlvManagerView getManagerView(HttpServletRequest request) 
       throws ServletException
  {
    HttpSession session = request.getSession(false);
    if (session!= null)
      return (IlvManagerView)session.getValue("IlvManagerView");
    else 
      throw new ServletException("session problem");
  }
 
  protected float getMaxZoomLevel(HttpServletRequest request,
                                  IlvManagerView view) 
  {
    return 30;
  }
}
init メソッドは XmlGrapher オブジェクトを作成しません。代わりに、prepareSession メソッド (デフォルトの空実装がある) を上書きして、HTTP セッションを取得します。これが新規のセッションである場合は、XmlGrapher オブジェクトを作成し、セッションのパラメーターとして保存します。これで、getManagerView メソッドはセッションに保存された XmlGrapher オブジェクトを返します。