public class InternalResourceView extends AbstractUrlBasedView
RequestDispatcher
EE を使用してリクエストを指定されたリソース URL に転送します。 このビューの URL は、RequestDispatcher の forward
または include
メソッドに適した、Web アプリケーション内のリソースを指定することになっています。
すでに含まれているリクエスト内またはすでにコミットされているレスポンス内で動作している場合、このビューは転送ではなくインクルードにフォールバックします。これは、ビューをレンダリングする前に response.flushBuffer()
(レスポンスをコミットする)を呼び出すことによって実施できます。
DispatcherServlet コンテキスト定義の観点から見ると、InternalResourceViewResolver
の一般的な使用箇所は次のようになります。
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/"/> <property name="suffix" value=".jsp"/> </bean>ハンドラーから返されるすべてのビュー名は、デフォルトでこのビュークラスを使用して JSP リソースに変換されます (例: "myView" -> "/WEB-INF/jsp/myView.jsp")。
RequestDispatcher.forward(javax.servlet.ServletRequest, javax.servlet.ServletResponse)
EE, RequestDispatcher.include(javax.servlet.ServletRequest, javax.servlet.ServletResponse)
EE, ServletResponse.flushBuffer()
EE, InternalResourceViewResolver
, JstlView
DEFAULT_CONTENT_TYPE
logger
PATH_VARIABLES, RESPONSE_STATUS_ATTRIBUTE, SELECTED_CONTENT_TYPE
コンストラクターと説明 |
---|
InternalResourceView() Bean として使用するコンストラクター。 |
InternalResourceView(StringSE url) 指定された URL で新しい InternalResourceView を作成します。 |
InternalResourceView(StringSE url, boolean alwaysInclude) 指定された URL で新しい InternalResourceView を作成します。 |
修飾子と型 | メソッドと説明 |
---|---|
protected void | exposeHelpers(HttpServletRequestEE request) 各レンダリング操作に固有のヘルパーを公開します。 |
protected RequestDispatcherEE | getRequestDispatcher(HttpServletRequestEE request, StringSE path) フォワード / インクルードに使用する RequestDispatcher を取得します。 |
protected boolean | isContextRequired() ApplicationContext は、InternalResourceView には厳密には必要ありません。 |
protected StringSE | prepareForRendering(HttpServletRequestEE request, HttpServletResponseEE response) レンダリングの準備をし、転送する(または含める)リクエストディスパッチャーのパスを決定します。 |
protected void | renderMergedOutputModel(MapSE<StringSE, ObjectSE> model, HttpServletRequestEE request, HttpServletResponseEE response) 指定されたモデルの内部リソースをレンダリングします。 |
void | setAlwaysInclude(boolean alwaysInclude) ビューに転送するのではなく、常にビューを含めるかどうかを指定します。 |
void | setPreventDispatchLoop(boolean preventDispatchLoop) 現在のハンドラーパスへのディスパッチを明示的に禁止するかどうかを設定します。 |
protected boolean | useInclude(HttpServletRequestEE request, HttpServletResponseEE response) RequestDispatcher の include または forward メソッドのどちらを使用するかを決定します。 |
afterPropertiesSet, checkResource, getUrl, isUrlRequired, setUrl, toString
addStaticAttribute, createMergedOutputModel, createRequestContext, createTemporaryOutputStream, exposeModelAsRequestAttributes, formatViewName, generatesDownloadContent, getAttributesMap, getBeanName, getContentType, getRequestContextAttribute, getRequestToExpose, getStaticAttributes, isExposePathVariables, prepareResponse, render, setAttributes, setAttributesCSV, setAttributesMap, setBeanName, setContentType, setExposeContextBeansAsAttributes, setExposedContextBeanNames, setExposePathVariables, setRequestContextAttribute, setResponseContentType, writeToResponse
getServletContext, getTempDir, getWebApplicationContext, initApplicationContext, initServletContext, setServletContext
getApplicationContext, getMessageSourceAccessor, initApplicationContext, obtainApplicationContext, requiredContextClass, setApplicationContext
cloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, waitSE, waitSE, waitSE
public InternalResourceView()
public InternalResourceView(StringSE url)
url
- 転送先の URLsetAlwaysInclude(boolean)
public InternalResourceView(StringSE url, boolean alwaysInclude)
url
- 転送先の URLalwaysInclude
- ビューに転送するのではなく、常にビューを含めるかどうか public void setAlwaysInclude(boolean alwaysInclude)
デフォルトは "false" です。転送が可能であっても、このフラグをオンにしてサーブレットインクルードの使用を強制します。
public void setPreventDispatchLoop(boolean preventDispatchLoop)
デフォルトは "false" です。現在のハンドラーパスへのディスパッチが根本的なエラーである、コンベンショナルベースのビューの場合は、これを "true" に切り替えます。
protected boolean isContextRequired()
WebApplicationObjectSupport
の isContextRequired
ApplicationObjectSupport.getApplicationContext()
, ApplicationObjectSupport.getMessageSourceAccessor()
, WebApplicationObjectSupport.getWebApplicationContext()
, WebApplicationObjectSupport.getServletContext()
, WebApplicationObjectSupport.getTempDir()
protected void renderMergedOutputModel(MapSE<StringSE,ObjectSE> model, HttpServletRequestEE request, HttpServletResponseEE response) throws ExceptionSE
AbstractView
の renderMergedOutputModel
model
- 静的な属性よりも動的な値が優先される、結合された出力マップ(非 null
)request
- 現在の HTTP リクエスト response
- 現在の HTTP レスポンス ExceptionSE
- レンダリングに失敗した場合 protected void exposeHelpers(HttpServletRequestEE request) throws ExceptionSE
renderMergedOutputModel(Map, HttpServletRequest, HttpServletResponse)
によって呼び出されます。デフォルトの実装は空です。このメソッドをオーバーライドして、カスタムヘルパーをリクエスト属性として追加できます。
request
- 現在の HTTP リクエスト ExceptionSE
- 属性の追加中に致命的なエラーが発生した場合 renderMergedOutputModel(java.util.Map<java.lang.String, java.lang.Object>, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
, JstlView.exposeHelpers(javax.servlet.http.HttpServletRequest)
protected StringSE prepareForRendering(HttpServletRequestEE request, HttpServletResponseEE response) throws ExceptionSE
この実装は単に構成された URL を返します。サブクラスはこれをオーバーライドして、レンダリングするリソースを決定できます。通常は、URL を別の方法で解釈します。
request
- 現在の HTTP リクエスト response
- 現在の HTTP レスポンス ExceptionSE
- 準備が失敗した場合 AbstractUrlBasedView.getUrl()
@Nullable protected RequestDispatcherEE getRequestDispatcher(HttpServletRequestEE request, StringSE path)
デフォルトの実装では、単に ServletRequest.getRequestDispatcher(String)
EE を呼び出します。サブクラスでオーバーライドできます。
request
- 現在の HTTP リクエスト path
- ターゲット URL (prepareForRendering(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
から返される)protected boolean useInclude(HttpServletRequestEE request, HttpServletResponseEE response)
include
または forward
メソッドのどちらを使用するかを決定します。インクルードリクエストを示すインクルード URI 属性がリクエストに含まれているかどうか、およびレスポンスがすでにコミットされているかどうかのチェックを実行します。どちらの場合も、転送が不可能になるため、インクルードが実行されます。
request
- 現在の HTTP リクエスト response
- 現在の HTTP レスポンス true
、フォワードには false
RequestDispatcher.forward(javax.servlet.ServletRequest, javax.servlet.ServletResponse)
EE, RequestDispatcher.include(javax.servlet.ServletRequest, javax.servlet.ServletResponse)
EE, ServletResponse.isCommitted()
EE, WebUtils.isIncludeRequest(javax.servlet.ServletRequest)