3

私はJSFが初めてで、質問があります:

私が知る限り、サーブレットは HTML リクエストを取得し、HTML レスポンスを提供するために使用されるクラスです。そのような:

HttpServletRequest リクエスト、HttpServletResponse レスポンス

しかし、典型的な JSF プロジェクトでは、これらのクラスがまったく使用されていません。代わりに、マネージド Bean と Facelet ページだけが表示されます。

ただし、web.xml には次のように表示されます。

<servlet>
   <servlet-name>Faces Servlet</servlet-name>
   <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
   <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
   <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>/faces/*</url-pattern>
</servlet-mapping>

また、私が理解している限り、JSF プロジェクトを構築するには JSTL.jar が必要です。

これらのクラスも同様です

HttpServletRequest リクエスト、HttpServletResponse レスポンス

まだJSFプロジェクトで使用されていますか? もしそうなら、どのように?

4

4 に答える 4

3

javax.servlet.http.HttpServlet使用されている。FacesServletそれは(それがであるという意味で)によって拡張されjavax.servlet.http.HttpServletます。JSFFacesServletはビューをロードし、コンポーネントツリーを構築し、イベントを処理し、応答をレンダリングします。

于 2013-03-03T13:06:03.510 に答える
3

他の人が指摘しているように、JSF 自体は、サーブレット テクノロジとの重要な関係を持って実装されています。Faces サーブレットは、それ自体がサーブレットです。

示した web.xml のマッピングは、Java EE 6 (具体的にはサーブレット 3) コンテナーで実行される JSF 2.1 実装ではオプションであることに注意してください。その場合、拡張子.jsf.facesパスfaces\*は自動的に Faces サーブレットにマップされ、ページにマップされます。

JSF 自体は、サーブレット テクノロジから抽象化しようとします。たとえば、「それを含むアプリケーション環境の性質」から抽象化する型ExternalContextがあります。実際には、これはサーブレットとポートレットの両方と互換性があることを意味します。ただし、現在のバージョンでは、これら 2 つの環境の少なくとも 1 つが必要です。

理論的には、誰かが JSF 実装を非サーブレットおよび非ポートレット環境に移植することができますが、私の知る限り、誰もこれを行っていません。

于 2013-03-03T16:48:36.337 に答える
2

JSF の実装によっては、サーブレットを使用せずに実行できる場合があります。JSF 標準では、実装者は移植性のためにサーブレット ベースの実装を提供する必要がありますが、実装者は JSF ライフサイクルを呼び出す他の方法をサポートできます。(標準のセクション 11.1.1 に記載)

ただし、この可能性を提供する実装が実際にあることは知りません。

于 2013-03-03T13:20:03.983 に答える
2

JSF 自体は という名前のサーブレットによって提供されるため、これらが使用されjavax.faces.webapp.FacesServletます。つまり、誰かがあなたのビューを呼び出し、javax.faces.webapp.FacesServlet.

于 2013-03-03T12:56:04.057 に答える