3

我是 JSF 的新手,我有一个问题:

据我所知,Servlet 是用于获取 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 本身的实现与 Servlet 技术有着重要的联系。Faces Servlet 本身就是一个 Servlet。

请注意,您显示的 web.xml 中的映射对于在 Java EE 6(特别是 Servlet 3)容器上运行的 JSF 2.1 实现是可选的。在这种情况下,扩展.jsf.faces路径faces\*会自动映射到 Faces Servlet,从而映射到您的页面。

JSF 本身确实尝试从 Servlet 技术中抽象出来。例如,ExternalContext类型从“其包含的应用程序环境的性质”中抽象出来。实际上,这意味着它与 Servlet 和 Portlet 兼容。但是,当前版本至少需要这两种环境中的一种。

从理论上讲,有人可以将 JSF 实现移植到非 Servlet 和非 Portlet 环境中,但据我所知,目前还没有人这样做过。

于 2013-03-03T16:48:36.337 回答
2

之所以使用它们,是因为 JSF 本身是由一个名为javax.faces.webapp.FacesServlet. 也就是说,当有人调用您的视图时,他们最终会调用 中定义的javax.faces.webapp.FacesServletservlet,然后此 servlet 将执行所有呈现您的 XML 页面的神奇 JSF 内容。

于 2013-03-03T12:56:04.057 回答
2

根据 JSF 实现,可能不使用 Servlet 就可以运行。虽然 JSF 标准要求实现者提供基于 Servlet 的实现以实现可移植性,但它允许实现者支持调用 JSF 生命周期的其他方式。(在标准第 11.1.1 节中说明)

但是我不知道实际上有任何实现确实提供了这种可能性。

于 2013-03-03T13:20:03.983 回答