OFBiz 的请求处理流程

红薯 发布于 2010/04/14 22:23
阅读 2K+
收藏 2

1.web.xml配置了
<servlet-mapping>
        <servlet-name>ControlServlet</servlet-name>
    <url-pattern>/control/*</url-pattern>
</servlet-mapping>
所 有的以/control/*形式url提交的请求均由webapp.control.ControlServlet类来完成前置处理

2.ControlServlet 主要进行了一些工作数据的加载(如userLogin,delegator等),并通过webapp.control.RequestHandler类的 doRequest方法进行分发处理

3.webapp.control.RequestHandler类读取上下文里/WEB-INF /路径下的controller.xml,进行解析,封装成bean(ConfigXMLReader.ControllerConfig对象)

4. 获取url中的真实请求(“/control/”后面的信息),从ConfigXMLReader.ControllerConfig对象的 requestMapMap成员列表中获取真实请求对应的解析数据(也是一个bean,即对每一个<request-map>标签的解析,封 装成ConfigXMLReader.RequestMap对象)

5.通过controller中的requestMap配置,处理本次 请求。具体逻辑不详细说,大体包括:
    安全认证校验
    登陆授权校验
    event的分发执行(不同的event引擎由不同的java类进行解析处理,引擎解析器由controller.xml 的<handler>标签定义,执行的结果数据在request中)
    根据event的执行返回结果,获取ConfigXMLReader.RequestMap对象中与该结果对应的的<response>标签 信息(一个ConfigXMLReader.RequestResponse对象)
    如果response需要继续执行一个新的请求,则对新的请求重复执行doRequest
    否则,按照不同的response type执行请求处理的返回,如url、cross-redirect、request-redirect等,略,主要关注一下type=view的情 况:通过renderView方法进行处理,方法参数会带有request和response
        a.从request中获取所有attribute
        b.从ConfigXMLReader.ControllerConfig对象的viewMapMap成员列表获取对应的view配置信息(一个 ConfigXMLReader.ViewMap对象)
        c.通过ViewHandler接口的render方法对该配置信息进行解析(参数中会带上request和response,该接口由view type进行实际用于解析的类的初始化,screen类型的由widget.screen.MacroScreenViewHandler类进行解析)
            c1.初始化screen类型的模板解析类(初始化信息从properties中获取)
            c2.使用解析模板等信息初始化成screen解析类(ScreenRenderer对象)
            c3.使用screen解析类对view中对应的page配置进行解析处理(ScreenRenderer对象的render方法)
            解析处理的不说了,主要来说就是从page信息获取对应的screen.xml内容的解析bean,并通过FreeMarker组件的功能执行对应的 bsh或groovy,结合screen类型的模板与screen.xml的对应配置信息,产生输出数据。因为这个时候的request和 response是从请求提交时就产生的,FreeMarker在解析bsh或groovy时,同样会将他们作为参数进行传递,所以bsh和groovy 在写代码时可以直接使用。可以套用jsp来进行理解,象是jsp页面中嵌套的java代码段,最后通过引擎连同html标签一起解析成响应输出。
        d.对response进行输出(返回客户端响应)

加载中
返回顶部
顶部