JSF项目可以在不使用Servlet的情况下运行吗?

时间:2013-03-03 12:54:21

标签: java jsf java-ee servlets

我是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>

据我所知,JSTL.jar也需要构建一个JSF项目。

这些课程也是如此

  

HttpServletRequest请求,HttpServletResponse响应

仍在JSF项目中使用?如果是这样的话?

4 个答案:

答案 0 :(得分:3)

使用

javax.servlet.http.HttpServlet。它由FacesServlet扩展(意味着它是javax.servlet.http.HttpServlet)。 JSF FacesServlet加载视图,构建组件树,处理事件并呈现响应。

答案 1 :(得分: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环境中,但据我所知,还没有人这样做过。

答案 2 :(得分:2)

使用它们,因为JSF本身是由名为javax.faces.webapp.FacesServlet的Servlet提供的。也就是说,当有人调用你的视图时,他们最终会调用javax.faces.webapp.FacesServlet中定义的servlet,然后这个servlet会执行渲染XML页面的所有魔法JSF。

答案 3 :(得分:2)

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

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