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(java.lang.String url) 指定された URL で新しい InternalResourceView を作成します。 |
InternalResourceView(java.lang.String url, boolean alwaysInclude) 指定された URL で新しい InternalResourceView を作成します。 |
修飾子と型 | メソッドと説明 |
---|---|
protected void | exposeHelpers(HttpServletRequestEE request) 各レンダリング操作に固有のヘルパーを公開します。 |
protected RequestDispatcherEE | getRequestDispatcher(HttpServletRequestEE request, java.lang.String path) フォワード / インクルードに使用する RequestDispatcher を取得します。 |
protected boolean | isContextRequired() ApplicationContext は、InternalResourceView には厳密には必要ありません。 |
protected java.lang.String | prepareForRendering(HttpServletRequestEE request, HttpServletResponseEE response) レンダリングの準備をし、転送する(または含める)リクエストディスパッチャーのパスを決定します。 |
protected void | renderMergedOutputModel(java.util.Map<java.lang.String,java.lang.Object> 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
public InternalResourceView()
public InternalResourceView(java.lang.String url)
url
- 転送先の URLsetAlwaysInclude(boolean)
public InternalResourceView(java.lang.String 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(java.util.Map<java.lang.String,java.lang.Object> model, HttpServletRequestEE request, HttpServletResponseEE response) throws java.lang.Exception
AbstractView
の renderMergedOutputModel
model
- 静的な属性よりも動的な値が優先される、結合された出力マップ(非 null
)request
- 現在の HTTP リクエスト response
- 現在の HTTP レスポンス java.lang.Exception
- レンダリングに失敗した場合 protected void exposeHelpers(HttpServletRequestEE request) throws java.lang.Exception
renderMergedOutputModel(Map, HttpServletRequest, HttpServletResponse)
によって呼び出されます。デフォルトの実装は空です。このメソッドをオーバーライドして、カスタムヘルパーをリクエスト属性として追加できます。
request
- 現在の HTTP リクエスト java.lang.Exception
- 属性の追加中に致命的なエラーが発生した場合 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 java.lang.String prepareForRendering(HttpServletRequestEE request, HttpServletResponseEE response) throws java.lang.Exception
この実装は単に構成された URL を返します。サブクラスはこれをオーバーライドして、レンダリングするリソースを決定できます。通常は、URL を別の方法で解釈します。
request
- 現在の HTTP リクエスト response
- 現在の HTTP レスポンス java.lang.Exception
- 準備が失敗した場合 AbstractUrlBasedView.getUrl()
@Nullable protected RequestDispatcherEE getRequestDispatcher(HttpServletRequestEE request, java.lang.String 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)