JSF哀告处理历程(一) FacesServlet初始化[Java编程]
本文“JSF哀告处理历程(一) FacesServlet初始化[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
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
3 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的历程.
以上是“JSF哀告处理历程(一) FacesServlet初始化[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |