public class ServletForwardingController extends AbstractController implements BeanNameAware
Spring のディスパッチインフラストラクチャを介して既存のサーブレットを呼び出す場合に便利です。たとえば、Spring HandlerInterceptors をそのリクエストに適用する場合などです。これは、サーブレットフィルターをサポートしない最小限のサーブレットコンテナーでも機能します。
例 : web.xml では、すべての "/myservlet" リクエストが Spring ディスパッチャーにマッピングされます。また、カスタム "myServlet" も定義されますが、サーブレットマッピングはありません。
<servlet> <servlet-name>myServlet</servlet-name> <servlet-class>mypackage.TestServlet</servlet-class> </servlet> <servlet> <servlet-name>myDispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>myDispatcher</servlet-name> <url-pattern>/myservlet</url-pattern> </servlet-mapping>例 : myDispatcher-servlet.xml は、"/myservlet" をサーブレット(サーブレット名で識別)に転送します。このようなリクエストはすべて、構成済みの HandlerInterceptor チェーン(OpenSessionInViewInterceptor など)を経由します。サーブレットの観点からは、すべてが通常どおり機能します。
<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="interceptors"> <list> <ref bean="openSessionInViewInterceptor"/> </list> </property> <property name="mappings"> <props> <prop key="/myservlet">myServletForwardingController</prop> </props> </property> </bean> <bean id="myServletForwardingController" class="org.springframework.web.servlet.mvc.ServletForwardingController"> <property name="servletName"><value>myServlet</value></property> </bean>
ServletWrappingController
, OpenEntityManagerInViewInterceptor
, OpenEntityManagerInViewFilter
HEADER_CACHE_CONTROL, METHOD_GET, METHOD_HEAD, METHOD_POST
logger
コンストラクターと説明 |
---|
ServletForwardingController() |
修飾子と型 | メソッドと説明 |
---|---|
protected ModelAndView | handleRequestInternal(HttpServletRequestEE request, HttpServletResponseEE response) テンプレートメソッド。 |
void | setBeanName(StringSE name) この Bean を作成した Bean ファクトリで Bean の名前を設定します。 |
void | setServletName(StringSE servletName) 転送するサーブレットの名前を設定します。 |
protected boolean | useInclude(HttpServletRequestEE request, HttpServletResponseEE response) RequestDispatcher の include または forward メソッドのどちらを使用するかを決定します。 |
handleRequest, isSynchronizeOnSession, setSynchronizeOnSession
applyCacheControl, applyCacheSeconds, applyCacheSeconds, cacheForSeconds, cacheForSeconds, checkAndPrepare, checkAndPrepare, checkRequest, getAllowHeader, getCacheControl, getCacheSeconds, getSupportedMethods, getVaryByRequestHeaders, isAlwaysMustRevalidate, isRequireSession, isUseCacheControlHeader, isUseCacheControlNoStore, isUseExpiresHeader, prepareResponse, preventCaching, setAlwaysMustRevalidate, setCacheControl, setCacheSeconds, setRequireSession, setSupportedMethods, setUseCacheControlHeader, setUseCacheControlNoStore, setUseExpiresHeader, setVaryByRequestHeaders
getServletContext, getTempDir, getWebApplicationContext, initApplicationContext, initServletContext, isContextRequired, setServletContext
getApplicationContext, getMessageSourceAccessor, initApplicationContext, obtainApplicationContext, requiredContextClass, setApplicationContext
cloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, toStringSE, waitSE, waitSE, waitSE
public void setServletName(StringSE servletName)
デフォルトは、このコントローラーの Bean 名です。
public void setBeanName(StringSE name)
BeanNameAware
通常の Bean プロパティの設定後、ただし InitializingBean.afterPropertiesSet()
またはカスタム init メソッドなどの init コールバックの前に呼び出されます。
BeanNameAware
の setBeanName
name
- ファクトリ内の Bean の名前。この名前は、ファクトリで使用される実際の Bean 名であり、最初に指定した名前とは異なる場合があります。特に内部 Bean 名の場合、実際の Bean 名は "#..." サフィックスを追加することで一意になります。必要に応じて、BeanFactoryUtils.originalBeanName(String)
メソッドを使用して、元の Bean 名(サフィックスなし)を抽出します。protected ModelAndView handleRequestInternal(HttpServletRequestEE request, HttpServletResponseEE response) throws ExceptionSE
AbstractController
handleRequest
と同じです。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)