Class ResourceLocator

java.lang.Object
nablarch.fw.web.ResourceLocator

@Published public final class ResourceLocator extends Object
各種リソースを識別する為の文字列(リソースロケータ)をパースして格納するクラス。

 リソースロケータとは、本フレームワークにおいて、何らかのリソースを指定する際に用いられる汎用的書式である。
 以下のように定義される。
   (スキーム名)://(ディレクトリパス)/(リソース名)

 リソースロケータの使用場面例
 - HTTPレスポンスの内容を格納したリソースを指定するケース

   // 業務Actionから"jsp/success.jsp" に対してフォーワード
   new HttpResponse("200", "servlet://jsp/success.jsp");

 現時点でサポートされるスキームは以下の5つである。

 1. 静的ファイル
    ファイルシステム上の静的ファイルの内容を出力する。
    絶対パスもしくは相対パスで指定することが可能である。
     (書式)
         file://(コンテンツファイルへのパス)
     (例)
         file://./webapps/style/common.css    (相対パス)
         file:///www/docroot/style/common.css (絶対パス)

 2. Javaコンテキストクラスローダ上のリソース
    コンテキストクラスローダ上のリソースの内容を出力する。
     (書式)
         classpath://(Javaリソース名)
     (例)
         classpath://nablarch/sample/webapp/common.css
         
   classpath指定は、ファイルシステム上に存在しているファイルのみ指定できる。
   このため、jarなどでアーカイブされたファイルについてはclasspathを指定することは出来ない。
   また、バーチャルファイルシステムを用いてファイルを管理するようなWebアプリケーションサーバの場合、
   ファイルシステム上に存在しているファイルの場合でも、classpathの指定は出来ない。
   
   このため、classpathではなく静的ファイル(file://)の使用を推奨する。

 3. 内部フォーワード
    リクエストプロセッサに対して、指定したリクエストURIでの再処理を要求する。
    HttpRequest・ExecutionContextはそのまま流用される。
     (書式)
         forward://(フォーワード名)
     (例)
         forward://registerForm.html           (現在のURIからの相対パス)
         forward:///app/user/registerForm.html (絶対パス)

 4. サーブレットフォーワード
    サーブレットコンテナに対してフォーワードを行う。
    この場合、レスポンスの出力処理自体がフォーワード先のサーブレットに委譲される。
     (書式)
         servlet://(フォーワード名)
     (例)
         servlet://jsp/index.jsp   (現在のページからの相対パス)
         servlet:///jsp/index.jsp  (サーブレットコンテキストを起点とする相対パス)


 5. リダイレクト
    この場合は、指定されたパスへのリダイレクションを指示するレスポンスを行う。
     (書式)
         redirect://(リダイレクト先パス)
         http(s)://(リダイレクト先URL)
         redirect:(リダイレクト先の絶対URL)
     (例)
         redirect://login             (現在のページからの相対パス)
         redirect:///UserAction/login (サーブレットコンテキストを起点とする相対パス)
         http://www.example.com/login (外部サイトのURL)
         redirect:myapp://example.com (モバイルアプリのカスタムスキームを持つURL)

 このクラスは不変クラスである。
 
Author:
Iwauo Tajima <iwauo@tis.co.jp>
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    static final Pattern
    コンテンツパス中のディレクトリとして許容される文字列。
    static final String
    対応するスキーム名
  • Method Summary

    Modifier and Type
    Method
    Description
    boolean
    このリソースの実体が存在するかどうか判定する。
    パスからディレクトリを表す部分を返す。
    パスのホスト部を返す。 ポート番号が設定されている場合には、ポート番号を含んだ値を返す。
    リソースの内容をストリームで読み出すためのInputStreamを返す。
    パス文字列を返す。 パスにクエリーパラメータやフラグメントがある場合、 これらを含んだ値をパスとして返す。
    リソースの内容を読み出すためのReaderを返す。
    リソースのファイルシステム上での絶対パスを返す。
    リソース名を返す。
    このリソースパスのスキーム名を返す。
    boolean
    レスポンスがリダイレクトかどうか判定する。
    boolean
    設定されたパスが相対パスかどうか。
    リソースパスの文字列表現そのものを返す。
    リソースの文字列表現からResourceLocatorオブジェクトを生成する。

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
  • Field Details

    • SCHEMES

      public static final String SCHEMES
      対応するスキーム名
      See Also:
    • ALLOWED_CHAR

      public static final Pattern ALLOWED_CHAR
      コンテンツパス中のディレクトリとして許容される文字列。

       "/", "~" はNG。
       2以上連続する"."もNG。
       
  • Method Details

    • valueOf

      public static ResourceLocator valueOf(String path)
      リソースの文字列表現からResourceLocatorオブジェクトを生成する。

      "file|classpath|forward|servlet|redirect|https|http"に含まれないスキームを指定した場合、スキームは常に「servlet」となる。

      Parameters:
      path - リソースの文字列表現
      Returns:
      生成されたオブジェクト
      Throws:
      HttpErrorResponse - リソースパスが無効な書式である場合
    • getScheme

      public String getScheme()
      このリソースパスのスキーム名を返す。
      Returns:
      スキーム名
    • isRelative

      public boolean isRelative()
      設定されたパスが相対パスかどうか。
      Returns:
      相対パス表記であればtrue。 コンテキストクラスローダ上のリソースである場合、常にfalse
    • getResourceName

      public String getResourceName()
      リソース名を返す。
      Returns:
      リソース名
    • getPath

      public String getPath()
      パス文字列を返す。 パスにクエリーパラメータやフラグメントがある場合、 これらを含んだ値をパスとして返す。
      Returns:
      パス文字列
    • toString

      public String toString()
      リソースパスの文字列表現そのものを返す。
      Overrides:
      toString in class Object
    • getRealPath

      public String getRealPath() throws UnsupportedOperationException
      リソースのファイルシステム上での絶対パスを返す。
      Returns:
      絶対パスを返す。絶対パスが取得できない場合nullを返す
      Throws:
      UnsupportedOperationException - 静的ファイルでもクラスローダ上のリソースでもない場合
    • exists

      public boolean exists()
      このリソースの実体が存在するかどうか判定する。
      Returns:
      このリソースの実体が存在する場合はtrue。 内部フォーワード/サーブレットフォーワードの場合は常にtrue。 リダイレクトである場合は常にfalse
    • getReader

      public Reader getReader() throws FileNotFoundException
      リソースの内容を読み出すためのReaderを返す。
      Returns:
      リソースの内容を読み出すためのReader
      Throws:
      FileNotFoundException - 静的ファイルでもクラスローダ上のリソースでもない場合か、 静的ファイルかクラスローダ上のリソースだが絶対パスを取得できなかった場合
    • getInputStream

      public InputStream getInputStream() throws FileNotFoundException
      リソースの内容をストリームで読み出すためのInputStreamを返す。
      Returns:
      リソースの内容を読み出すためのInputStream
      Throws:
      FileNotFoundException - 静的ファイルでもクラスローダ上のリソースでもない場合か、 静的ファイルかクラスローダ上のリソースだが絶対パスを取得できなかった場合
    • isRedirect

      public boolean isRedirect()
      レスポンスがリダイレクトかどうか判定する。
      Returns:
      レスポンスがリダイレクトであればtrue
    • getHostname

      public String getHostname()
      パスのホスト部を返す。 ポート番号が設定されている場合には、ポート番号を含んだ値を返す。
      Returns:
      パスのホスト部
    • getDirectory

      public String getDirectory()
      パスからディレクトリを表す部分を返す。
      Returns:
      パスのディレクトリ部