在前面的文章中,有提及Endeca的Preview特性(Endeca Preview Feature),此文将为读者揭开Preview的面纱.

在Endeca的Preivew配置项中,有两个URL配置:

  • Preview URL
  • Link Service URL

Preview URL 指向需要Preview的真实的Site Context, 比如,你的Web site Context是 : www.endeca.com , 那么此域名将是你的Preview URL的值。

Link Service URL 指向Link Servlet,此Servlet是必需的用于获取关键性数据(后面将会细讲)。

很多Endeca的开发人员,可能往往就止步于此,可能是困惑于这个Link Service URL, 同时也在好奇,这个Link Service该如何创建。

关于Link Service

Link Service 其实是一个基于Jsonp协议的Servlet , 用于支持跨域的JSON数据请求,Endeca的Link Service将会返回给当前Request URL的相应ACTION及UrlBUilder以保证Endeca的Link可以在外部Site正常使用。 简单来说Link Service让Preview的无限扩展成为可能。

如何搭建Link Service

Link Service简单来说就是一个Servlet,开发人员需要在相应的Store Server上面配置Servlet进行监听:

清单1: 在web.xml配置Link Service


<servlet>
	<servlet-name>link</servlet-name>
    	<servlet-class>atg.endeca.servlet.NucleusPreviewLinkServlet</servlet-class>
	<init-param>
	<description>
	The Nucleus component path of the NavigationStateBuilder.
	</description>
	<param-name>navigationStateBuilderComponent</param-name>
	<param-value>/atg/endeca/assembler/cartridge/manager/NavigationStateBuilder</param-value>
	</init-param>
	<init-param>
	<description>
    	The Nucleus component path of the ContentSource.
	</description>
	<param-name>contentSourceComponent</param-name>
	<param-value>/atg/endeca/assembler/cartridge/manager/WorkbenchContentSource</param-value>
	</init-param>
	</servlet>

	<servlet-mapping>
		<servlet-name>link</servlet-name>
		<url-pattern>/link.json/*</url-pattern>
	</servlet-mapping>

 清单2: Link Servlet

public class NucleusPreviewLinkServlet extends AbstractPreviewLinkServlet
{
   protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//Construct output and jsonp
response.setHeader("content-type", "application/javascript");
response.getWriter().write(jsonp);
(new JsonSerializer(response.getWriter())).write(output);
response.getWriter().write(");");
}
}

至此 Link Service 已经开发完成,回到Workbench将相应的Link Servlet 监听地址配置到相应地方即可。

Workbench获取Preview 页面数据

此图剖析了Preview的大致流程 :

Preview的主体是一个Iframe,它会远程Load 相应的数据到客户端,同时配合Link Service来修正相关URL,这样服务端的页面完整的呈现在了Workbench Preview的页面上。

 

 

 

 

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *

%d bloggers like this: