All Downloads are FREE. Search and download functionalities are using the official Maven repository.

nablarch.fw.web.servlet.ServletExecutionContext Maven / Gradle / Ivy

The newest version!
package nablarch.fw.web.servlet;

import java.util.Map;

import jakarta.servlet.ServletContext;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;

import nablarch.core.util.annotation.Published;
import nablarch.fw.ExecutionContext;
import nablarch.fw.web.HttpMethodBinding;
import nablarch.fw.web.servlet.NablarchHttpServletRequestWrapper.HttpSessionWrapper;

/**
 * サーブレットコンテナ上でのリクエスト処理における実行コンテキスト
 */
public class ServletExecutionContext extends ExecutionContext {
    /**
     * コンストラクタ。
     * @param servletReq サーブレットリクエスト
     * @param servletRes サーブレットレスポンス
     * @param servletCtx サーブレットコンテキスト
     */
    public ServletExecutionContext(HttpServletRequest  servletReq,
                                   HttpServletResponse servletRes,
                                   ServletContext      servletCtx) {
        this.servletReq = new NablarchHttpServletRequestWrapper(servletReq);
        this.servletRes = servletRes;
        this.servletCtx = servletCtx;
        setMethodBinder(new HttpMethodBinding.Binder());

        request = new HttpRequestWrapper(this.servletReq);
    }

    /** サーブレットリクエスト */
    private final NablarchHttpServletRequestWrapper servletReq;
    /** サーブレットレスポンス */
    private final HttpServletResponse servletRes;
    /** サーブレットコンテキスト */
    private final ServletContext servletCtx;
    /** HTTPリクエスト */
    private final HttpRequestWrapper request;

    /**
     * HTTPリクエストオブジェクトを返す。
     * @return HTTPリクエストオブジェクト
     */
    public HttpRequestWrapper getHttpRequest() {
        return this.request;
    }

    /**
     * サーブレットリクエストを返す。
     * @return サーブレットリクエスト
     */
    @Published(tag = "architect")
    public NablarchHttpServletRequestWrapper getServletRequest() {
        return this.servletReq;
    }

    /**
     * サーブレットレスポンスを返す。
     * @return サーブレットレスポンス
     */
    @Published(tag = "architect")
    public HttpServletResponse getServletResponse() {
        return this.servletRes;
    }

    /**
     * サーブレットコンテキストを返す。
     * @return サーブレットコンテキスト
     */
    public ServletContext getServletContext() {
        return this.servletCtx;
    }


    /** {@inheritDoc} */
    @Override
    public ExecutionContext invalidateSession() {
        HttpSession session = servletReq.getSession(false);
        if (session != null) {
            session.invalidate();
        }
        return this;
    }

    /** {@inheritDoc} */
    @Override
    public boolean isNewSession() {
        return servletReq.getSession(true).isNew();
    }

    /**
     * {@inheritDoc}
     * 

* HttpSessionの生成を抑制したい場合には、本メソッドで判定する。 */ @Override public boolean hasSession() { return servletReq.getSession(false) != null; } @Override public Map getRequestScopeMap() { return servletReq.getScope(); } @Override public ExecutionContext setRequestScopeMap(Map scope) { servletReq.setScope(scope); return this; } /** * {@inheritDoc} *

* 本メソッドではHttpSessionが存在しない場合、新規に作成する。
* HttpSessionを生成したくない場合には{@link #hasSession()}にて判定すること。 * * @see #getSessionScopedVar(String) * @see #hasSession() */ @Override public Map getSessionScopeMap() { return servletReq.getSession().getScope(); } /** * {@inheritDoc} *

* 本メソッドではHttpSessionがない場合は、生成せずにnullを返却する。 * * @see #getSessionScopeMap() */ @Override public T getSessionScopedVar(String varName) throws ClassCastException { if(!hasSession()) { return null; } return super.getSessionScopedVar(varName); } @Override public ExecutionContext setSessionScopeMap(Map scope) { servletReq.getSession().setScope(scope); return this; } /** * サーブレットコンテナが提供する{@link HttpSession}を取得する。 * 明示的に{@link HttpSession}を使用したい場合は、本メソッドから取得する。 * * @param create セッションを生成するかどうか * @return {@link HttpSession} * @see HttpServletRequest#getSession(boolean) */ @Published(tag = "architect") public HttpSession getNativeHttpSession(boolean create) { HttpSessionWrapper wrapper = servletReq.getSession(create); return wrapper == null ? null : wrapper.getDelegate(); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy