公司做项目,前段用的是jsf。下面说说jsf和jsp这两个听起来很相似的概念有何区别。
Java在最近几年逐渐升温,随着JavaSE 5和Java SE 6的推出,Java的未来更显得无比辉煌。但以Java为基础的JSP在Java SE 5推出之前却一直抬不起头来,这最重要的原因就是JSP虽然功能十分强大,但最大的优点也是它的最大缺点,功能强大就意味着复杂,尤其是设计前端界面的可视化工具不多,也不够强大。因此,设计JSP页面就变得十分复杂和繁琐。不过,在Java SE 5推出的同时,Sun为了简化JSP的开发难度,推出了新的JavaServerFaces(简称JSF)规范。从而使JSP走上了康庄大道。
作为一种高度组件化的技术,开发人员可以在一些开发工具的支持下,实现拖拉式编辑操作,用户只需要简单的将 JSF组件拖到页面上,就可以很容易的进行 Web开发了。这是其作为一种组件化的技术所具有的最大好处,我们能用的组件不光是一些比较简单的输入框之类,还有更多复杂的组件可以使用的,比如 DataTable这样的表格组件, Tree这样的树形组件等等。
作为一种标准的技术,JSF还得到了相当多工具提供商的支持。同时我们也会有很多很好的免费开发工具可以使用,前不久 Sun Java Studio Creator 2 和 Oracle JDeveloper 10g作为免费的支持 JSF的开发工具发布,给 JSF带来了不小的生气。另外我们也有一些很优秀的商业开发工具可共选择,BEA Workshop (原 M7 NitroX),Exadel,MyEclipse这样的基于Eclipse的插件开发工具,为现在广大的 Eclipse用户带来了不小的便利,IBM的 Rational Application Developer和Borland的 JBuilder也是很不错的支持 JSF可视化开发的商业开发工具。
JSF和传统的Web技术有着本质上的差别,在传统的Web技术需要用户自己对浏览器请求进行捕捉,保存客户端状态,并且手工控制着页面的转向,等等。而JSF的出现,无疑给我们带来了巨大的便利,JSF提供了事件驱动的页面导航模型,该模型使应用程序开发人员能够设计应用程序的页面流。与 Struts的方式向类似的是,所有的页面流信息都定义在 JSF配置 XML文件 (faces-config.xml)中,而非硬编码在应用程序中。这很大程度简化了开发人员开发难度,简化了应用程序的开发。
同时JSF也是一种遵循模型-视图-控制器 (MVC) 模式的框架。实现了视图代码(View)与应用逻辑(Model)的完全分离,使得使用 JSF 技术的应用程序能够很好的实现页面与代码的分离。所有对 JSF页面的请求都会通过一个前端控制器 (FacesServlet)处理,系统自动处理用户的请求,并将结果返回给用户。这和传统的 MVC框架并没有太大的区别。
在JSF中不仅使用了 POJO 技术,而且还使用了类似 Spring的控制反转(IoC) (或称为依赖注入-DI)技术,在 JSF的 Backing Bean中,我们可以把视图所需要的数据和操作放进一个 Backing Bean中。同时得益于 JSF使用的 DI技术,我们可以在配置文件中初始化 Managed Bean,同时我们也可以通过这样的技术很方便的和使用类似技术的 Spring 进行整合。
如何在JSP中使用JSF
只有通过JSF和JSP相结合,才能充分发挥它的功效。JSF是通过标签库和JSP进行集成的。标签库就相当于ASP.NET的服务端组件。JSF提供了非常丰富的标签库,通过这些标签库,可以生成各种客户端模型,如HTML、WML、 XML以及JavaScript等。通过这些标签,你可以很容易建立大规模的客户端模型,并由这些标签自动处理客户端请求。