JSF请求处理过程(一) FacesServlet初始化

JSF应用中,在web.xml里面配置了一个Servlet,叫做javax.faces.webapp.FacesServlet,于是可以知道,查看、了解一个请求的处理过程可以从这里开始。从官方网站上下载JSF的源代码,项目名比较古怪,叫做“mojarra”,我看的版本是1.2_12_b01.里面包含了两个子项目,一个是jsf-api,里面大多是接口以及少量关键类。另外一个项目叫做jsf-ri,对着这个"ri"邪念了半天之后,终于在兄弟提醒之下想明白了是reference implementation的意思。jsf-api是JavaEE标准的一部分,里面的类型包名都是以javax.faces开头的,而jsf-ri项目是sun针对JSF标准的一个参考实现,里面的类型的包名都是以com.sun.faces开头的。

1.FacesServlet初始化(FacesServlet#init)

系统启动的时候,会初始化FacesServlet,调用其中的init方法。里面主要做了两件事情,一个是初始化FacesContextFactory,另外一个是初始化Lifecycle对象。在jsf-api项目中,FacesServlet类是一个Servlet接口的实现类,而FacesContextFactory和Lifecycle都是接口。在jsf-ri项目中有这两个接口的实现类,分别是com.sun.faces.context.FacesContextFactoryImpl和com.sun.faces.lifecycle.LifecycleImpl类。一个想当然的事实:FacesServlet初始化的时候要根据一些配置来判断具体的FacesContextFactory和Lifecycle实现类是什么,也就是在这里,“JSF标准”和“JSF实现”接轨了。想来MyFaces等等的其他JSF实现应该不外乎两种方式,一种是改变FacesServlet的init方法中需要用到的配置的值,于是启用自己的FacesContextFactory实现和Lifecycle实现,后面的处理过程就全部走自己的逻辑了。第二种方法笨一点,可能性不大,就是把FacesServlet覆盖替换掉,其中也不需要读什么配置了,直接使用自己的实现类即可——不过这种做法估计不符合JSF规范,想来只有我等虾米民众能做的出来。主要代码如下:

1 facesContextFactory = (FacesContextFactory)FactoryFinder.getFactory(FactoryFinder.FACES_CONTEXT_FACTORY);

2 LifecycleFactory lifecycleFactory = (LifecycleFactory)FactoryFinder.getFactory(FactoryFinder.LIFECYCLE_FACTORY);

回头再来看初始化的结果,FacesContextFactory很明显是用来生产FacesContext这么个东西的。而FacesContext可以看做是一个RequestWrapper(注意这个FaceContext和ServletContext不一样,ServletContext是一个Web应用只有一个的全局对象,对应的是一个Web application,而一个FacesContext对应的是一个request,另外,RequestWrapper这个说法不严格,实际上FacesContext里面也包装了ServletContext、Response等)。而LifeCycle可以看做是一个过滤器链(类似于servlet规范里面的Filter Chain)。于是,整个JSF请求处理过程,实际上就是包装成为FaceContext的用户请求,通过类似于一个Filter Chain的LifeCycle的过程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JSF是一种用于构建Java Web 应用程序的标准框架(是Java Community Process 规定的JSR-127标准)。JSF(Java Server Faces)技术为开发基于网络用户界面的Java开发者提供了标准的编程接口API以及标签库。就像Struts框架一样,JSF定义了一套JSF标签 JSF的全称   1、Joint Strike Fighter (JSF)   2、Java Server Faces (JSF) Java Server Faces (JSF)   JSF是一种用于构建Java Web 应用程序的标准框架(是Java Community Process 规定的JSR-127标准)。它提供了一种以组件为中心的用户界面(UI)构建方法,从而简化了Java服务器端应用程序的开发。由于由Java Community Process (JCP) 推动,属于Java EE 5中的技术规范,而受到了厂商的广泛支持。   JSF(Java Server Faces)技术为开发基于网络用户界面的Java开发者提供了标准的编程接口API以及标签库。就像Struts框架一样,JSF定义了一套JSF标签,能够生成与JavaBean属性绑定在一起的HTML表单元素。从应用开发者的角度看,两种框架十分相似,但是JSF可能会得到更多的支持,因为JSFJava的标准。在未来的发展中,有可能所有的J2EE应用服务器都需要支持JSFJava Server Faces技术好处   引入了基于组件和事件驱动的开发模式,使开发人员可以使用类似于处理传统界面的方式来开发Web应用程序。提供了行为与表达的清晰分离。 不用特别的脚本语言或者标记语言来连接UI组件和Web层。JSF技术API被直接分层在Servlet API的顶端。 技术为管理组件状态提供一个丰富的体系机构、处理组件数据、确认用户输入和操作事件。 Java Server Faces应用程序   典型的JSF应用程序包含下列部分:   一组JSP页面   一组后台bean(为在一个页面上的UI组件定义的属性和函数的JavaBean组件)   应用程序配置资源文件(定义页面导航规则、配置bean和其它的自定义对象,如自定义组件)   部署描述文件( web.xml )   一组由应用程序开发者创建的自定义对象(有可能)   一些可能包含自定义组件、约束、转换器或者监听器的对象   为在页面中表现自定义对象的一组自定义tag   包含JSP页面的JSF应用程序也使用由为了表现UI组件和在页面上的其他对象的JSF技术而定义的标准的tag库。 Java Server Faces技术的重要开发框架 sun-ri、myfaces、icefaces、richfaces、seam

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值