JSF哀告处理历程(二) 哀告处理历程总览(FacesServlet#service[Java编程]
本文“JSF哀告处理历程(二) 哀告处理历程总览(FacesServlet#service[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
这总览,很明显是看FacesServlet的service办法.在 FacesServlet的初始化历程中,构造出了全局的FacesContextFactory对象和LifeCycle对象.可以把 FacesContextFactory看做是一个“恳求包装工厂”,于是很明显,每当一个恳求到达FacesServlet的时刻,第一步就是拿着恳求,到包装工厂里面包装一下,而包装的后果就是一个FacesContext.代码以下:
1 FacesContext context = facesContextFactory.getFacesContext(servletConfig.getServletContext(), request, response, lifecycle);
在包装历程中,实际上是成立了一个com.sun.faces.context.FacesContextImpl对象,FacesContextImpl类担当了jsf-api项目中的javax.faces.context.FacesContext. FacesContextImpl的构造办法的第一个参数是一个叫做ExternalContext的接口的实现,查看其源代码,可以看到 ExternalContextImpl类耦合了Servlet API,而FacesContextImpl与Servlet API无关.实际上,在这里,做到了JSF可以不但仅利用在Servlet环境中,正如ExternalContext接口的注释中所说,在 Servlet环境中利用JSF和在Portlet环境中利用JSF的差别,实际上就是利用了差别的ExternalContext.在 FacesContextFactoryImpl中构造FacesContextImpl的代码以下:
1 FacesContext ctx = new FacesContextImpl(new ExternalContextImpl((ServletContext) sc,(ServletRequest) request,(ServletResponse) response),lifecycle);
FacesContextImpl的构造办法中,还做了别的一件事情,就是按照配置肯定了RenderKitFactory,明显差别的 RenderKitFactory可以产生差别的RenderKit,而差别RenderKit对象是针对差别客户端的,所以关于浏览器、移动设备等等,会有差别的RenderKit.FacesContextImpl的构造办法中代码以下:
1 this.externalContext = ec;
2 setCurrentInstance(this);
3 this.rkFactory = (RenderKitFactory)FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);
在代码中我们常常利用FacesContext.getCurrentInstance()这个静态办法来获得与当前恳求对应的 FacesContext对象,实际上是在FacesContext类里面有一个静态的ThreadLocal对象用来存放了当前恳求线程对应的 FacesContext对象,于是上面的代码中setCurrentInstance(this)就是把当前构造出来的这个FacesContext对象放到了ThreadLocal里面.
FacesContext成立出来今后,正如上面所说,要让他经过LifeCycle这个“Filter Chain”的渐渐处理了.那么,Filter Chain里面放的是一个一个Filter,那么LifeCycle这个Chain里面放的是什么呢?答案是Phases.
FacesServlet让FaceContext通过LifeCycle的处理,分成了两个部份.一个部份是调用LifeCycle的 execute办法,履行逻辑,第二个部份是调用LifeCycle的render办法,显现呼应.FacesServlet.service中代码以下:
1 lifecycle.execute(context);
2 lifecycle.render(context);
以上是“JSF哀告处理历程(二) 哀告处理历程总览(FacesServlet#service[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |