Package nablarch.fw

Class RequestPathMatchingHelper

java.lang.Object
nablarch.fw.RequestPathMatchingHelper

public class RequestPathMatchingHelper extends Object
リクエストパスとリクエストパスのパターンの照合を行うクラス。
 リクエストパスは、URI、Unixのシステムパス、Javaの名前空間のように、"/"で区切られた
 階層構造をもつリクエストパスを想定し、そのパターンをGlob式に似た書式で指定する。
 
 1. ワイルドカードの指定等、基本的にUnixやDOSで使用されるGlob式の記法に準じる。
    '*'はワイルドカードであり'.'と'/'を除く任意の文字の任意個の列にマッチする。
 -------------------------------  ---------------------       ------------------
    リクエストパスのパターン       リクエストパス                  照合結果
 -------------------------------  ---------------------       ------------------
 /                                /                           OK
                                  /index.jsp                  NG
 -------------------------------  ---------------------       ------------------
 /*                               /                           OK
                                  /app                        OK
                                  /app/                       NG (*は'/'にはマッチしない)
                                  /index.jsp                  NG (*は'.'にはマッチしない)
 -------------------------------  ---------------------       ------------------
 /app/*.jsp                       /app/index.jsp              OK
                                  /app/admin                  NG
 -------------------------------  ---------------------       ------------------
 /app/* /test                     /app/admin/test             OK
                                  /app/test/                  NG
 -------------------------------  ---------------------       ------------------
 
 2. 最後尾の'/'が'//'と重ねられていた場合、それ以前の文字列について
    前方一致すればマッチ成功と判定する。
    リソース名を表す'//'以降の文字列については別途マッチ判定が行われる。
    (すなわち、"サブディレクトリ全体"に対してマッチする。)
 --------------------------------  --------------------  ------------------
    リクエストパスのパターン        リクエストパス        照合結果
 --------------------------------  --------------------  ------------------
 /app//                            /                     NG
                                   /app/                 OK
                                   /app/admin/           OK
                                   /app/admin/index.jsp  OK
 --------------------------------  --------------------  ------------------
 //*.jsp                           /app/index.jsp        OK
                                   /app/admin/index.jsp  OK
                                   /app/index.html       NG('*.jsp'がマッチしない)
 --------------------------------  --------------------  ------------------
 

リクエストパスのパターンのマッチングは、リクエストパス中のすべてのドット(.)をスラッシュ(/)に置換してから行う。 この仕様は、Nablarch のバッチ処理で過去に使用していたドット区切りのリクエストパス(例: ss01A001.B01AA001Action/B01AA0010)との互換性を保つために存在している。

Author:
Masato Inoue
  • Constructor Details

    • RequestPathMatchingHelper

      public RequestPathMatchingHelper(boolean isReplaceDot)
      コンストラクタ。

      リクエストパスとしてクラスの完全修飾名が渡される場合、本引数にtrueを設定することで、リクエストパス中のドット(.)をスラッシュに変換して、ディスパッチを行うことが可能となる。

      Parameters:
      isReplaceDot - リクエストパス内のドットをスラッシュに置換する場合、true
  • Method Details

    • setRequestPattern

      public RequestPathMatchingHelper setRequestPattern(String requestPattern)
      照合に使用するリクエストパスのパターン文字列を設定する。
      Parameters:
      requestPattern - リクエストパスのパターン文字列
      Returns:
      このインスタンス自体
    • isAppliedTo

      public boolean isAppliedTo(Request<?> req, ExecutionContext context)
      渡されたリクエストパスと、リクエストパスのパターン文字列との照合を行う。
      Parameters:
      req - HTTPリクエストオブジェクト
      context - 実行コンテキスト
      Returns:
      マッチする場合はtrue
    • normalizeRequestPath

      protected String normalizeRequestPath(Request<?> req)
      リクエストパスを正規化する。
       具体的には以下の処理を行う。
         1. 前後の空白文字を除去する。
         2. 先頭が"/"でない場合は補完する。
         3. リクエストパス中のドット(.)をスラッシュに変換する。(replaceDotフィールドがtrueの場合のみこの変換処理は行われる)
       

      コンストラクタでreplaceDotフィールドにtrueが設定されている場合、リクエストパス中のドット(.)をスラッシュに置換するので、 クラスの完全修飾名がリクエストパスとして渡された場合でもディスパッチを行うことができる。
      例) abc.def.HogeAction/B00AA0000 -> abc/def/HogeAction/B00AA0000

      Parameters:
      req - HTTPリクエストオブジェクト
      Returns:
      正規化したリクエストパス
    • matchesWith

      protected boolean matchesWith(String directoryPath, String resourceName)
      リクエストパスのパターンが、引数で指定されたディレクトリパスとリソース名に合致すればtrueを返す。
      Parameters:
      directoryPath - ディレクトリパス
      resourceName - リソース名
      Returns:
      引数で指定されたディレクトリパスとリソース名に合致すればtrue
    • toString

      public String toString()
      Overrides:
      toString in class Object