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);
}
}