Class RequestPathJavaPackageMapping
- Direct Known Subclasses:
HttpRequestJavaPackageMapping.Mapping
本ハンドラの basePackage プロパティ | リクエストパス | 委譲先のハンドラクラス |
---|---|---|
nablarch.sample.apps | /admin/AdminApp | nablarch.sample.apps.admin.AdminApp |
/user/UserApp | nablarch.sample.apps.user.UserApp |
委譲先のクラスが存在しない、もしくは、クラスが存在してもハンドラインターフェース Handler
を実装していない場合は、
汎用例外 Result.NotFound
が送出される。
ベースパスの指定
マッピング元となるリクエストパスのプレフィックスのことを「ベースパス」と呼ぶ。ベースパスは basePath プロパティ に設定する。
ベースパスには、画面オンライン処理におけるコンテキストルートを設定することを想定している。
(※画面オンライン処理では、実際にはハンドラとしてHttpRequestJavaPackageMapping
を使用するが、
実際にディスパッチ処理を行なっているのは、HttpRequestJavaPackageMapping
から処理を委譲される本ハンドラである)
マッピング処理を行う際には、リクエストパス中のベースパス部分の文字列を削除した上で、マッピング先Javaパッケージへとマッピングする。
以下に、画面オンライン処理でベースパスを指定し、リクエストパスを単一のJavaパッケージにマッピングする場合の設定例を示す。
本ハンドラの basePath プロパティ | 本ハンドラの basePackage プロパティ | リクエストパス | 委譲先のハンドラクラス |
---|---|---|---|
/webapp/sample | nablarch.sample.apps | /webapp/sample/admin/AdminApp | nablarch.sample.apps.admin.AdminApp |
nablarch.sample.apps | /webapp/sample/user/UserApp | nablarch.sample.apps.user.UserApp |
なお、ベースパスが指定されていて、かつリクエストパスがそのベースパスに合致しない場合は、汎用例外
Result.NotFound
が送出される。
リクエストパスごとのマッピング先Javaパッケージの切り替え
optionalPackageMappingEntries プロパティに設定を行うことで、リクエストパスごとにマッピング先Javaパッケージを切り替えることができる。
optionalPackageMappingEntries プロパティには、リクエストパスのパターン(requestPattern プロパティ)とマッピング先Javaパッケージ(basePackage プロパティ)の組み合わせを設定する。
optionalPackageMappingEntries プロパティに設定した順番にリクエストパスのパターンとリクエストパスとのマッチングが行われ、
最初にマッチしたマッピング先Javaパッケージが使用される。 マッチするものが存在しない場合、本ハンドラの basePackage プロパティに設定したマッピング先Javaパッケージが使用される。
以下に、リクエストパスごとにマッピング先Javaパッケージを切り替える場合の設定例を示す。
optionalPackageMappingEntriesの requestPattern プロパティ | optionalPackageMappingEntriesの basePackage プロパティ | リクエストパス | 委譲先のハンドラクラス |
---|---|---|---|
/admin// | nablarch.app1 | /admin/AdminApp | nablarch.app1.admin.AdminApp |
/user// | nablarch.app2 | /user/UserApp | nablarch.app2.user.UserApp |
RequestPathMatchingHelper
を参照すること。- Author:
- Iwauo Tajima
- See Also:
-
Constructor Summary
ConstructorDescriptionデフォルトコンストラクタ。RequestPathJavaPackageMapping
(String basePath, String basePackage) リクエストパスが、basePathで始まるリクエストを、basePackageで指定された Javaパッケージ配下のリクエストハンドラに委譲するディスパッチャを作成する。 -
Method Summary
Modifier and TypeMethodDescriptionprotected String
getBasePackage
(Request<?> req, ExecutionContext ctx) マッピング先Javaパッケージを取得する。protected Class<?>
getHandlerClass
(Request<?> req, ExecutionContext ctx) 処理を委譲するハンドラの型を決定する。setBasePackage
(String basePackage) マッピング先Javaパッケージを設定する。setBasePath
(String basePath) マッピング元ベースパスを設定する。setClassNamePrefix
(String prefix) 委譲対象クラス名の接頭辞となる文字列を設定する。setClassNameSuffix
(String suffix) 委譲対象クラス名の接尾辞となる文字列を設定する。setOptionalPackageMappingEntries
(List<JavaPackageMappingEntry> optionalPackageMappingEntries) RequestHandlerEntryでリクエストパスに合致したマッピング先Javaパッケージを上書きする場合に使用する、JavaPackageMappingEntryのリストを設定する。Methods inherited from class nablarch.fw.handler.DispatchHandler
createHandlerFor, handle, setDelegateFactory, setImmediate, writeDispatchingClassLog
-
Constructor Details
-
RequestPathJavaPackageMapping
public RequestPathJavaPackageMapping()デフォルトコンストラクタ。 このメソッドの処理は次のコードと同等である。new RequestPathJavaPackageMapping("", "");
-
RequestPathJavaPackageMapping
リクエストパスが、basePathで始まるリクエストを、basePackageで指定された Javaパッケージ配下のリクエストハンドラに委譲するディスパッチャを作成する。- Parameters:
basePath
- マッピング元ベースURIbasePackage
- マッピング先Javaパッケージ
-
-
Method Details
-
getHandlerClass
protected Class<?> getHandlerClass(Request<?> req, ExecutionContext ctx) throws ClassNotFoundException 処理を委譲するハンドラの型を決定する。 このクラスの実装では、ベースパスとベースパッケージの設定をもとに算出した完全修飾名に一致するリクエストハンドラに対して処理を委譲する。 正確な仕様は以下の通り。 委譲先のクラス(完全修飾名)の決定は以下の規則に従う。1. basePackage の ”.” を ”/” に置換する。 2. リクエストパスの先頭から basePath と一致する部分を basePackage に置換する。 3. 2.の結果文字列を”/”で分割する。 分割後の各トークンの内、英大文字で始まっているものを委譲先の クラス名とし、それ以前の各トークンをパッケージ名とみなす。 4. コンテキストクラスパス上に上記のパッケージ及びクラスが実際に 存在していれば、そのクラスを委譲対象とする。
以下の場合、共通例外Result.NotFound
を送出する。- ベースパス外からのアクセスであった場合。 - 委譲先のクラスが決定できない、決定できても存在しない場合。 - 委譲先のクラスがHandlerインターフェースを実装していない場合。
- Specified by:
getHandlerClass
in classDispatchHandler<Request<?>,
Object, RequestPathJavaPackageMapping> - Parameters:
req
- 入力データctx
- 実行コンテキスト- Returns:
- 処理を委譲するハンドラ
- Throws:
ClassNotFoundException
- 指定されたクラスが存在しなかった場合。
-
getBasePackage
マッピング先Javaパッケージを取得する。 optionalPackageMappingEntries プロパティに設定した順番にリクエストパスのパターンとリクエストパスとのマッチングが行われ、 最初にマッチしたJavaパッケージが使用される。
マッチするものが存在しない場合、またはoptionalPackageMappingEntries プロパティ自体が設定されていない場合、本ハンドラのbasePackage プロパティに設定したJavaパッケージが使用される。- Parameters:
req
- 入力データctx
- 実行コンテキスト- Returns:
- マッピング先Javaパッケージ
-
setBasePath
マッピング元ベースパスを設定する。- Parameters:
basePath
- マッピング元ベースパス- Returns:
- JavaPackageMapping
-
setBasePackage
マッピング先Javaパッケージを設定する。- Parameters:
basePackage
- マッピング先Javaパッケージ- Returns:
- JavaPackageMapping
-
setOptionalPackageMappingEntries
public RequestPathJavaPackageMapping setOptionalPackageMappingEntries(List<JavaPackageMappingEntry> optionalPackageMappingEntries) RequestHandlerEntryでリクエストパスに合致したマッピング先Javaパッケージを上書きする場合に使用する、JavaPackageMappingEntryのリストを設定する。- Parameters:
optionalPackageMappingEntries
- JavaPackageMappingEntryのリスト- Returns:
- このオブジェクト自体
-
setClassNamePrefix
委譲対象クラス名の接頭辞となる文字列を設定する。- Parameters:
prefix
- 委譲対象クラス名の接頭辞となる文字列- Returns:
- このオブジェクト自体
-
setClassNameSuffix
委譲対象クラス名の接尾辞となる文字列を設定する。- Parameters:
suffix
- 委譲対象クラス名の接尾辞となる文字列- Returns:
- このオブジェクト自体
-