|
||||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||
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 内の getCommandrequest - 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 内の createBinderrequest - 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 内の onBindrequest - 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 内の onBindAndValidaterequest - 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 内の handlerequest - 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 - 例外
|
||||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||