第18章

サーブレットの操作

この章では、exteNd Directorアプリケーションでサーブレットを使用する方法について説明します。この節は、次のトピックで構成されています。

 
Top of page

サーブレットおよびexteNd Directorアプリケーションについて

exteNd Directorアプリケーションは、カスタムサーブレットを含むことができます。このバージョンのexteNd Directorは、Servlet 2.2または2.3仕様に準拠するサーブレットをサポートします。作成するサーブレットは、ターゲットアプリケーションサーバでサポートされる仕様に準拠することが必要です。

サーブレットの配置場所   サーブレットは、Webアプリケーションリソースを含むWARファイルにパッケージする必要があります。このWARは通常、exteNd Directorリソースの内部リソースセットを使用するように設定されます。サーブレットは、WEB-INF/classesディレクトリ、またはWAR内のWEB-INF/libディレクトリに保存されたJARに配置することが必要です。

 
Top of page

サーブレットでのexteNd Director APIの使用

カスタムサーブレットは、exteNd DirectorAPIのメソッドにアクセスできます。 サーブレットはこれらのメソッドを使用して、ポータルページやexteNd Directorポートレットを表示したり、ルールを起動してContent Managementサブシステムのドキュメントにアクセスしたりできます。

例   たとえば、exteNd Directorポータルページをサーブレットで使用するとします。 この場合、ポータル集約コントローラにページを表示するように指示するいくつかのJavaコードを追加する必要があります。 必要な基本手順は、次のとおりです。

  1. HttpServletRequest、HttpServletResponse、およびServlet Contextに基いてPortalコンテキストオブジェクトを作成します。

  2. Portal Managerオブジェクトを使用して、ポータルに定義されるページについての情報を提供するオブジェクトのアレイを取得します。

    注記:   以下の例では、オブジェクトのアレイは、すべてのユーザのページについての情報を含みます。 ただし、APIは、ユーザによりリストを制限するときに使用できるメソッドを提供します。

  3. Portal Aggregration Controllerと通信して、要求ページを含むポータル応答を生成します。

この実行方法を示すJavaコードの例は、次のとおりです。

  package com.novell.afw.portal.aggregation;
  
  import com.sssw.portal.factory.EboFactory;
  import com.sssw.portal.api.EbiPortalContext;
  import com.sssw.portal.api.EbiSharedPageInfo;
  
  import javax.servlet.ServletException;
  import javax.servlet.http.HttpServlet;
  import javax.servlet.http.HttpServletRequest;
  import javax.servlet.http.HttpServletResponse;
  
  public class SampleServlet extends HttpServlet {
  
      public void init() throws ServletException {
      }
  
      protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException {
          callService(request, response);
      }
  
      protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException {
          callService(request, response);
      }
  
      /**
       * Service a HTTP request
       */
      protected void callService(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException {
  
          try {
  
              // Create a Portal Context based on the HttpServletRequest, HttpServletResponse and Servlet Context
              // Portal context object is used to pass useful information around
              EbiPortalContext portalContext = com.sssw.portal.factory.EboFactory.createPortalContext(request, response, this.getServletContext());
  
              // Determine if a page was selected from the list of available pages
              String pageName = request.getParameter("pageName");
  
              if (pageName == null) {
  
                  // No page name was supplied - show the user the available pages (reports) they have access to
                  StringBuffer pageBuffer = new StringBuffer();
  
                  pageBuffer.append("<html>\n");
                  pageBuffer.append("<head>\n");
                  pageBuffer.append("<title>Available Reports</title>\n");
                  pageBuffer.append("<link type=\"text/css\" rel=\"stylesheet\" href=\"http://localhost:8080/Director/resource/portal-theme/DottedBorder/theme.css\">\n");
                  pageBuffer.append("</head>\n");
                  pageBuffer.append("<body>\n");
  
                  pageBuffer.append("<form id=\"reports\" method=\"post\" action=\"\">\n");
                  pageBuffer.append("  <div style=\"padding:5px;\">Available Reports:</div>\n");
                  pageBuffer.append("  <select name=\"pageName\" style=\"height:150;width:290;\" size=\"10\">\n");
  
                  // Get a list of shared pages from the Portal Manager
                  EbiSharedPageInfo[] pageInfos = EboFactory.getPortalManager(portalContext).getSharedPageInfoList(portalContext);
  
                  for (int i=0; i<pageInfos.length;i++) {
                      pageBuffer.append("      <option>" + pageInfos[i].getPageName() + "</option>\n");
                  }
  
                  pageBuffer.append("  </select>\n");
                  pageBuffer.append("  <p/>\n");
                  pageBuffer.append("  <input value=\"Show Report\" type=\"submit\">\n");
                  pageBuffer.append("</form>\n");
                  pageBuffer.append("</body>\n");
                  pageBuffer.append("</html>\n");
  
                  response.setContentType("text/html");
  
                  response.getWriter().print(pageBuffer.toString());
  
              } else {
  
                  // A report (page) was selected from the list
                  // Use the Portal\qs Aggregation Controller to display the selected report (shared page)
                  EboPortalAggregationController.getController().renderPortalResponse(portalContext, null, pageName);
  
              }
  
          } catch (Exception e) {
              e.printStackTrace();
              throw new ServletException(e);
          }
      }
  
      /**
       * the servlet is being taken out of service, clean up and free handles
       */
      public void destroy() {
  
      }
  }

サーブレットをURLパターンにマッピングするために、web.xmlに追加する必要のある行は、次のとおりです。 このサーブレットは、URLパターン/reports/*でリスンします。

  <servlet>
   <servlet-name>SampleServlet</servlet-name>
   <display-name>Sample Servlet</display-name>
   <description>Sample Servlet demostrating creating a custom servlet with hooks into the portal.</description>
   <servlet-class>
    com.novell.afw.portal.aggregation.SampleServlet</servlet-class>
  </servlet>
  
  <servlet-mapping>
   <servlet-name>SampleServlet</servlet-name>
   <url-pattern>/reports/*</url-pattern>
  </servlet-mapping>




Copyright © 2004 Novell, Inc. All rights reserved. Copyright © 1997, 1998, 1999, 2000, 2001, 2002, 2003 SilverStream Software, LLC. All rights reserved.  more ...