CN107766344A - 一种模板渲染的方法、装置及浏览器 - Google Patents
一种模板渲染的方法、装置及浏览器 Download PDFInfo
- Publication number
- CN107766344A CN107766344A CN201610671634.9A CN201610671634A CN107766344A CN 107766344 A CN107766344 A CN 107766344A CN 201610671634 A CN201610671634 A CN 201610671634A CN 107766344 A CN107766344 A CN 107766344A
- Authority
- CN
- China
- Prior art keywords
- template
- service
- unit
- business
- data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/958—Organisation or management of web site content, e.g. publishing, maintaining pages or automatic linking
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Computing Systems (AREA)
- Data Mining & Analysis (AREA)
- Stored Programmes (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本申请提供一种模板渲染的方法、装置及浏览器,所述方法包括:获取用户的网页浏览请求;确定所述网页浏览请求对应的模板;基于所述模板调用业务服务返回的数据进行模板渲染,生成对应的网页页面,其中,所述数据包括:模板渲染过程中直接从服务工厂中获取的业务服务的数据;向所述用户返回所述网页页面。本申请实施例中,通过对渲染引擎的扩展,建立了模板与业务服务之间的对应关系,模板渲染可以直接使用业务服务执行返回的数据,使控制器不需要为模板进行业务数据的组装,而是让业务层的服务数据直接填充到确定的模板中,这样不但大大减少了控制器的代码编写,而且提高了模板渲染操作的执行效率。
Description
技术领域
本申请涉及网络技术领域,特别涉及一种模板渲染的方法、装置及浏览器。
背景技术
近年来,随着网站技术的发展,每天可能会有几十亿的页面访问量,而快速的向用户展示商品信息以及为不同的用户展示不同的商品信息已经成为各大网站竞争的主要手段。但是,由于海量商品信息的存在,且需要展示的信息的多样化。在模板渲染前,控制器(Controller)需要调用多个应用服务来组装模板渲染所需的所有模板数据,同时,还需要选择使用哪个模板来渲染页面,然后由渲染引擎将模板数据(Model)填充到模板中,得到最终的页面源码(html),最后,将页面源码返回给用户浏览器。
现有的模板渲染中,由于Controller需要调用多个业务服务来组装模板渲染所需的数据,增加了控制器的代码编写,降低了模板渲染操作的执行效率。
发明内容
有鉴于此,本申请提供一种模板渲染的方法、装置及浏览器,以解决现有技术中由于控制器需要调用多个业务服务来组装模板渲染所需的数据,增加了控制器的代码编写,而导致模板渲染操作的执行效率降低的技术问题。
具体地,本申请是通过如下技术方案实现的:
第一方面提供一种模板渲染的方法,包括:
获取用户的网页浏览请求;
确定所述网页浏览请求对应的模板;
基于所述模板调用业务服务返回的数据进行模板渲染,生成对应的网页页面,其中,所述数据包括:模板渲染过程中直接从服务工厂中获取的业务服务的数据;
向所述用户返回所述网页页面。
可选的,基于所述模板调用业务服务返回的数据进行模板渲染,生成对应的网页页面包括:
读取所述模板;
将读取的所述模板解析为抽象语法树;
遍历抽象语法树中的每个节点;
每遍历到一个节点时,利用所述节点的变量名在模板渲染上下文对象中查找对应的变量值;
如果查找到对应的变量值,则利用所述变量值去渲染所述节点;
如果没有查找到对应的变量值,则利用所述变量名从服务工厂中查找对应的业务服务;
如果查找到对应的业务服务,则执行所述业务服务,并把执行所述业务服务的数据作为变量值来渲染所述节点;
渲染所述抽象语法树中的每个节点后,生成网页页面。
可选的,所述抽象语法树中包括变量节点,所述变量节点用来表示所述节点在渲染过程中会被替换为对应的变量值。
可选的,还包括:
在模板渲染前,利用依赖注入容器收集所有的业务服务;
建立所述业务服务与服务名之间的对应关系,以便于根据所述服务名查找到对应的业务服务。
可选的,所述利用依赖注入容器收集所有的业务服务,包括:
在依赖注入容器初始化后,遍历依赖注入容器中所有服务对象的方法;
判断所述方法上是否有特定的注解标识的注解,如果有,则确定所述方法就是一个服务方法,并将注解的值作为服务工厂中的键;
将所述服务方法包装为一个服务结果代理对象,将所述服务结果代理对象作为值保存到服务工厂中,以便于模板渲染时根据服务工厂中的键来查找服务结果代理对象。
第二方面提供一种模板渲染装置,包括:
获取单元,用于获取用户的网页浏览请求;
第一确定单元,用于确定所述网页浏览请求对应的模板;
第一渲染单元,用于基于所述模板调用业务服务返回的数据进行模板渲染,其中,所述数据包括:模板渲染过程中直接从服务工厂中获取的业务服务的数据;
生成单元,用于根据所述第一渲染单元的渲染结果生成对应的网页页面;
发送单元,用于向所述用户返回所述网页页面。
可选的,所述渲染单元包括:
读取单元,用于读取所述模板;
解析单元,用于将读取的所述模板解析为抽象语法树;
第一遍历单元,用于遍历抽象语法树中的每个节点;
第一判断单元,用于在所述第一遍历单元每遍历到一个节点时,判断利用所述节点的变量名在模板渲染上下文对象中是否查找对应的变量值;
第二渲染单元,用于在所述第一判断单元判定在所述模板渲染上下文对象中查找到对应的变量值时,利用所述变量值去渲染所述节点;
第二判断单元,用于在所述第一判断单元判定在所述模板渲染上下文对象中没有查找到对应的变量值时,判断利用所述变量名是否从服务工厂中查找到对应的业务服务;
执行单元,用于在所述第二判断单元判定查找到对应的业务服务时,执行所述业务服务;
第三渲染单元,用于将所述执行单元执行所述业务服务的数据作为变量值来渲染所述节点。
可选的,还包括:
收集单元,用于在模板渲染前,利用依赖注入容器收集所有的业务服务;
建立单元,用于建立所述业务服务与服务名之间的对应关系,以便于根据所述服务名查找到对应的业务服务。
可选的,所述收集单元包括:
第二遍历单元,用于在依赖注入容器初始化后,遍历依赖注入容器中所有服务对象的方法;
第三判断单元,用于判断所述方法上是否有特定的注解标识的注解;
第二确定单元,用于在所述第三判断单元判断有注解时,确定所述方法为服务方法,并将注解的值作为服务工厂中的键;
包装单元,用于将所述服务方法包装为一个服务结果代理对象;
存储单元,用于将所述服务结构代理对象作为值保存到服务工厂中,以便于模板渲染时根据服务工厂中的键来查找服务结果代理对象。
第三方面提供一种浏览器,包括:控制模块、模板和业务处理模块,其中,
所述控制模块,用于在接收到用户发送的网页浏览请求时,向所述模板发送与所述网页浏览请求对应的模板选择请求;
所述模板,用于在接收到所述模板选择请求时,选择与所述网页浏览请求对应的模板,并向所述业务处理模块发送业务服务的调用请求;
所述业务处理模块,用于在接收到所述调用请求时,根据所述调用请求生成对应的数据,并将所述数据返回给所述模板;其中,所述数据包括:模板渲染过程中直接从服务工厂中获取的业务服务的数据;
所述模板,用于接收所述业务处理模块返回的数据,并根据所述数据进行模板渲染,生成对应的网页页面,并向所述用户返回所述网页页面。
本申请实施例中,通过对渲染引擎的扩展,建立了模板与业务服务之间的对应关系,模板渲染可以直接使用业务服务执行返回的数据,使控制器不需要为模板进行业务数据的组装,而是让业务层的服务数据直接填充到确定的模板中,这样不但大大减少控制器的代码编写,而且提高了模板渲染操作的执行效率。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请。
附图说明
图1是本申请实施例提供的一种模板渲染的方法的流程图;
图2是本申请实施例提供的一种模板渲染具体实现过程的流程图;
图3是本申请实施例提供的模板渲染的装置所在设备的一种硬件结构图;
图4是本申请实施例提供的一种模板渲染的装置的结构示意图;
图5是本申请实施例提供的一种模板渲染的装置的另一结构示意图;
图6是本申请实施例中提供的一种模板渲染设备的结构示意图;
图7是本申请实施例中提供的一种webx框架的应用示意图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本申请可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
请参阅图1,是本申请实施例提供的一种模板渲染的方法的流程图;该实施例中,以WEB开发模式,即MVC模式为例,所述方法包括:
步骤101:获取用户的网页浏览请求;
服务平台接收用户的网页浏览请求,而网页浏览请求中通常携带有用户指定的统一资源定位符(URL,Uniform Resource Locator,又称为网页地址):该实施例中的服务平台,可以是服务器,也可以是控制器,比如MVC模式中的控制器(Controller)等。
步骤102:确定所述网页浏览请求对应的模板;
该步骤中,服务平台可以根据网页浏览请求中的携带的URL来确定对应的模板,其中,模板,以Java语言为例,可以是Velocity模板等。
步骤103:基于所述模板调用业务服务返回的数据进行模板渲染,生成对应的网页页面;
该实施例中,一种模板渲染具体实现过程如下:模板被解析成抽象语法树,通过遍历渲染抽象语法树中的每个节点来完成整个页面的渲染。遍历的过程中,每碰到一个节点,就用这个节点的变量名在模板渲染上下文对象(context)中查找,如果找到了,就用变量值去渲染这个节点。这是一般模板渲染引擎的做法,而本申请是在常规的模板渲染引擎的基础上进行了一定的扩展,即如果没有在context找到该节点的变量名,就用该节点的变量名从服务工厂中查找对应的业务服务;如果找到业务服务,就执行该业务服务,并将执行业务服务的返回数据作为变量值来渲染这个节点。最后,在所述抽象语法树中的每个节点渲染后,生成网页页面。其中,需要说明的是,本实施例中的网页页面为html源码。
该步骤的具体实现过程详见图2,在此不再赘述。
步骤104:向所述用户返回所述网页页面。
也就说,向所述用户浏览器返回所述网页页面,以便于所述浏览器对网页页面转换后显示给所述用户。
该实施例中,由于渲染后得到的页面是html源码,该html源码只有通过浏览器才能显示给用户,因此,需要先将该html源码返回给用户浏览器,浏览器在将转换的页面显示给该用户。
本申请实施例中,通过对渲染引擎的扩展,建立了模板与业务服务之间的对应关系,模板渲染可以直接使用业务服务执行返回的数据,使Controller不需要为模板进行业务数据的组装,而是让业务层的业务服务数据直接填充到确定的模板中,这样不但大大减少Controller的代码编写,而且提高了模板渲染操作的执行效率。
还请参阅图2,为本申请实施例提供的一种模板渲染过程的流程图,该实施例中,以服务平台以控制器为例,具体包括:
步骤201:读取所述模板;
步骤202:将读取的所述模板解析为抽象语法树;
步骤203:遍历抽象语法树中的每个节点;
步骤204:判断遍历到的每一个节点的节点类型,如果是变量,则执行步骤205;如果为文本数据,执行步骤210;
步骤205:判断所述节点的变量名在模板渲染上下文对象(context)中是否查找对应的变量值;如果查找到,执行步骤206;否则,执行步骤207;
步骤206:利用所述变量值去渲染所述节点,之后渲染结束;
步骤207:判断利用所述变量名从服务工厂中是否查找对应的业务服务;如果查找到,执行步骤208;否则,执行步骤209;
步骤208:执行所述业务服务,并把执行所述业务服务的数据作为变量值来渲染所述节点;
步骤209:渲染异常;
步骤210;利用所述文本数据去渲染所述节点;
步骤211:渲染所述抽象语法树中的每个节点后,生成网页页面。
也就是说,该实施例中,模板被解析成抽象语法树,通过遍历渲染抽象语法树中的每个节点来完成整个页面渲染。遍历的过程中,每碰到一个节点,就用这个节点的变量名在模板渲染上下文对象(context)中查找,如果找到了,就用变量值去渲染这个节点。这是一般模板渲染引擎的做法,而本申请实施例中,是在常规的模板渲染引擎的基础上进行了一定的扩展,即如果没有在模板渲染上下文对象(context)找到该变量名,就用变量名从服务工厂中查找对应的业务服务;如果找到业务服务,就执行该业务服务,把业务服务的返回数据作为变量值来渲染这个节点。以velocity渲染引擎(比如Java语言的一个开源模板渲染引擎)为例,修改后的触发式模板渲染的实现方式如下:
有上述方式可知,Velocity会把模板解析成抽象语法树,该抽象语法树中包括:变量节点,比如,ASTReference等,变量节点用来表示该节点在渲染过程中会被替换为对应的变量值,比如getVariableValue方法的参数variable就是变量名。本申请实施例在解析模板时,用这个新的变量节点实现代替原有的Velocity的实现,以实现velocity渲染功能的增强和扩展。
可选的,在另一实施例中,该实施例在上述实例的基础上,还可以包括:在模板渲染前,利用依赖注入(Spring)容器收集所有的业务服务;建立所述业务服务与服务名之间的对应关系,以便于根据所述服务名查找到对应的业务服务。
其中,所述利用依赖注入(Spring)容器收集所有的业务服务,包括:先在Spring容器初始化后,遍历Spring容器中所有服务对象的方法;然后,判断所述方法上是否有特定的注解标识(比如:Java语言注解类似这样@ServiceId(“XXX”))的注解,如果有,则确定所述方法就是一个服务方法,并将注解的值作为服务工厂中的键(key);最后,将所述服务方法包装为一个服务结果代理对象,将所述服务结构代理对象作为值保存到服务工厂中,以便于模板渲染时根据服务工厂中的键(key)来查找服务结果代理对象。
也就是说,该实施例中,在渲染模板之前,需要提前收集好所有的业务服务,当需要某个服务的执行结果时,可以根据服务名称找到对应的服务并执行服务,得到执行结果。
本申请实施例提供的服务工厂的接口如下:
该实施例中,服务工厂的实现可以根据业务需要来设置。下面介绍一下本申请提供的一种非常典型的服务工厂的实现过程:
业务服务的收集依赖于Spring容器,在Spring容器初始化后,遍历Spring容器中所有服务对象的方法,如果有方法上有特定的注解标识的注解,则认为这个方法就是一个服务方法,然后用注解的值作为服务工厂中的key,把服务方法包装为一个服务结果代理对象,用这个代理对象作为值保存到服务工厂中,以便于模板渲染时根据服务工厂中的key来查找服务结果代理对象。其中,特定的注解标识(比如:Java语言注解类似这样@ServiceId(“XXX”))的用法如下所示:
其中,特定的注解标识(比如:Java语言注解类似这样@ServiceId(“XXX”))的值相当于是给服务的方法取了个别名,它与模板中使用的变量保持一致。如果用本申请的方式来渲染模板,则不需要在Controller(控制器)中调用OfferService和SellerService并把返回结果放到模板渲染上下文对象(context)中,模板渲染时直接自动调用上面的两个服务的方法。模板文件内容应该是这样的:
<html>
<body>
商品总共有${offerListService.count}个
卖家总共有${serllerListService.size}个
</body>
</html>
可以看到模板中变量名直接与方法上的注解的名称对应。
服务结果代理对象的作用是根据当前请求执行服务,得到最终的服务结果。以下是一种典型的服务结果代理对象的实现:
该服务结果代理类的设计,一方面利用当前的请求(request)对象来执行服务,另一方面将执行的结果缓存到request对象中,以免下次再次调用同一个服务结果代理对象时重复调用服务。在创建服务结果代理对象时,需要传入IFaceMethodInvoker和HttpServletRequest。IFaceMethodInvoker其实就是服务的方法的包装,HttpServletRequest就是当前的请求,因为服务方法的执行依赖于当前请求对象(HttpServletRequest),比如:搜索不同词,商品的个数应该不同,这个后面的业务服务的执行会详细介绍。
需要说明的是,CachedServiceResultProxy类中有两个属性:IFaceMethodInvoker serviceInvoker和HttpServletRequest request,服务执行时,只需要把request(请求对象)中的参数信息,注入到服务的方法的参数中(类似SpirngMVC、Struts、Webx开源框架中的参数绑定功能,这是一种常见的技术),即可通过java反射方式执行服务方法,得到服务执行结果。
需要说明的是,现在的MVC(一种公知的web开发模式)框架有很多,比较流行的有SpringMVC、Struts2和阿里常用的Webx等。本申请实施例提供的模板渲染的方法和装置不但可以直接适用于Java语言,还可以适用于其他任何模板渲染技术,比如:javascript、node.js、python等。
本申请提供的模板渲染的方法,也可以称为触发式渲染模版的方法,即渲染模板前不需要为模板中的所有变量准备其相应的变量值,而是当模版顺序渲染时,碰到变量名就去执行对应的服务方法并以服务的执行返回结果作为变量值,降低了控制器的代码编写,提高了模板渲染操作的执行效率。
与前述模板渲染的方法的实施例相对应,本申请还提供了模板渲染的装置的实施例。
本申请提供的模板渲染的装置的实施例可以应用在设备上。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在设备的处理器易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图3所示,为本申请提供的模板渲染装置321备的一种硬件结构图,除了图3所示的处理器31、内存32、网络接口33、以及非易失性存储器34之外,实施例中装置所在的设备通常根据该设备的实际功能,还可以包括其他硬件,对此不再赘述。
请参考图4,为本申请实施例提供的一种模板渲染的装置的结构示意图,所述装置包括:获取单元41,第一确定单元42,第一渲染单元43,生成单元44和发送单元45,其中,
获取单元41,用于获取用户的网页浏览请求;
第一确定单元42,用于确定所述网页浏览请求对应的模板;
第一渲染单元43,用于基于所述模板调用业务服务返回的数据进行模板渲染;
生成单元44,用于根据所述第一渲染单元的渲染结果生成对应的网页页面;
发送单元45,用于向所述用户返回所述网页页面;也就是说,向用户浏览器返回所述网页页面,以便于所述浏览器对网页页面转换后显示给所述用户。
可选的,在另一实施例中,所述第一渲染单元包括:读取单元,解析单元,第一遍历单元,第一判断单元,第二渲染单元,第二判断单元,执行单元和第二渲染单元(图中未示),其中,
读取单元,用于读取所述模板;
解析单元,用于将读取的所述模板解析为抽象语法树;
第一遍历单元,用于遍历抽象语法树中的每个节点;
第一判断单元,用于在所述第一遍历单元每遍历到一个节点时,判断利用所述节点的变量名在模板渲染上下文对象中是否查找对应的变量值;
第二渲染单元,用于在所述第一判断单元判定在所述模板渲染上下文对象中查找到对应的变量值时,利用所述变量值去渲染所述节点;
第二判断单元,用于在所述第一判断单元判定在所述模板渲染上下文对象中没有查找到对应的变量值时,判断利用所述变量名是否从服务工厂中查找到对应的业务服务;
执行单元,用于在所述第二判断单元判定查找到对应的业务服务时,执行所述业务服务;
第三渲染单元,用于将所述执行单元执行所述业务服务的数据作为变量值来渲染所述节点。
可选的,在另一实施例中,所述解析单元解析得到的抽象语法树中包括变量节点,所述变量节点用来表示所述节点在渲染过程中会被替换为对应的变量值。
可选的,在另一实施例中,所述装置还可以包括:收集单元51和建立单元52,其结构示意图如图5所示,其中,
收集单元51,用于在模板渲染前,利用依赖注入容器收集所有的业务服务;
建立单元52,与第一渲染单元连接,用于建立所述业务服务与服务名之间的对应关系,以便于根据所述服务名查找到对应的业务服务。
可选的,在另一实施例中,所述收集单元包括:第二遍历单元,第三判断单元,第二确定单元,包装单元和存储单元(图中未示),其中,
第二遍历单元,用于在依赖注入容器初始化后,遍历依赖注入容器中所有服务对象的方法;
第三判断单元,用于判断所述方法上是否有特定的注解标识的注解;
第二确定单元,用于在所述第三判断单元判断有注解时,确定所述方法为服务方法,并将注解的值作为服务工厂中的键;
包装单元,用于将所述服务方法包装为一个服务结果代理对象;
存储单元,用于将所述服务结构代理对象作为值保存到服务工厂中,以便于模板渲染时根据服务工厂中的键来查找服务结果代理对象。
上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
本申请实施例中,渲染模板前不需要为模板中的所有变量准备其相应的变量值,而是当模版顺序渲染时,碰到变量名就去执行对应的服务方法并以服务的执行返回结果作为变量值。不但降低了控制器的代码编写,还提高了模板渲染操作的执行效率。
还请参阅图6,为本申请实施例中提供的一种浏览器的结构示意图,如图所示,包括:控制模块61,业务处理模块62和模板63,其中,
所述控制模块61,用于在接收到用户64发送的网页浏览请求时,向所述模板63发送与所述网页浏览请求对应的模板选择请求;
所述模板63,用于在接收到所述模板选择请求时,选择与所述网页浏览请求对应的模板,并向所述业务处理模块62发送业务服务的调用请求;
所述业务处理模块62,用于在接收到所述调用请求时,根据所述调用请求生成对应的数据,并将所述数据返回给所述模板63;其中,所述数据包括:模板渲染过程中直接从服务工厂中获取的业务服务的数据;
所述模板63,用于接收所述业务处理模块62返回的数据,并根据所述数据进行模板渲染,生成对应的网页页面,并向所述用户64返回所述网页页面,其中,所述数据包括:模板渲染过程中从服务工厂中获取的业务服务的数据。
其中,控制模块61基于所述模板调用业务服务返回的数据进行模板渲染,生成对应的网页页面具体详见上述,在此不再赘述。
为了便于理解,下面以具体的实例来说明。
如图7所示,为本申请实施例中提供的一种模板渲染的应用示例图。图7以webx框架为例,每个页面的区块都有一个模板(View)和控制器(Controller),这里面Controller主要是对业务层的业务服务进行组装,然后把组装后的数据提供给模板渲染。从图7中可以看出,面包屑模板、导航模板、主数据区模板中都需要用到引擎数据,所以这三个模板中Controller都需要调用引擎数据服务。如果采用上述本申请的技术方案,通过对渲染引擎的扩展,使Controller不需要为模板进行业务数据的组装,而是让业务层的业务服务数据直接填充到模板中,这样可以大大减少Controller的代码编写,也提高了模板渲染操作的执行效率。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本申请方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。
Claims (10)
1.一种模板渲染的方法,其特征在于,包括:
获取用户的网页浏览请求;
确定所述网页浏览请求对应的模板;
基于所述模板调用业务服务返回的数据进行模板渲染,生成对应的网页页面,其中,所述数据包括:模板渲染过程中从服务工厂中获取的业务服务的数据;
向所述用户返回所述网页页面。
2.根据权利要求1所述的方法,其特征在于,基于所述模板调用业务服务返回的数据进行模板渲染,生成对应的网页页面包括:
读取所述模板;
将读取的所述模板解析为抽象语法树;
遍历抽象语法树中的每个节点;
每遍历到一个节点时,利用所述节点的变量名在模板渲染上下文对象中查找对应的变量值;
如果查找到对应的变量值,则利用所述变量值去渲染所述节点;
如果没有查找到对应的变量值,则利用所述变量名从服务工厂中查找对应的业务服务;
如果查找到对应的业务服务,则执行所述业务服务,并把执行所述业务服务的数据作为变量值来渲染所述节点;
渲染所述抽象语法树中的每个节点后,生成网页页面。
3.根据权利要求2所述的方法,其特征在于,所述抽象语法树中包括变量节点,所述变量节点用来表示所述节点在渲染过程中会被替换为对应的变量值。
4.根据权利要求1至3任一项所述的方法,其特征在于,还包括:
在模板渲染前,利用依赖注入容器收集所有的业务服务;
建立所述业务服务与服务名之间的对应关系,以便于根据所述服务名查找到对应的业务服务。
5.根据权利要求4所述的方法,其特征在于,所述利用依赖注入容器收集所有的业务服务,包括:
在依赖注入容器初始化后,遍历依赖注入容器中所有服务对象的方法;
判断所述方法上是否有特定的注解标识的注解,如果有,则确定所述方法就是一个服务方法,并将注解的值作为服务工厂中的键;
将所述服务方法包装为一个服务结果代理对象,将所述服务结果代理对象作为值保存到服务工厂中,以便于模板渲染时根据服务工厂中的键来查找服务结果代理对象。
6.一种模板渲染装置,其特征在于,包括:
获取单元,用于获取用户的网页浏览请求;
第一确定单元,用于确定所述网页浏览请求对应的模板;
第一渲染单元,用于基于所述模板调用业务服务返回的数据进行模板渲染,其中,所述数据包括:模板渲染过程中直接从服务工厂中获取的业务服务的数据;
生成单元,用于根据所述第一渲染单元的渲染结果生成对应的网页页面;
发送单元,用于向所述用户返回所述网页页面。
7.根据权利要求6所述的装置,其特征在于,所述渲染单元包括:
读取单元,用于读取所述模板;
解析单元,用于将读取的所述模板解析为抽象语法树;
第一遍历单元,用于遍历抽象语法树中的每个节点;
第一判断单元,用于在所述第一遍历单元每遍历到一个节点时,判断利用所述节点的变量名在模板渲染上下文对象中是否查找对应的变量值;
第二渲染单元,用于在所述第一判断单元判定在所述模板渲染上下文对象中查找到对应的变量值时,利用所述变量值去渲染所述节点;
第二判断单元,用于在所述第一判断单元判定在所述模板渲染上下文对象中没有查找到对应的变量值时,判断利用所述变量名是否从服务工厂中查找到对应的业务服务;
执行单元,用于在所述第二判断单元判定查找到对应的业务服务时,执行所述业务服务;
第三渲染单元,用于将所述执行单元执行所述业务服务的数据作为变量值来渲染所述节点。
8.根据权利要求6至7任一项所述的装置,其特征在于,还包括:
收集单元,用于在模板渲染前,利用依赖注入容器收集所有的业务服务;
建立单元,用于建立所述业务服务与服务名之间的对应关系,以便于根据所述服务名查找到对应的业务服务。
9.根据权利要求8所述的装置,其特征在于,所述收集单元包括:
第二遍历单元,用于在依赖注入容器初始化后,遍历依赖注入容器中所有服务对象的方法;
第三判断单元,用于判断所述方法上是否有特定的注解标识的注解;
第二确定单元,用于在所述第三判断单元判断有注解时,确定所述方法为服务方法,并将注解的值作为服务工厂中的键;
包装单元,用于将所述服务方法包装为一个服务结果代理对象;
存储单元,用于将所述服务结构代理对象作为值保存到服务工厂中,以便于模板渲染时根据服务工厂中的键来查找服务结果代理对象。
10.一种浏览器,其特别在于,包括:控制模块、模板和业务处理模块,其中,
所述控制模块,用于在接收到用户发送的网页浏览请求时,向所述模板发送与所述网页浏览请求对应的模板选择请求;
所述模板,用于在接收到所述模板选择请求时,选择与所述网页浏览请求对应的模板,并向所述业务处理模块发送业务服务的调用请求;
所述业务处理模块,用于在接收到所述调用请求时,根据所述调用请求生成对应的数据,并将所述数据返回给所述模板;其中,所述数据包括:模板渲染过程中直接从服务工厂中获取的业务服务的数据;
所述模板,还用于接收所述业务处理模块返回的数据,并根据所述数据进行模板渲染,生成对应的网页页面,并向所述用户返回所述网页页面。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610671634.9A CN107766344B (zh) | 2016-08-15 | 2016-08-15 | 一种模板渲染的方法、装置及浏览器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610671634.9A CN107766344B (zh) | 2016-08-15 | 2016-08-15 | 一种模板渲染的方法、装置及浏览器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107766344A true CN107766344A (zh) | 2018-03-06 |
CN107766344B CN107766344B (zh) | 2021-07-30 |
Family
ID=61259862
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610671634.9A Active CN107766344B (zh) | 2016-08-15 | 2016-08-15 | 一种模板渲染的方法、装置及浏览器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107766344B (zh) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108846877A (zh) * | 2018-06-06 | 2018-11-20 | 中国电子科技集团公司第二十九研究所 | 一种基于影像分类结果的综合制图方法及*** |
CN109324798A (zh) * | 2018-09-14 | 2019-02-12 | 山东浪潮通软信息科技有限公司 | 一种JIT即时编译web表单元数据的实现方法 |
CN109635175A (zh) * | 2018-11-06 | 2019-04-16 | 北京字节跳动网络技术有限公司 | 页面数据拼接方法、装置、可读存储介质和电子设备 |
CN110232178A (zh) * | 2019-05-29 | 2019-09-13 | 北京中亦安图科技股份有限公司 | 报表生成方法及装置 |
CN110263287A (zh) * | 2019-06-24 | 2019-09-20 | 北京字节跳动网络技术有限公司 | 页面渲染方法及设备 |
CN111104587A (zh) * | 2018-10-26 | 2020-05-05 | 北京金山云网络技术有限公司 | 网页显示方法、装置和服务器 |
CN111124528A (zh) * | 2019-11-11 | 2020-05-08 | 泰康保险集团股份有限公司 | 页面加载方法、装置、电子设备及计算机可读存储介质 |
CN112632941A (zh) * | 2019-09-23 | 2021-04-09 | 北京国双科技有限公司 | 生成pdf格式公安文书的方法、装置、设备及存储介质 |
CN112800724A (zh) * | 2020-12-29 | 2021-05-14 | 杭州涂鸦信息技术有限公司 | 可视化配置模板的可读文件导出方法及相关装置 |
CN113867827A (zh) * | 2020-06-29 | 2021-12-31 | 北京字节跳动网络技术有限公司 | 加载网页的方法和装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101126979A (zh) * | 2007-06-08 | 2008-02-20 | 北京大学 | 应用服务器公共服务松耦合接入方法 |
CN102902781A (zh) * | 2012-09-28 | 2013-01-30 | 五八有限公司 | 网页页面装修推送方法及装置 |
CN103164193A (zh) * | 2011-12-12 | 2013-06-19 | 阿里巴巴集团控股有限公司 | 一种模板的渲染方法及装置 |
US20160048480A1 (en) * | 2010-02-05 | 2016-02-18 | Oracle International Corporation | Generating and displaying active reports |
-
2016
- 2016-08-15 CN CN201610671634.9A patent/CN107766344B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101126979A (zh) * | 2007-06-08 | 2008-02-20 | 北京大学 | 应用服务器公共服务松耦合接入方法 |
US20160048480A1 (en) * | 2010-02-05 | 2016-02-18 | Oracle International Corporation | Generating and displaying active reports |
CN103164193A (zh) * | 2011-12-12 | 2013-06-19 | 阿里巴巴集团控股有限公司 | 一种模板的渲染方法及装置 |
CN102902781A (zh) * | 2012-09-28 | 2013-01-30 | 五八有限公司 | 网页页面装修推送方法及装置 |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108846877A (zh) * | 2018-06-06 | 2018-11-20 | 中国电子科技集团公司第二十九研究所 | 一种基于影像分类结果的综合制图方法及*** |
CN108846877B (zh) * | 2018-06-06 | 2023-03-31 | 中国电子科技集团公司第二十九研究所 | 一种基于影像分类结果的综合制图方法及*** |
CN109324798A (zh) * | 2018-09-14 | 2019-02-12 | 山东浪潮通软信息科技有限公司 | 一种JIT即时编译web表单元数据的实现方法 |
CN111104587A (zh) * | 2018-10-26 | 2020-05-05 | 北京金山云网络技术有限公司 | 网页显示方法、装置和服务器 |
CN109635175B (zh) * | 2018-11-06 | 2021-12-31 | 北京字节跳动网络技术有限公司 | 页面数据拼接方法、装置、可读存储介质和电子设备 |
CN109635175A (zh) * | 2018-11-06 | 2019-04-16 | 北京字节跳动网络技术有限公司 | 页面数据拼接方法、装置、可读存储介质和电子设备 |
CN110232178A (zh) * | 2019-05-29 | 2019-09-13 | 北京中亦安图科技股份有限公司 | 报表生成方法及装置 |
CN110263287A (zh) * | 2019-06-24 | 2019-09-20 | 北京字节跳动网络技术有限公司 | 页面渲染方法及设备 |
CN112632941A (zh) * | 2019-09-23 | 2021-04-09 | 北京国双科技有限公司 | 生成pdf格式公安文书的方法、装置、设备及存储介质 |
CN111124528A (zh) * | 2019-11-11 | 2020-05-08 | 泰康保险集团股份有限公司 | 页面加载方法、装置、电子设备及计算机可读存储介质 |
CN111124528B (zh) * | 2019-11-11 | 2023-06-27 | 泰康保险集团股份有限公司 | 页面加载方法、装置、电子设备及计算机可读存储介质 |
CN113867827A (zh) * | 2020-06-29 | 2021-12-31 | 北京字节跳动网络技术有限公司 | 加载网页的方法和装置 |
CN112800724A (zh) * | 2020-12-29 | 2021-05-14 | 杭州涂鸦信息技术有限公司 | 可视化配置模板的可读文件导出方法及相关装置 |
Also Published As
Publication number | Publication date |
---|---|
CN107766344B (zh) | 2021-07-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107766344A (zh) | 一种模板渲染的方法、装置及浏览器 | |
CN101211364B (zh) | 用于万维网页中暴露的资源的公共书签的方法和*** | |
CN102789484B (zh) | 一种网页信息处理方法和装置 | |
JP6744480B2 (ja) | ネットワークベースの広告データトラフィックレイテンシ削減 | |
CN105956161A (zh) | 一种信息推荐方法和装置 | |
CN102075570B (zh) | 一种基于关键字的http报文缓存机制的实现方法 | |
CN108304410A (zh) | 一种异常访问页面的检测方法、装置及数据分析方法 | |
CN104216695A (zh) | 提供页面待展现信息及展现页面信息的方法及*** | |
CN109726098A (zh) | 接口测试方法、装置及计算机可读存储介质 | |
CN110222251B (zh) | 一种基于网页分割和搜索算法的服务包装方法 | |
CN106453216A (zh) | 恶意网站拦截方法、装置及客户端 | |
CN106709073A (zh) | 一种浏览器中进行消息推送的方法和一种浏览器终端 | |
CN106126693A (zh) | 一种网页的相关数据的发送方法及装置 | |
CN106503111B (zh) | 网页转码方法、装置及客户终端 | |
CN108595468A (zh) | 一种网页数据的获取方法、装置、服务器、终端和*** | |
CN107229760B (zh) | 存储介质、电子装置、网页内容的显示方法和装置 | |
CN104063407A (zh) | 基于云计算的浏览器架构与解析方法 | |
CN107203470B (zh) | 页面调试方法和装置 | |
CN112417338B (zh) | 一种页面适配方法、***及设备 | |
CN108595457A (zh) | 一种瀑布流页面的渲染方法和装置 | |
CN102222108B (zh) | 脚本处理方法和脚本处理装置 | |
CN104182402A (zh) | 浏览器界面地址栏输入控制方法及*** | |
CN105354269B (zh) | 基于反向代理及内容过滤的Web应用语言本地化方法和*** | |
CN107483565A (zh) | 一种服务后台识别方法、代理服务器及计算机存储介质 | |
CN100596143C (zh) | Web页面流中数据共享的方法和客户端设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 1251678 Country of ref document: HK |
|
GR01 | Patent grant | ||
GR01 | Patent grant |