工作中我们经常会遇到这样的需求:
1.发送一段消息并在web前端展示(例如工作台就是一个很好的场景)
solution 1:
String message="xx";
sender.send(message);
这个方法第一个硬伤,如果xx包含中文或者其他字符呢?
前端看到的内容可能会出现乱码。
第二个问题,如果message内容更很长,代码的可读性就变得很差了。
solution 2:
String message=MessageResultCode.SHORT_MESSAGE.getMessage();
sender.send(message);
既然有中文的问题,我们就使用配置文件,ResultCode可以帮助我们解决这个问题,虽然如果内容长了配置文件
会有些难看,但也还可以接受。甚至如果内容含有样式,链接,等等,我们也可以通过CDATA来解决。
这个方法暂时看起来不错,不过pd似乎不让我们这么容易的完成任务。“那么我想在消息里显示下链路信息,比如链路名”。这个需求很合理,但是我们的solution 2似乎办不到。
solution 3:
我们知道webx3使用了velocity作为模板渲染引擎,所以何不把消息像velocity模板一样的渲染出来
String template="message.vm";
TemplateContext context = new MappedTemplateContext();
context.put("link", link);
context.put("chain", chain);
//merge模板
String message = templateService.getText(template, context);
sender.send(message);
代码其实很简单,新建一个模板,把所有变量放到context中去,再使用templateService渲染出来。
我们看看供应链服务一个任务模板的例子:
请审核供应链<a href="$!{link}">[$!{chain.name}]</a>编号[$!{chain.id}]-商家[$!{chain.supplierName}]-商品[$!{chain.productTitle}]
那么template路径到底怎么指定呢?这是一个问题。在回答这个问题之前我们看看templateService是如何配置的
<services:template xmlns="http://www.alibaba.com/schema/services/template/engines" searchExtensions="true">
<velocity-engine templateEncoding="UTF-8" strictReference="false" path="/templates/${component}">
<global-macros>
<name>macros.vm</name>
</global-macros>
<plugins>
<vm-plugins:fasttext-support />
<vm-plugins:renderable-support />
</plugins>
</velocity-engine>
</services:template>
事实上templateService 在渲染vm模板的时候使用velocity引擎来完成的
我们看看templateService实现类的这个方法
private boolean findTemplateInTemplateEngine(TemplateMatcher matcher) {
TemplateEngine engine = getTemplateEngine(matcher.getExtension());
matcher.setEngine(engine);
if (engine == null) {
return false;
}
String templateName = matcher.getTemplateName();
getLogger().trace("Searching for template \"{}\" using {}", templateName, engine);
return engine.exists(templateName);
}
所以路径如何设置取决 于TemplateEngine 的path参数。我们看到path="/templates/${component}",${component}这个变量是webx3
给每个子容器的名字,例如供应链服务叫chain。我们看下pipeline的配置
<when>
<pl-conditions:target-extension-condition extension="null, vm, jsp" />
<performAction />
<performTemplateScreen />
<renderTemplate />
</when>
renderTemplate这个valve也是使用templateService来渲染模板。
例如输入的模板名叫screen/detail.vm
那么 templateService就会找/template/chain/screen/detail.vm这个文件。
webx3的资源加载使用ResourceLoadingService
而由于resources.xml文件里有如下配置
<resource pattern="/templates">
<res-loaders:file-loader basedir="${alibaba_lp_lpscm_templates}" />
</resource>
因此这个地址也就变成了${alibaba_lp_lpscm_templates}/template/chain/screen/detail.vm,
${alibaba_lp_lpscm_templates}是我们antx文件里配置的模板路径。
这个工作原理适用于web层的东西,biz层使用templateService稍微有点区别,
因为biz层使用了root容器的templateService因此,$component 的值取决于这段配置
<services:property-placeholder>
<services:property key="component">common</services:property>
</services:property-placeholder>
因此刚刚那个例子,我们需要把文件放在 ${alibaba_lp_lpscm_templates}/template/common/message.vm.
当然你也可以修改配置以改变模板的位置,例如把common改成message
<services:property-placeholder>
<services:property key="component">message</services:property>
</services:property-placeholder>
那么文件需要放在 ${alibaba_lp_lpscm_templates}/template/mesage/message.vm.
结束语
pd说:“我想要显示下链路的创建时间,这个需要多少时间"
开发说:"没问题,修改的话两分钟就够!"
分享到:
相关推荐
WebX3的应用通常会涉及到数据库交互,例如用户信息、留言内容等都会存储在数据库中。通过运行这个SQL脚本,你可以建立一个用于支持留言板功能的数据库表结构,这包括用户表、留言表等相关表格。 其次,`tutorial1` ...
文档内容主要分为两大部分:Webx框架概览和Webx基础设施服务。 在Webx框架概览部分,首先对Webx框架进行了整体介绍,包括其设计理念,即框架的本质,基础框架和层次化设计。Webx由三个主要层次构成:Webx基础框架层...
Webx3中文指南, 非常详细!
Webx3_Guide_Book 用户指南 2001年,阿里巴巴内部开始使用Java Servlet作为WEB服务器端的技术,以取代原先的 Apache HTTPD server和mod_perl的组合。 • 2002年,选择Jakarta Turbine作为WEB框架,并开始在此之上...
3. **视图(View)**:视图负责渲染并展示数据。在Webx中,视图可以是JSP、FreeMarker或其他模板引擎生成的HTML页面。视图和模型之间的通信通过模型对象进行,模型对象包含要显示的数据。 4. **会话(Session)**:...
包括资源的定义、访问方式以及遍历策略等内容,并针对Spring的ResourceLoader机制进行了深入分析,提出了Webx3中资源加载服务的具体实现方案。 - **Filter、RequestContexts和Pipeline**:这部分探讨了Filter的作用...
本指南将深入探讨Webx3框架的核心特性和使用方法,结合《Webx3_Guide_Book.pdf》的详细文档,我们将全面解析以下几个关键知识点: 1. **框架架构**:Webx3 的架构设计基于组件化思想,允许开发者灵活地选择和配置...
在本文中,我们将深入探讨WebX项目实践总结,包括WebX的启动顺序、WebX的使用技巧以及WebX中的表单提交机制。 **一、WebX启动顺序** WebX的启动过程涉及多个阶段,理解这一过程对于调试和优化应用至关重要。首先,...
这部分内容为开发者提供了全面的资源管理能力,尤其在多资源加载器环境下和非Web环境下的资源使用提供了详尽的指导。 Filter、RequestContexts和Pipeline部分介绍了Webx框架中的过滤器机制。Filter在Webx框架中承担...
《Webx3日志系统配置指南》 在Web开发中,日志系统是不可或缺的一部分,它可以帮助开发者跟踪程序运行状态,定位错误,以及进行性能分析。Webx3是一款功能强大的Web应用框架,其中包含了完善的日志处理机制。本文将...
你可以使用全部的Webx,也可以仅仅使用到Webx的任何一个层次。 引言 ............................................................................................................................... ix 1. ...
### Webx3 PDF(阿里巴巴前端Web框架):深入解析与技术要点 #### 引言 Webx是一款由阿里巴巴推出的前端Web框架,旨在提供一个高效、灵活且可扩展的基础架构来支持大规模Web应用的开发。本文章将从Webx框架的核心...
文件名“Webx3_requestContexts.docx”可能是指Webx的第三个主要版本(Webx3)中的Request Context(请求上下文)部分。Request Context是Web框架中常见的一种设计模式,用于封装HTTP请求的相关信息,如请求参数、...
《WebX3 Guide Book学习指南》是一本由Michael Zhou编写的关于Webx框架的专业书籍,出版于2010年11月13日。Webx框架是一个用于构建Web应用程序的强大工具,尤其在Java开发领域中有着广泛的应用。本书旨在为开发者...
当用户发起搜索请求时,Webx3会将请求发送到Solr,Solr接收到请求后,使用Paoding分词库对查询进行处理,然后在索引中查找匹配的文档,最后将结果返回给Webx3,由Webx3将结果显示给用户。 压缩包中的"webx3-paoding...
下面我们将深入探讨如何在Webx3中获取Cookie的值,以及相关的源码分析和可能使用的工具。 首先,理解Cookie的基本概念是必要的。Cookie是由服务器端发送到客户端(浏览器)的一小段文本信息,用于存储用户状态数据...
这份文档详细阐述了如何使用WEBX框架构建一个基础的Web应用程序。内容可能包括设置开发环境、创建项目结构、编写控制器、视图和模型,以及如何进行调试和测试。这对于初学者来说是一份很好的入门教程。 **8. 03_...
在"petstore-webx3"这个压缩包中,我们可能找到了一个示例应用——PetStore,它是基于WebX框架的一个在线宠物商店的实现。 WebX 的核心特点和关键技术主要包括以下几个方面: 1. **MVC(Model-View-Controller)...
Webx是一个轻量级的Java Web框架,它是一个开源项目,旨在...通过深入阅读和理解Webx框架指南中的内容,开发者不仅能够掌握Webx框架的使用,还能够理解其背后的设计哲学和实现原理,从而更好地应用于实际开发工作中。
llerServlet 是 Webx 框架的核心组件,它负责处理所有以 .htm 和 .do 结尾的请求。...对于初学者来说,理解 Webx 的核心概念,如 ControllerServlet 和服务配置,是进一步学习和使用 Webx 的关键。