具体实施方式
在现有技术中,不同的内容代码分别存储于多个内容存储模块中,全局导航代码也存储于各内容存储模块中。当需要修改全局导航代码时,开发人员需要一一修改各内容存储模块中存储的全局导航代码。这样,不但修改效率较低,而且修改出错率也较高。
本申请服务器在独立于内容存储模块的共享存储模块中存储全局导航代码。当需要修改全局导航代码时,开发人员可仅修改该共享存储模块中存储的全局导航代码。相应的,服务器在呈现页面时,可根据该共享存储模块提供的全局导航代码和内容存储模块提供的内容代码,生成包含内容和全局导航的页面文件,使得客户端呈现与页面文件对应的页面。这样就可实现全局导航代码在一处修改,在不同的页面中均生效(即,一处修改,全局生效),从而可有效提高修改效率,并降低修改出错率。
为使本申请的目的、技术方案和优点更加清楚,以下将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
以下将具体说明本申请实施例提供的页面呈现方法、装置及系统。
参见图2,为本申请实施例提供的页面呈现系统,该系统包括:
多个内容存储模块,如内容存储模块20、内容存储模块21和内容存储模块22;各内容存储模块分别用于存储内容代码;
共享存储模块23,用于存储全局导航代码;
页面呈现装置24,用于根据内容存储模块20、内容存储模块21或内容存储模块22提供的内容代码和共享存储模块23提供的全局导航代码生成页面文件,以使得客户端根据该页面文件呈现相应的页面。
需要说明的是,图2所示的各内容存储模块中存储的内容代码不同。该不同的内容代码可以为不同类别的内容代码,在实际应用场景中,该不同的内容代码可以为导航中的不同栏目对应的内容代码,例如,导航中的新闻、娱乐、视频这三个栏目的内容代码可分别存储在不同的内容存储模块中。
以下将具体说明图2所示的页面呈现装置呈现页面的方法,其中,该页面呈现装置可以是服务器。
参见图3,为本申请实施例提供的页面呈现方法的流程示意图,该方法包括:
S301、接收页面浏览请求。
在实际应用场景中,当用户需要在客户端浏览某一网页时,客户端可通过浏览器向服务器发送页面浏览请求。则服务器可接收该客户端发送的页面浏览请求。
S302、确定页面浏览请求中携带的存储模块标识。
一般的,不同类型的网页对应的内容代码存储在不同的内容存储模块中,客户端发送的页面浏览请求中可携带存储模块标识,以方便服务器根据该存储模块标识,从对应的内容存储模块中获取用户请求的网页对应的内容代码。
S303、获取存储模块标识对应的内容存储模块提供的内容代码。
例如,假设网站W的全局导航中包括新闻、娱乐、视频这三个栏目。这三个栏目对应的内容代码分别为新闻代码、娱乐代码、视频代码。新闻代码、娱乐代码、视频代码分别存储于如图4或图5所示的内容存储模块A、内容存储模块B、内容存储模块C中。
假设用户需要在手机(即客户端)上浏览网站W提供的新闻网页时,手机可通过浏览器向服务器发送页面浏览请求。服务器接收到该页面浏览请求后,可确定该页面浏览请求中携带的存储模块标识,其中,该存储模块标识可以是内容存储模块A的网络协议(InternetProtocol,IP)地址。则服务器可根据该存储模块标识获取内容存储模块A中存储的新闻代码。
S304、获取共享存储模块提供的全局导航代码。
在实际应用场景中,在通过客户端呈现页面之前,还需获取该网站W的全局导航代码,以使得客户端在呈现每个页面时,同时在该页面中呈现全局导航,这样,用户在浏览网页时,可通过该页面中呈现的全局导航从当前栏目快速切换到其他栏目。
在本申请实施例中,全局导航代码可存储于共享存储模块中。则服务器可获取该共享存储模块提供的全局导航代码。
S305、根据获取的内容代码和全局导航代码生成页面文件,以使得客户端根据该页面文件呈现页面。
具体的,服务器通过步骤S303和步骤S304获取内容代码和全局导航代码之后,可按照预设页面布局生成页面文件,将该生成的页面文件发送给客户端。客户端在接收到该页面文件后,通过浏览器渲染(Layout)与页面文件对应的页面,即,客户端通过浏览器将全局导航和新闻内容呈现在页面上供用户浏览。
在图3所示的方法中,服务器获取内容存储模块提供的内容代码,获取共享存储模块提供的全局导航代码,根据获取的内容代码和全局导航代码生成页面文件,以使得客户端根据所述页面文件呈现页面。由于全局导航代码存储于如图3所示的共享存储模块中,内容代码存储于内容存储模块中。因此,当需要修改全局导航代码时,开发人员仅需要对共享存储模块中的全局导航代码进行一次修改。当服务器在呈现页面时,可根据该共享存储模块提供的全局导航代码和内容存储模块提供的内容代码,生成包含内容和全局导航的页面文件,以使得客户端呈现相应的页面。由于不同的页面文件中的导航代码来自同一个共享存储模块,则可以保证客户端呈现的各页面中的全局导航相同,即可有效实现全局导航全局生效。这样,由于全局导航代码一次修改,就可全局生效,从而可有效提高修改效率,并降低修改出错率。
此外,由于全局导航代码仅存储于共享存储模块中,而不是存储于多个内容存储模块中。因此,开发人员可仅维护共享存储模块中的全局导航代码。这样,就可有效减少维护全局导航代码所消耗的人力、物力等资源。
在本申请实施例中,服务器在根据内容代码和全局导航代码生成页面文件之前,即获取所述全局导航代码之后,所述方法还包括:将获取的全局导航代码嵌入内容代码中。
在本申请实施例中,将全局导航代码嵌入内容代码可通过多种方式实现。例如,可通过内联框架(iframe)这一元素,或者通过模板引擎Velocity等方式将全局导航代码嵌入内容代码中。
下面以通过iframe将全局导航代码嵌入内容代码为例说明,如图4所示。
在图4中,内容代码1、内容代码2和内容代码3分别存储于内容存储模块A、内容存储模块B和内容存储模块C中,全局导航代码存储于共享存储模块中。开发人员可预先分别在内容代码1、内容代码2和内容代码3中,定义内联框架(即iframe)的路径属性,如,可定义iframe所链接的路径为共享存储模块的地址。
当服务器在获取内容存储模块A、B或C中的内容代码时,可获取iframe元素链接的共享存储模块中的全局导航代码,并将该获取的全局导航代码嵌入内容代码中。
例如,假设开发人员预先在内容代码1中的第一代码和第二代码之间,加入了iframe元素,并定义了该iframe元素的路径为共享存储模块的地址。则服务器读取内容代码1,在读取到iframe元素时,可根据该iframe元素定义的共享存储模块的地址,获取该共享存储模块中存储的全局导航代码,并将该全局导航代码嵌入第一代码和第二代码之间。
上述通过将全局导航代码嵌入内容代码,可能会存在单点故障的问题。例如,当共享存储模块存在故障时,服务器无法获取iframe元素链接的全局导航代码,也就无法使得客户端呈现任何与全局导航代码有关的页面。其次,服务器获取iframe元素链接的全局导航代码的速度,相比较获取内容代码的速度要慢,这就会降低客户端呈现相应页面的速度。
因此,在本申请实施例中,服务器在通过步骤S304获取共享存储模块提供的全局导航代码时,可从内容存储模块中获取共享存储模块预先分发到该内容存储模块中的全局导航代码。
具体的,在实际应用场景中,可预先在各内容存储模块中独立出一个设定目录,如导航系统目录(navigation,简称navi),该目录下用于存储全局导航代码。开发人员可预先将共享存储模块中存储的全局导航代码分发到各内容存储模块中的设定目录下,如图5所示。
服务器在获取全局导航代码时,具体可从内容存储模块的设定目录下获取全局导航代码。例如,服务器获取内容存储模块A中的内容代码1之后,可从该内容存储模块A中的导航系统目录(即,设定目录)下获取全局导航代码。
这样,由于服务器获取的全局导航代码是存储在内容存储模块中的,不论共享存储模块是否出现故障,都不会影响服务器从内容存储模块A中成功获取全局导航代码,从而可有效避免单点故障。
另外,服务器获取全局导航代码是直接从当前内容存储模块中获取,而不是从iframe链接的共享存储模块中获取的,这就可有效提高服务器获取全局导航代码的速度。
在本申请实施例中,开发人员可随时修改全局导航代码,并将该全局导航代码发布上线。例如,开发人员可在图2所示的页面呈现系统运行过程中修改共享存储模块中的全局导航代码,并将修改后的全局导航代码及时分发给各内容存储模块,使得各内容存储模块将修改后的全局导航代码存储在设定目录下。当服务器从内容存储模块获取内容代码后,可从设定目录获取修改后的全局导航代码。
为了保证服务器可有效的获取修改后的全局导航代码,在本申请实施例中,服务器获取共享存储模块提供的全局导航代码之前,所述方法还包括:
将存储于内容存储模块中的全局导航代码热加载到内容代码中,这样,服务器获取全局导航代码时,就可有效获取共享存储模块最近一次分发的全局导航代码。
具体的,考虑到实际应用场景中,服务器往往在图2所示的系统启动后,从缓存中获取全局导航代码,以提高服务器获取全局导航代码的速度。如图6所示,缓存可设置于内容存储模块中,且与内容存储模块中的设定目录相互独立,这样,服务器从缓存中获取全局导航代码可提高获取全局导航代码的速度。
在本申请实施例中,当图2所示的系统启动后,服务器需要获取全局导航代码时,可从缓存中获取全局导航代码。进一步的,当在缓存中未获取到该全局导航代码时,可从内容存储模块的设定目录下获取该全局导航代码,并将该全局导航代码置于缓存中,以便后续获取全局导航代码时,直接从该缓存中获取。
进一步的,考虑到实际应用场景中,开发人员在系统运行过程中,可能会修改共享存储模块中的全局导航代码。一旦修改了共享存储模块中的全局导航代码,共享存储模块仅向各内容存储模块中的设定目录分发更新后的全局导航代码。由于内容存储模块中的设定目录与缓存是相互独立的,该当前缓存中存储的全局导航代码仍是未更新的全局导航代码,而不是更新后的全局导航代码。这就可能会存在服务器从缓存中获取的全局导航代码与内容存储模块的设定目录下当前存储的全局导航代码不相同。
因此,当开发人员更新了共享存储模块中的全局导航代码,并将该全局导航代码分发到各内容存储模块的设定目录后,还需要将该设定目录下存储的全局导航代码热加载到缓存中,即更新缓存中存储的全局导航代码,这样,服务器从缓存中获取的全局导航代码与内容存储模块中的设定目录下存储的全局导航代码保持一致,也就是说,服务器可准确的获取到共享存储模块最近一次更新的全局导航代码。
也即,服务器从内容存储模块中获取共享存储模块分发到该内容存储模块中的全局导航代码时,具体可将存储于内容存储模块的设定目录中的全局导航代码热加载到缓存中,从该缓存中获取全局导航代码。
在实际应用场景中,服务器可监测设定目录下的全局导航代码,当设定目录下的全局导航代码更新时,可进行热加载。
或者,服务器可每间隔设定时间段进行一次热加载,例如,服务器可监控当前时间与全局导航代码最近一次的更新时间之间的时间段是否超过预设阈值,若是,进行热加载。
以上为本申请实施例提供的系统和方法,基于同样的思路,本申请实施例还提供了一种装置,如图7所示。
参见图7,为本申请实施例提供的页面呈现装置,不同的内容代码分别存储于多个内容存储模块中,全局导航代码存储于共享存储模块中,所述页面呈现装置包括:
接收模块71,用于接收页面浏览请求;
确定模块72,用于确定所述页面浏览请求中携带的存储模块标识;
第一获取模块73,用于获取所述存储模块标识对应的内容存储模块提供的内容代码;
第二获取模块74,用于获取所述共享存储模块提供的全局导航代码;
呈现模块75,用于根据获取的所述内容代码和全局导航代码生成页面文件,以使得客户端根据所述页面文件呈现页面。
可选的,所述装置还包括:
嵌入模块76,用于在根据获取的所述内容代码和全局导航代码生成页面文件之前,将所述全局导航代码嵌入所述内容代码中。
可选的,第二获取模块74具体用于:
从所述内容存储模块中获取所述共享存储模块分发到该内容存储模块中的全局导航代码。
可选的,所述第二获取模块74具体用于:将存储于所述内容存储模块的设定目录中的全局导航代码热加载到缓存中,从该缓存中获取所述全局导航代码。
综上所述,本申请实施例提供的页面呈现方法,服务器获取内容存储模块提供的内容代码,获取共享存储模块提供的全局导航代码,根据获取的内容代码和全局导航代码生成页面文件,以使得客户端根据所述页面文件呈现页面。由于全局导航代码存储于共享存储模块中,不同的内容代码分别存储于内容存储模块中。因此,当需要修改全局导航代码时,开发人员仅需要对共享存储模块中的全局导航代码进行一次成功的修改。当服务器在呈现不同的页面时,可根据该共享存储模块提供的修改后的全局导航代码和内容存储模块提供的不同的内容代码,分别生成不同的页面文件,使得客户端分别呈现与各页面文件对应的页面。由于各不同的页面文件中的导航代码来自同一个共享存储模块,则客户端可以保证呈现的各页面中的全局导航相同,即实现了全局导航全局生效。这样,由于全局导航代码一次修改,就可全局生效,从而可有效提高修改效率,并降低修改出错率。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flashRAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
以上仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。