4.7.Servlet之間的通訊 從頁面流程圖上可以看到,是由多個頁面實現從表單提交到創建SessionBean再到多楨頁面實現XML樹的流程,在這里流程中多個頁面之間的通訊是由Session完成的. 首先在表單頁面提交數據庫查詢語句,由一個中轉Servlet完成生成結果集,把SessionBean的句柄放入Session中,再跳轉到多楨頁面,由XMLServlet從Session中獲得SessionBean的句柄,由此得到結果集,生成含有層次關系的XML. 當點擊生成的XML樹時,需要把點擊的節點對象的詳細信息顯示在另外一個楨內,這兩個楨其實對應的也是兩個Servlet,它們之間的通信,部分采用Session,部分采用cookie.顯示節點詳細信息的楨的主體是仍是Servlet生成的XML,和生成樹狀XML的Servlet完全一樣,要關聯的顯示被點擊節點的詳細信息,是在于XSL模版的節點對象變量傳遞,如何在XSl中實現詳細顯示已在前面闡明,這里對其節點對象變量傳遞進行描述. 還有節點后出現的修改楨,其變化的實質類于詳細顯示節點信息的楨,主要的區別在XSL的模版HTML實現一節有所變化. 主要針對中轉Servlet的實現的過程作詳細描述: public class RefreshServlet extends HttpServlet { PrintWriter out; ResultEdit re; private static final String CONTENT_TYPE = "text/html"; private Object ref; private static String querySQL = null; private static String HostIP = null; private static String HostPort = null;
public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try{ response.setContentType(CONTENT_TYPE); out = response.getWriter(); /**判斷Session是否存在,不存在則新建一個Session*/ HttpSession session=request.getSession(true); /**獲得提交的表單中的查詢語句,和應用服務器的IP和Port,保存到相應的變量中*/ if (request.getMethod().equals("POST")){ querySQL = request.getParameter("sql"); HostIP = request.getParameter("ip"); HostPort = request.getParameter("port"); /**調用getInitialContext(ip,port)方法得到應用服務器的一個初始容器*/ Context ctx =getInitialContext(HostIP,HostPort); /**從容器中得到SessionBean*/ ref = ctx.lookup("ResultEdit"); /**獲得SessionBean的Home接口*/ ResultEditHome home = (ResultEditHome) PortableRemoteObject.narrow(ref, ResultEditHome.class); /**創建Home接口的實例*/ re = home.create(); /**調用接口的中定義的方法*/ re.setRowSet(querySQL); /**在Session中保存SessionBean的Home接口的句柄*/ session.setAttribute("ResultEditHandle",re.getHandle()); } /**判斷session中是否存在SessionBean的Home接口的句柄,有則準備跳轉到生成XML樹的Servlet,否則跳轉到表單提交頁面*/ if (session.getAttribute("ResultEditHandle")!=null){ out.println("<html><head><title>Enter</title><META HTTP-EQUIV='Refresh' CONTENT='2;url=/xmltree/index.html'/></head>"); out.println("<body>"); out.println("<p><p><p><center>Refresh......go to XMLServlet</center></p></p></p></body></html>"); } … 在生成XML樹的Servlet中也含有類似的代碼,主要的功能是判斷Session中是否存在已有的SessionBean的Home接口的句柄,有則讀取該句柄,由此獲得SessionBean中的結果集,生成和結果集對應的XML,相關的代碼請參見附錄中的源代碼一節.
5.需要改進的地方 5.1.不允許存在不含子節點的樹杈,這樣會使一些剛構造但尚未添加子葉子和子樹杈的樹杈,不能以節點的形式顯示在界面上,只有添加了子節點才會顯示出來 5.2.在實現上,每一個節點,不管是樹杈或是葉子,它都只有一個父親,如果多個模塊中都存在功能一致,操作一致,界面一致的元素,那么在不同模塊的樹型結構里面就需要不同的節點記錄。
|