JSF请求处理过程(二) 请求处理过程总览(FacesServlet#service)
2009-09-24 00:00:00 来源:WEB开发网这总览,很明显是看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的构造方法中代码如下:
- ››处理报错:java/lang/NoClassDefFoundError: java...
- ››JSF 2简介:JSF向导
- ››JSF 2 简介: JSF 向导
- ››JSF 2 简介: 后来添加的 Ajax 复合组件
- ››JSF 2 fu: Ajax 组件
- ››处理反馈问题时的一点想法
- ››JSF 2.0 Ajax 世界中的 GMaps4JSF
- ››JSF请求处理过程(一) FacesServlet初始化
- ››JSF请求处理过程(二) 请求处理过程总览(FacesS...
- ››处理SQL Server表的数据插入到错误列中
- ››处理SSIS 2008中的变更数据捕获
- ››请求执行时间段与Shell函数
更多精彩
赞助商链接