|
||||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
java.lang.Objectorg.springframework.context.support.ApplicationObjectSupport
org.springframework.web.context.support.WebApplicationObjectSupport
org.springframework.web.servlet.support.WebContentGenerator
org.springframework.web.servlet.mvc.AbstractController
org.springframework.web.servlet.mvc.BaseCommandController
org.springframework.web.servlet.mvc.AbstractCommandController
jp.terasoluna.fw.web.rich.springmvc.controller.TerasolunaController<P,R>
P
- コマンドクラス。サービス層のクラスへ渡すクラス。R
- モデルクラス。サービス層のクラスから返されるクラス。public abstract class TerasolunaController<P,R>
サービス層のクラスを実行するリクエストコントローラ抽象クラス。
本コントローラは、DispachServlet
から起動され、
以下の機能を提供する。
本クラスは、抽象クラスである。 業務開発者が、リクエストごとに本クラスの実装クラスを作成すること。 本クラスは、型パラメータを利用して宣言されている。 型パラメータPは、HTTPリクエストをバインドしたJavaBean(コマンド)、 型パラメータRは、Viewに反映させる情報を保持するJavaBean(モデル)の型をあらわしている。 実装クラス宣言時に、型パラメータに実際の型を指定し、 抽象メソッドの型変数も指定した型にあわせて実装することで 実装クラスの型の安全性を保障させている。 型パラメータにP,Rには、必ず引き数なしコンストラクタを持つJavaBeanを指定すること。 インタフェース、抽象クラス、引き数なしコンストラクタを持たないクラスの指定は出来ない。
サービス層のクラスの実行
サービス層のクラスは、DIコンテナを利用して本コントローラに設定されることを前提とするので、
業務開発者はサービス層のクラスを属性として用意し、setter/getterメソッドを設けること。
また、呼び出し処理は、抽象メソッドであるexecuteServiceメソッドに実装すること。
業務処理で例外が発生した場合、 Spring MVCの例外処理機構でハンドリングされる。
バインド処理
ServletRequestDataBinder継承クラスが行う。
ServletRequestDataBinderを生成するためのクラスであるDataBinderCreatorを
DIコンテナを利用して本コントローラに設定すること。
DataBinderCreatorは、リクエストの形式(XML or Query)により使いわける。
バインド処理で、バインドエラーが発生した場合、BindExceptionがスローされ、
Spring MVCの例外処理機構でハンドリングされる。
入力チェック処理
Validatorインタフェース実装クラスが行う。
Validatorインタフェース実装クラスを
DIコンテナを利用して本コントローラに設定すること。
入力チェック処理で、入力チェックエラーが発生した場合、
BindExceptionがスローされ、
Spring MVCの例外処理機構でハンドリングされる。
ビュー名の設定
DispachServlet
でのビュー解決に使用されるビュー名を
handle(HttpServletRequest, HttpServletResponse, Object, BindException)
メソッド内で設定している。
ビュー名は、以下の順番で決定される。
viewName
属性が入力されていれば、その属性値useRequestNameView
属性がtrueならば、
”/”+「リクエスト名」 トランザクション管理の責務は、サービス層が受け持つ。 (ただし、AOPによる宣言的トランザクションを利用するので、 サービス層のクラスが意識する必要はない。)
作成した実装クラスを利用するには、Beanの定義を行うこと。
【xxx-servlet.xml
の定義例】
<bean name="/secure/blogic/sum.do"
class="jp.terasoluna.sample2.web.controller.SumController"
parent="xmlRequestController" singleton ="false">
<property name="sumService" ref="sumService"/>
<property name="ctxSupport" ref="ctxSupport"/>
<property name="dataBinderCreator" ref="xmlDataBinderCreator"/>
<property name="validator" ref="sumValidator"/>
</bean>
以下のプロパティを設定すること。
属性名 | 必須 | 説明 |
---|---|---|
ctxSupport | ○ | 制御情報サポートクラス。 |
dataBinderCreator | ○ | リクエストデータバインダ生成クラス。 |
validator | × | 入力チェッククラス。 |
viewName | × | ビュー名。 デフォルト以外のView技術(Velocity,バイナリデータ, PDF, Excel等)を 利用する場合に設定する。 |
useRequestNameView | × | ビュー名にリクエスト名を使用するか判断するフラグ。 デフォルトはfalse。リクエスト名を使用したい場合、trueを設定する。 trueが設定されていても、viewNameが入力されていればviewNameに 対応するビューが使用される。 |
また、制御情報サポートクラス、リクエストデータバインダ生成クラスの設定は、 複数のコントローラ定義で同一になる。 よって、抽象Bean定義をあらかじめ設定しておき、 実装クラスのBean定義は、抽象Bean定義を継承して行うと 設定ファイルの記述がシンプルになる。
【抽象Bean定義を利用したxxx-servlet.xml
の定義例】
<!-- コントローラの抽象Bean定義 -->
<bean id="xmlRequestController" abstract="true">
<property name="cxtSupport" ref="ctxSupport"/>
<property name="dataBinderCreator" ref="xmlDataBinderCreator"/>
</bean>
<!-- 抽象Bean定義を継承したコントローラの定義 -->
<bean name="/secure/blogic/sum.do"
class="jp.terasoluna.sample2.web.controller.SumController"
parent="xmlRequestController" scope="singleton">
<property name="sumService" ref="sumService"/>
<property name="validator" ref="sumValidator"/>
</bean>
TERASOLUNAでは、 あらかじめいくつかの抽象Bean定義が用意されている。必要に応じて利用すること。
抽象Bean名 | 親Bean名 | 受信リクエスト | 起動サービス | ビュー | 追加プロパティ |
---|---|---|---|---|---|
pojoController | - | - | POJO | - | ctxSupport="ctxSupport" validator="beanValidator" ※beanValidatorはデフォルトでコメントアウトされ無効 |
pojoXmlRequestController | pojoController | XML | POJO | - | dataBinderCreator="XmlDataBinderCreator" |
pojoXmlRequestCastorViewController | pojoXmlRequestController | XML | POJO | Castor | - |
pojoXmlRequestVelocityViewController | pojoXmlRequestController | XML | POJO | Velocity | useRequestNameView="true" |
pojoXmlRequestDefaultFileDownloadViewController | pojoXmlRequestController | XML | POJO | DefaultFileDownloadView | viewName="FileDownloadSample" |
pojoQueryRequestController | pojoController | クエリ | POJO | - | dataBinderCreator="queryDataBinderCreator" |
pojoQueryRequestCastorViewController | pojoQueryRequestController | クエリ | POJO | Castor | - |
pojoQueryRequestVelocityViewController | pojoQueryRequestController | クエリ | POJO | Velocity | useRequestNameView="true" |
pojoQueryRequestDefaultFileDownloadViewController | pojoQueryRequestController | クエリ | POJO | DefaultFileDownloadView | viewName="FileDownloadSample" |
blogicController | - | - | BLogic | - | ctxSupport="ctxSupport" validator="beanValidator" ※beanValidatorはデフォルトでコメントアウトされ無効 |
blogicXmlRequestController | blogicController | XML | BLogic | - | dataBinderCreator="xmlDataBinderCreator" |
blogicXmlRequestCastorViewController | blogicXmlRequestController | XML | BLogic | Castor | - |
blogicXmlRequestVelocityViewController | blogicXmlRequestController | XML | BLogic | Velocity | useRequestNameView="true" |
blogicXmlRequestDefaultFileDownloadViewController | blogicXmlRequestController | XML | BLogic | DefaultFileDownloadView | viewName="FileDownloadSample" |
blogicQueryRequestController | blogicController | クエリ | BLogic | - | dataBinderCreator="queryDataBinderCreator" |
blogicQueryRequestCastorViewController | blogicQueryRequestController | クエリ | BLogic | Castor | - |
blogicQueryRequestVelocityViewController | blogicQueryRequestController | クエリ | BLogic | Velocity | useRequestNameView="true" |
blogicQueryRequestDefaultFileDownloadViewController | blogicQueryRequestController | クエリ | BLogic | DefaultFileDownloadView | viewName="FileDownloadSample" |
pojoXmlSchemaValidatorRequestController | pojoController | - | POJO | - | pojoController="xmlSchemaValidatorDataBinderCreator" ※schemaValidatorはデフォルトではコメントアウトされ無効 |
pojoXmlSchemaValidatorRequestCastorViewController | blogicController | - | BLogic | - | pojoController="xmlSchemaValidatorDataBinderCreator" ※schemaValidatorはデフォルトではコメントアウトされ無効 |
適用先システムに特化した業務前処理、後処理を追加したい場合
(例えば業務処理パラメータや業務処理結果に
セッションの情報を反映したい場合等)、
preService、postServiceメソッドをオーバーライドした実装クラスを作成し、
利用すること。
サブクラスで抽象クラスを使用する場合、getCommandType()
メソッドを
オーバーライドする必要がある。
起動するサービス層のクラスとしてPOJOではなく、 BLogicインタフェース実装クラスを利用することも可能である。 詳細はBLogicControllerを参照のこと。
BLogicController
フィールドの概要 | |
---|---|
protected RequestContextSupport |
ctxSupport
制御情報を扱うサポートロジッククラス。 |
protected ServletRequestDataBinderCreator |
dataBinderCreator
ServletRequestDataBinder継承クラスを生成するクラス。 |
protected Class |
parameterizedControllerClass
型パラメータ を定義しているコントローラクラス。 |
protected boolean |
useRequestNameView
ビュー名にリクエスト名を使用するか判断するフラグ。 |
protected String |
viewName
デフォルト以外のビュー技術(Velocity,バイナリデータ, PDF, Excel)を 利用する場合に設定するビュー名。 |
クラス org.springframework.web.servlet.mvc.BaseCommandController から継承されたフィールド |
---|
DEFAULT_COMMAND_NAME |
クラス org.springframework.web.servlet.support.WebContentGenerator から継承されたフィールド |
---|
METHOD_GET, METHOD_HEAD, METHOD_POST |
クラス org.springframework.context.support.ApplicationObjectSupport から継承されたフィールド |
---|
logger |
コンストラクタの概要 | |
---|---|
TerasolunaController()
|
メソッドの概要 | |
---|---|
void |
afterPropertiesSet()
DIコンテナによってインスタンス化された直後に呼ばれるメソッド。 |
protected org.springframework.web.bind.ServletRequestDataBinder |
createBinder(javax.servlet.http.HttpServletRequest request,
Object command)
リクエストの情報をJavaBean(コマンド)に格納するための データバインダを生成する。 |
protected R |
executeService(javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response,
P command)
業務ロジックを実行する。 |
protected abstract R |
executeService(P command)
業務開発者が実装すべき、業務ロジックの実行処理。 |
protected Object |
getCommand(javax.servlet.http.HttpServletRequest request)
リクエストの情報を格納するためのJavaBean(コマンド)を取得する。 |
protected Type |
getCommandType()
本クラスのサブクラス定義された、コマンドクラスの実タイプを取得する。 |
protected org.springframework.web.servlet.ModelAndView |
handle(javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response,
Object command,
org.springframework.validation.BindException errors)
業務ロジック実行メソッドを呼び出し、モデルとビューを返却する。 |
protected void |
onBind(javax.servlet.http.HttpServletRequest request,
Object command,
org.springframework.validation.BindException errors)
リクエストの情報をJavaBean(コマンド)に格納した後に実行される処理。 |
protected void |
onBindAndValidate(javax.servlet.http.HttpServletRequest request,
Object command,
org.springframework.validation.BindException errors)
入力チェックの後処理。 |
protected void |
postService(javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response,
P command,
R modelAndView)
業務ロジック実行後処理。 |
protected void |
preService(javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response,
P command)
業務ロジック実行前処理。 |
void |
setCtxSupport(RequestContextSupport ctxSupport)
コンテキストを扱うサポートロジッククラスを設定する。 |
void |
setDataBinderCreator(ServletRequestDataBinderCreator dataBinderCreator)
DataBinder生成するクラスを設定する。 |
void |
setUseRequestNameView(boolean useRequestNameView)
ビュー名にリクエスト名を使用するか判断するフラグを設定する。 |
void |
setViewName(String viewName)
ビュー名を設定する。 |
クラス org.springframework.web.servlet.mvc.AbstractCommandController から継承されたメソッド |
---|
handleRequestInternal |
クラス org.springframework.web.servlet.mvc.BaseCommandController から継承されたメソッド |
---|
bindAndValidate, checkCommand, createCommand, getBindingErrorProcessor, getCommandClass, getCommandName, getMessageCodesResolver, getPropertyEditorRegistrars, getValidator, getValidators, getWebBindingInitializer, initApplicationContext, initBinder, isValidateOnBinding, onBind, prepareBinder, setBindingErrorProcessor, setCommandClass, setCommandName, setMessageCodesResolver, setPropertyEditorRegistrar, setPropertyEditorRegistrars, setValidateOnBinding, setValidator, setValidators, setWebBindingInitializer, suppressBinding, suppressValidation, suppressValidation, suppressValidation, useDirectFieldAccess |
クラス org.springframework.web.servlet.mvc.AbstractController から継承されたメソッド |
---|
handleRequest, isSynchronizeOnSession, setSynchronizeOnSession |
クラス org.springframework.web.servlet.support.WebContentGenerator から継承されたメソッド |
---|
applyCacheSeconds, applyCacheSeconds, cacheForSeconds, cacheForSeconds, checkAndPrepare, checkAndPrepare, getCacheSeconds, getSupportedMethods, isRequireSession, isUseCacheControlHeader, isUseCacheControlNoStore, isUseExpiresHeader, preventCaching, setCacheSeconds, setRequireSession, setSupportedMethods, setUseCacheControlHeader, setUseCacheControlNoStore, setUseExpiresHeader |
クラス org.springframework.web.context.support.WebApplicationObjectSupport から継承されたメソッド |
---|
getServletContext, getTempDir, getWebApplicationContext, initApplicationContext, initServletContext, isContextRequired, setServletContext |
クラス org.springframework.context.support.ApplicationObjectSupport から継承されたメソッド |
---|
getApplicationContext, getMessageSourceAccessor, requiredContextClass, setApplicationContext |
クラス java.lang.Object から継承されたメソッド |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
フィールドの詳細 |
---|
protected Class parameterizedControllerClass
を定義しているコントローラクラス。
protected RequestContextSupport ctxSupport
protected ServletRequestDataBinderCreator dataBinderCreator
protected String viewName
protected boolean useRequestNameView
trueを設定した場合、ビュー名にリクエスト名を設定する。
コンストラクタの詳細 |
---|
public TerasolunaController()
メソッドの詳細 |
---|
public void setCtxSupport(RequestContextSupport ctxSupport)
ctxSupport
- 制御情報を扱うサポートロジッククラスpublic void setDataBinderCreator(ServletRequestDataBinderCreator dataBinderCreator)
dataBinderCreator
- DataBinder生成するクラスpublic void setViewName(String viewName)
viewName
- デフォルト以外のView技術を利用する場合に
設定するView名public void setUseRequestNameView(boolean useRequestNameView)
useRequestNameView
- ビュー名にリクエスト名を使用するか判断するフラグ。public void afterPropertiesSet()
org.springframework.beans.factory.InitializingBean
内の afterPropertiesSet
protected Object getCommand(javax.servlet.http.HttpServletRequest request) throws Exception
org.springframework.web.servlet.mvc.BaseCommandController
内の getCommand
request
- HTTPリクエスト
Exception
- 例外protected Type getCommandType()
protected org.springframework.web.bind.ServletRequestDataBinder createBinder(javax.servlet.http.HttpServletRequest request, Object command) throws Exception
bindAndValidate
メソッドより呼び出される。
org.springframework.web.servlet.mvc.BaseCommandController
内の createBinder
request
- HTTPリクエストcommand
- バインドされるコマンドオブジェクト
Exception
- 例外protected void onBind(javax.servlet.http.HttpServletRequest request, Object command, org.springframework.validation.BindException errors) throws Exception
org.springframework.web.servlet.mvc.BaseCommandController
内の onBind
request
- HTTPリクエストcommand
- バインド済みのJavaBean(コマンド)errors
- バインド・入力チェックエラー保持クラス
Exception
- 例外protected void onBindAndValidate(javax.servlet.http.HttpServletRequest request, Object command, org.springframework.validation.BindException errors) throws Exception
org.springframework.web.servlet.mvc.BaseCommandController
内の onBindAndValidate
request
- HTTPリクエストcommand
- バインド済みのコマンドオブジェクトerrors
- バインド・入力チェックエラー保持クラス
Exception
- 例外protected org.springframework.web.servlet.ModelAndView handle(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, Object command, org.springframework.validation.BindException errors) throws Exception
org.springframework.web.servlet.mvc.AbstractCommandController
内の handle
request
- HTTPリクエストresponse
- HTTPレスポンスcommand
- コマンドオブジェクトerrors
- バインド・入力チェックエラー保持クラス
Exception
- 例外protected R executeService(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, P command) throws Exception
request
- HTTPリクエストresponse
- HTTPレスポンスcommand
- コマンドオブジェクト
Exception
- 例外protected void postService(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, P command, R modelAndView) throws Exception
request
- HTTPリクエストresponse
- HTTPレスポンスcommand
- コマンドオブジェクトmodelAndView
- モデルとビュー
Exception
- 例外protected void preService(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, P command) throws Exception
request
- HTTPリクエストresponse
- HTTPレスポンスcommand
- コマンドオブジェクト
Exception
- 例外protected abstract R executeService(P command) throws Exception
command
- コマンド(業務パラメータ)
Exception
- 例外
|
||||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |