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
オブジェクトを返します。