public class RequestPathJavaPackageMapping extends DispatchHandler<Request<?>,java.lang.Object,RequestPathJavaPackageMapping>
本ハンドラの basePackage プロパティ | リクエストパス | 委譲先のハンドラクラス |
---|---|---|
nablarch.sample.apps | /admin/AdminApp | nablarch.sample.apps.admin.AdminApp |
/user/UserApp | nablarch.sample.apps.user.UserApp |
委譲先のクラスが存在しない、もしくは、クラスが存在してもハンドラインターフェース Handler
を実装していない場合は、
汎用例外 Result.NotFound
が送出される。
ベースパスには、画面オンライン処理におけるコンテキストルートを設定することを想定している。
(※画面オンライン処理では、実際にはハンドラとして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
が送出される。
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
を参照すること。コンストラクタと説明 |
---|
RequestPathJavaPackageMapping()
デフォルトコンストラクタ。
|
RequestPathJavaPackageMapping(java.lang.String basePath,
java.lang.String basePackage)
リクエストパスが、basePathで始まるリクエストを、basePackageで指定された
Javaパッケージ配下のリクエストハンドラに委譲するディスパッチャを作成する。
|
修飾子とタイプ | メソッドと説明 |
---|---|
protected java.lang.String |
getBasePackage(Request<?> req,
ExecutionContext ctx)
マッピング先Javaパッケージを取得する。
|
protected java.lang.Class<?> |
getHandlerClass(Request<?> req,
ExecutionContext ctx)
処理を委譲するハンドラの型を決定する。
|
RequestPathJavaPackageMapping |
setBasePackage(java.lang.String basePackage)
マッピング先Javaパッケージを設定する。
|
RequestPathJavaPackageMapping |
setBasePath(java.lang.String basePath)
マッピング元ベースパスを設定する。
|
RequestPathJavaPackageMapping |
setClassNamePrefix(java.lang.String prefix)
委譲対象クラス名の接頭辞となる文字列を設定する。
|
RequestPathJavaPackageMapping |
setClassNameSuffix(java.lang.String suffix)
委譲対象クラス名の接尾辞となる文字列を設定する。
|
RequestPathJavaPackageMapping |
setOptionalPackageMappingEntries(java.util.List<JavaPackageMappingEntry> optionalPackageMappingEntries)
RequestHandlerEntryでリクエストパスに合致したマッピング先Javaパッケージを上書きする場合に使用する、JavaPackageMappingEntryのリストを設定する。
|
createHandlerFor, handle, setImmediate, writeDispatchingClassLog
public RequestPathJavaPackageMapping()
new RequestPathJavaPackageMapping("", "");
public RequestPathJavaPackageMapping(java.lang.String basePath, java.lang.String basePackage)
basePath
- マッピング元ベースURIbasePackage
- マッピング先Javaパッケージprotected java.lang.Class<?> getHandlerClass(Request<?> req, ExecutionContext ctx) throws java.lang.ClassNotFoundException
1. basePackage の ”.” を ”/” に置換する。 2. リクエストパスの先頭から basePath と一致する部分を basePackage に置換する。 3. 2.の結果文字列を”/”で分割する。 分割後の各トークンの内、英大文字で始まっているものを委譲先の クラス名とし、それ以前の各トークンをパッケージ名とみなす。 4. コンテキストクラスパス上に上記のパッケージ及びクラスが実際に 存在していれば、そのクラスを委譲対象とする。以下の場合、共通例外
Result.NotFound
を送出する。
- ベースパス外からのアクセスであった場合。 - 委譲先のクラスが決定できない、決定できても存在しない場合。 - 委譲先のクラスがHandlerインターフェースを実装していない場合。
getHandlerClass
クラス内 DispatchHandler<Request<?>,java.lang.Object,RequestPathJavaPackageMapping>
req
- 入力データctx
- 実行コンテキストjava.lang.ClassNotFoundException
- 指定されたクラスが存在しなかった場合。protected java.lang.String getBasePackage(Request<?> req, ExecutionContext ctx)
req
- 入力データctx
- 実行コンテキストpublic RequestPathJavaPackageMapping setBasePath(java.lang.String basePath)
basePath
- マッピング元ベースパスpublic RequestPathJavaPackageMapping setBasePackage(java.lang.String basePackage)
basePackage
- マッピング先Javaパッケージpublic RequestPathJavaPackageMapping setOptionalPackageMappingEntries(java.util.List<JavaPackageMappingEntry> optionalPackageMappingEntries)
optionalPackageMappingEntries
- JavaPackageMappingEntryのリストpublic RequestPathJavaPackageMapping setClassNamePrefix(java.lang.String prefix)
prefix
- 委譲対象クラス名の接頭辞となる文字列public RequestPathJavaPackageMapping setClassNameSuffix(java.lang.String suffix)
suffix
- 委譲対象クラス名の接尾辞となる文字列