【发布时间】:2013-02-17 14:45:45
【问题描述】:
我是 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 项目中使用?如果有怎么办?
【问题讨论】:
-
这不在问题范围内,但我强烈建议您不要使用
/faces/*作为 URL 映射,而是使用/.xhtml。为什么?因为第一个甚至会处理虚拟faces文件夹下的资源,例如图像、JS 和 CSS 文件等,并且在获得意外结果时可能会遇到问题(SO 中的很多人都遇到过类似的问题)。 -
谢谢。流程是什么意思?
-
网页中的每个资源都会变成对服务器的 GET 请求。如果您在 Chrome/Firefox(安装了 Firebug 插件)上按 F12 并转到“网络”选项卡/选项,您可以刷新(或导航到)页面并看到将有一个带有网站 URL 的 GET 请求和然后完成大量 GET 请求以获取每个资源(图像、CSS、JS 等)。这意味着,如果
FacesServlet映射到/faces/*,则这些资源中的每一个都将由FacesServlet处理。此外,您不需要为这个 Servlet 处理这种工作。 -
谢谢,很好的解释!您的意思是,将您的静态数据保存在其他文件夹中,然后在不使用 FacesServlet 的情况下获取它们?
-
实际上让 JSF 处理您的资源会带来一些好处,因为它支持国际化和版本控制,请参阅 java.wildstartech.com/Java-Platform-Enterprise-Edition/… 以了解其工作原理。
标签: java jsf jakarta-ee servlets