P
- コマンドクラス。サービス層のクラスへ渡すクラス。R
- モデルクラス。サービス層のクラスから返されるクラス。public abstract class TerasolunaController<P,R>
extends org.springframework.web.servlet.mvc.AbstractCommandController
implements org.springframework.beans.factory.InitializingBean
本コントローラは、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)を
利用する場合に設定するビュー名。
|
コンストラクタと説明 |
---|
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)
ビュー名を設定する。
|
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
handleRequest, isSynchronizeOnSession, setSynchronizeOnSession
applyCacheSeconds, applyCacheSeconds, cacheForSeconds, cacheForSeconds, checkAndPrepare, checkAndPrepare, getCacheSeconds, getSupportedMethods, isRequireSession, isUseCacheControlHeader, isUseCacheControlNoStore, isUseExpiresHeader, preventCaching, setCacheSeconds, setRequireSession, setSupportedMethods, setUseCacheControlHeader, setUseCacheControlNoStore, setUseExpiresHeader
getServletContext, getTempDir, getWebApplicationContext, initApplicationContext, initServletContext, isContextRequired, setServletContext
protected Class parameterizedControllerClass
を定義しているコントローラクラス。
protected RequestContextSupport ctxSupport
protected ServletRequestDataBinderCreator dataBinderCreator
protected String viewName
protected boolean useRequestNameView
trueを設定した場合、ビュー名にリクエスト名を設定する。
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()
afterPropertiesSet
インタフェース内 org.springframework.beans.factory.InitializingBean
protected Object getCommand(javax.servlet.http.HttpServletRequest request) throws Exception
getCommand
クラス内 org.springframework.web.servlet.mvc.BaseCommandController
request
- HTTPリクエストException
- 例外protected Type getCommandType()
protected org.springframework.web.bind.ServletRequestDataBinder createBinder(javax.servlet.http.HttpServletRequest request, Object command) throws Exception
bindAndValidate
メソッドより呼び出される。createBinder
クラス内 org.springframework.web.servlet.mvc.BaseCommandController
request
- HTTPリクエストcommand
- バインドされるコマンドオブジェクトException
- 例外protected void onBind(javax.servlet.http.HttpServletRequest request, Object command, org.springframework.validation.BindException errors) throws Exception
onBind
クラス内 org.springframework.web.servlet.mvc.BaseCommandController
request
- HTTPリクエストcommand
- バインド済みのJavaBean(コマンド)errors
- バインド・入力チェックエラー保持クラスException
- 例外protected void onBindAndValidate(javax.servlet.http.HttpServletRequest request, Object command, org.springframework.validation.BindException errors) throws Exception
onBindAndValidate
クラス内 org.springframework.web.servlet.mvc.BaseCommandController
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
handle
クラス内 org.springframework.web.servlet.mvc.AbstractCommandController
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
- 例外Copyright © 2014. All Rights Reserved.