3.10.2 サーブレットからのJSPの呼び出し

MVCモデルをポートレット開発に適用して,Controllerをサーブレット,ViewをJSPで開発する場合,サーブレットからJSPを呼び出す必要があります。ここでは,サーブレットからJSPを呼び出す例を示します。

JSPを呼び出すには,RequestDispatcher#includeを使用します。サーブレットをポートレットのエントリポイントとして登録する場合には,doPostがdoGetを呼び出すようにします。

サーブレットからJSPを呼び出す例を次に示します。

package mydomain;
import javax.servlet.*;
import javax.servlet.http.*;
import jp.co.hitachi.soft.portal.portlet.PortletURI;
import jp.co.hitachi.soft.portal.portlet.PortletUtils;
import jp.co.hitachi.soft.portal.portlet.beans.PortletInfoBean;

public class Controller extends HttpServlet {
 /*
  * JSPの相対パスをコンテキスト内絶対パスに変換
  **/
 private String getUrl(HttpServletRequest req, String url) {
   String current =
     (String)req.getAttribute("javax.servlet.include.servlet_path");
   return current.substring(0, current.lastIndexOf('/')+1) + url;
 }

 public void doGet(HttpServletRequest req, HttpServletResponse res) {
   String uri = "error.jsp";
   try {
     PortletInfoBean pInfo = new PortletInfoBean();
     pInfo.initBean(req);
     PortletInfoBean.Mode mode = pInfo.getMode();

     if (mode == PortletInfoBean.Mode.DEFAULT) {
       /** サマリ画面用業務ロジック呼び出し **/
       
       // サマリ画面用JSPのパス取得
       uri = getUrl(req, "summary.jsp");
     } else if (mode == PortletInfoBean.Mode.MAXIMIZE) {
       /** 最大化画面用業務ロジック呼び出し **/

       // 最大化画面用JSPのパス取得
       uri = getUrl(req, "main.jsp");
     }
     // includeを用いたView(JSP)の呼び出し
     getServletContext().getRequestDispatcher(uri).include(req, res);
   } catch (Exception e) {
       // エラーメッセージ出力
   }
 }

 public void doPost(HttpServletRequest req, HttpServletResponse res) {
   doGet(req, res);
 }

}