我是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项目中使用?如果是这样的话?
答案 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节)
但是我不知道实际上有任何实现可以提供这种可能性。