パッケージ jakarta.faces.webapp

クラス FacesServlet

  • 実装されたすべてのインターフェース:
    Servlet

    public final class FacesServlet
    extends ObjectSE
    implements Servlet

    FacesServlet は、Jakarta Faces を利用してユーザーインターフェースを構築する Web アプリケーションのリクエスト処理ライフサイクルを管理する Jakarta Servlet サーブレットです。

    アプリケーションが Jakarta Servlet 3.0(およびそれ以降)コンテナーで実行されている場合、ランタイムは、HandlesTypes アノテーションで以下のクラスを宣言する ServletContainerInitializer インターフェースの実装を提供する必要があります。

    この Jakarta Servlet サーブレットは、web.xml または web-fragment.xml で明示的にマップされておらず、以下の 1 つ以上の条件に該当する場合、自動的にマップする必要があります。

    • faces-config.xml ファイルは WEB-INF にあります

    • faces-config.xml ファイルは、アプリケーションのクラスパスの jar の META-INF ディレクトリにあります。

    • .faces-config.xml で終わるファイル名は、アプリケーションのクラスパスの jar の META-INF ディレクトリにあります。

    • jakarta.faces.CONFIG_FILES コンテキストパラメーターは web.xml または web-fragment.xml で宣言されています。

    • ServletContainerInitializer 実装の onStartup() メソッドに渡されたクラスの Set は空ではありません。

    ランタイムがサーブレットを自動的にマップする必要があると判断した場合は、サーブレットを次の <url-pattern> エントリにマップする必要があります。

    • /faces/*
    • *.jsf
    • *.faces
    • *.xhtml

    *.xhtml への自動マッピングは、コンテキストパラメーター DISABLE_FACESSERVLET_TO_XHTML_PARAM_NAME で無効にできることに注意してください。

    このクラスには jakarta.servlet.annotation.MultipartConfig アノテーションを付ける必要があります。これにより、Jakarta Faces 実装が実行されている Jakarta Servlet コンテナーがマルチパートフォームデータを正しく処理します。

    このクラスに関連するセキュリティの考慮事項

    Web アプリケーションのセキュリティのトピックは横断的な関心事であり、仕様のあらゆる側面がそれに対処します。ただし、他のフレームワークと同様に、アプリケーション開発者はセキュリティに細心の注意を払う必要があります。アプリケーションの残りのセキュリティ問題の中でこれらのトピックを検討してください。これは決してセキュリティ上の関心事の完全なリストではなく、徹底的なアプリケーションレベルのセキュリティレビューの代わりにはなりません。

    プレフィックスマッピングと FacesServlet

    FacesServlet が <url-pattern>/faces/*</url-pattern> などの接頭辞 <url-pattern> を使用してマップされている場合、FacesServlet によって最初に処理されることなくビューソースへのアクセスを防ぐために何かを行う必要があります。一般的なアプローチの 1 つは、<security-constraint> をすべての facelet ファイルとフロー定義ファイルに適用することです。<security-constraint> の使用の詳細については、Jakarta Servlet Specification のデプロイメント記述子の章を参照してください。

    許容される HTTP メソッド

    Jakarta Faces Specification では、GET および POST http メソッドのみを使用する必要があります。Web アプリケーションが PUT や DELETE などの他の http メソッドを必要としない場合は、<http-method> 要素と <http-method-omission> 要素を使用して、許可される http メソッドを制限することを検討してください。これらの要素の使用に関する詳細については、Jakarta Servlet Specification のセキュリティセクションを参照してください。

    • フィールドの詳細

      • CONFIG_FILES_ATTR

        public static final StringSE CONFIG_FILES_ATTR

        Jakarta Faces 構成情報を含む、コンテキスト相対リソースパスのコンマ区切りリストのコンテキスト初期化パラメーター名(存在する場合は自動的にロードされる /WEB-INF/faces-config.xml に加えて)。

        関連事項:
        定数フィールド値
      • LIFECYCLE_ID_ATTR

        public static final StringSE LIFECYCLE_ID_ATTR

        使用する Lifecycle インスタンスのライフサイクル識別子のコンテキスト初期化パラメーター名。

        関連事項:
        定数フィールド値
      • DISABLE_FACESSERVLET_TO_XHTML_PARAM_NAME

        public static final StringSE DISABLE_FACESSERVLET_TO_XHTML_PARAM_NAME

        FacesServlet の拡張 *.xhtml への自動マッピングを無効にする必要があるかどうかをランタイムが確認する ServletContext init パラメーター。このパラメーターの値が true と大文字小文字を区別せずに等しい場合にのみ、実装はこの自動マッピングを無効にする必要があります。

        このパラメーターが指定されていない場合、この自動マッピングは上記のように有効になります。

        関連事項:
        定数フィールド値
      • AUTOMATIC_EXTENSIONLESS_MAPPING_PARAM_NAME

        public static final StringSE AUTOMATIC_EXTENSIONLESS_MAPPING_PARAM_NAME

        FacesServlet から拡張機能のないバリアント ( *.xhtml なし) への自動マッピングを有効にする必要があるかどうかを通知するために、ランタイムが参照する ServletContext 初期パラメーター。実装では、このパラメーターの値が大文字と小文字を区別せずに true と等しい場合にのみ、この自動マッピングを有効にする必要があります。

        このパラメーターが指定されていない場合、この自動マッピングは有効になりません。

        関連事項:
        定数フィールド値
    • コンストラクターの詳細

      • FacesServlet

        public FacesServlet()
    • メソッドの詳細

      • init

        public void init​(ServletConfig servletConfig)
                  throws ServletException

        必要なファクトリインスタンスを取得します。

        次で指定:
        インターフェース Servletinit 
        パラメーター:
        servletConfig - サーブレットの構成および初期化パラメーターを含む ServletConfig オブジェクト
        例外:
        ServletException - 何らかの理由で、この Faces アプリケーションの起動が失敗した場合。これには、この init() メソッドの処理前または処理中に解析される構成ファイルのエラーが含まれます。
        関連事項:
        UnavailableException, Servlet.getServletConfig()
      • service

        public void service​(ServletRequest req,
                            ServletResponse resp)
                     throws IOExceptionSE,
                            ServletException

        受信リクエストを処理し、以下の仕様に従って対応するレスポンスを作成します。

        このメソッドの request および response 引数がそれぞれ HttpServletRequest および HttpServletResponse のインスタンスでない場合、このメソッドを呼び出した結果は未定義です。

        このメソッドは、レスポンス引数(HttpServletResponse にキャスト)で sendError メソッドを呼び出し、コード HttpServletResponse.SC_NOT_FOUND を引数として渡すことにより、次の文字列を含むリクエストにレスポンスする必要があります。

         
         /WEB-INF/
         /WEB-INF
         /META-INF/
         /META-INF
         
         

        このメソッドの仕様で前述したいずれのケースもこのリクエストのサービスに適用されない場合、リクエストを処理するには次のアクションを実行する必要があります。

        このリクエストの FacesContext インスタンスを取得します。

        Application.getResourceHandler() を呼び出して、このリクエストの ResourceHandler を取得します。ResourceHandler.isResourceRequest(jakarta.faces.context.FacesContext) を呼び出します。これが true を返す場合、ResourceHandler.handleResourceRequest(jakarta.faces.context.FacesContext) を呼び出します。これが false を返す場合は、Lifecycle.attachWindow(jakarta.faces.context.FacesContext)Lifecycle.execute(jakarta.faces.context.FacesContext)Lifecycle.render(jakarta.faces.context.FacesContext) の順に呼び出します。どちらの場合も FacesException がスローされた場合は、FacesException から原因を抽出します。原因が null の場合は、FacesException からメッセージを抽出し、それを新しい ServletException インスタンスの内部に置き、FacesException インスタンスを根本原因として渡してから、ServletException インスタンスを再スローします。原因が ServletException のインスタンスである場合、原因を再スローします。原因が IOException のインスタンスである場合、原因を再スローします。それ以外の場合は、新しい ServletException インスタンスを作成し、最初の引数として原因からのメッセージを渡し、2 番目の引数として原因自体を渡します。

        実装では、FacesContext.release() がこのリクエストの Jakarta Faces 関連部分の処理で可能な限り遅く、finally ブロック内で呼び出されるようにする必要があります。

        次で指定:
        インターフェース Servletservice 
        パラメーター:
        req - 処理中の Jakarta Servlet リクエスト
        resp - 作成している Jakarta Servlet レスポンス
        例外:
        IOExceptionSE - 処理中に入出力エラーが発生した場合
        ServletException - 処理中に Jakarta Servlet エラーが発生した場合
      • destroy

        public void destroy()

        起動時に取得したすべてのリソースを解放します。

        次で指定:
        インターフェース Servletdestroy 
      • getServletInfo

        public StringSE getServletInfo()

        このサーブレットに関する情報を返します。

        次で指定:
        インターフェース ServletgetServletInfo 
        戻り値:
        サーブレット情報を含む String