Smarty4j是一个开源的模板引擎。没错,它就是著名的php模板引擎之Java移植版。
它特点就是将模板文件或者字符串编译成java类直接执行,所以效率比一般的模板解释的方式处理要快。它发展较晚,所以没有 velocity、FreeMarker 有名,人气也比 php 版本的模板引擎差好多。
但是它很快!
本着怀疑一切的态度,我自己进行了实测。在渲染1000遍一个简单的页面时(只引入几种简单的数据类型), Smarty4j 耗时 16 毫秒,velocity 耗时 63 毫秒,FreeMarker 则用了 109 毫秒。渲染5000遍时,Smarty4j 耗时 172 毫秒,velocity 耗时 328 毫秒,FreeMarker 则用了 390 毫秒。(以上测试均为多次测试后取的平均值)
复杂页面耗时相差更大。所以把项目里的 velocity 或 FreeMarker 换成 Smarty4j 可以使你的应用提速不少。
已经有网友将 Smarty4j 提供了插件集成到 struts2 中了。那么能不能把它集成到国产的小巧的 Nutz MVC 框架中呢?
翻看了 Nutz 的用户手册后发现这是件非常容易的事情。
下面我们就开始吧:
1、首先要实现视图适配器
非常简单:
/**
* Smarty4j 视图适配器
* @author QinerG(QinerG@gmail.com)
*/
public class SmartyViewMaker implements ViewMaker {
public View make(Ioc ioc, String type, String value) {
if("st".equalsIgnoreCase(type)){
return new SmartyView(value);
}
return null;
}
}
2、然后再实现具体的视图解析器
/**
* 使用 Smarty4j 模板生成页面
* @author QinerG(QinerG@gmail.com)
*/
public class SmartyView extends AbstractPathView implements View {
private final String ext = ".html";
private static Engine engine = new Engine();//加载模板引擎
public SmartyView(String dest) {
super(dest);
engine.setTemplatePath("");
engine.setDebug(true);
}
/* 渲染页面
* @see org.nutz.mvc.View#render(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, java.lang.Object)
*/
public void render(HttpServletRequest req, HttpServletResponse resp,
Object obj) throws Throwable {
if ("".equals(engine.getTemplatePath())) {
String realPath = req.getSession().getServletContext().getRealPath("/");
engine.setTemplatePath(realPath);
}
String path = evalPath(req, obj);
// 空路径,采用默认规则
if (Strings.isBlank(path)) {
path = Mvcs.getRequestPath(req);
path = "WEB-INF"
+ (path.startsWith("/") ? "" : "/")
+ Files.renameSuffix(path, ext);
}
// 绝对路径 : 以 '/' 开头的路径不增加 '/WEB-INF'
else if (path.charAt(0) == '/') {
if (!path.toLowerCase().endsWith(ext))
path += ext;
}
// 包名形式的路径
else {
path = "WEB-INF/" + path.replace('.', '/') + ext;
}
Template template = engine.getTemplate(path);
Context ctx = new Context(); // 生成数据容器对象
ctx.set("obj", obj);
ctx.set("request", req);
ctx.set("response", resp);
ctx.set("session", req.getSession());
template.merge(ctx, resp.getWriter());
}
}
好了,完成!
那么具体怎么用呢?
首先在主模块上声明使用 Smarty4j 适配器
@Views({SmartyViewMaker.class})
public class MainModule { }
然后在action上声明模板路径即可,如:
@At("/index")
@Ok("st:st.index")
public void index() {
这个action的模板将对应 WEB-INF/st/index.html 文件。
当然模板路径也可以放在 WEB-INF 外面,如:
@Ok("st:abc.bbc") 或 @Ok("st:/abc/bbc")
对应的模板路径为:
abc/bbc.html
分享到:
相关推荐
让nutz支持freemarker。 具体使用和在struts2中使用是一样的
nutz 使用手册 nutz 使用手册 nutz 使用手册 nutz 使用手册 nutz 使用手册 nutz 使用手册 nutz 使用手册 nutz 使用手册 nutz 使用手册 nutz 使用手册 nutz 使用手册
Nutz, 它是一组轻便小型的框架的集合。 -------------Nutz 可以做什么? Dao -- 针对 JDBC 的薄封装,事务模板,无缓存 Ioc -- JSON 风格的配置文件,声明时切片支持 Mvc -- 注解风格的配置,内置多文件上传功能 ...
用于nutz邮箱验证jar包
nutz生成javabean工具.zip
可连接多种数据库根据表直接生成nutz所需的bean
注:_velocity后缀为同时支持beetl和velocity两种模板引擎版本 QQ交流群: 68428921 在线演示地址 ====== 基于Nutz的开源企业级开发框架 NutzWk 3.x 运行环境: JDK 8 Tomcat 8 Maven 3.3.9 Nutz v1.r.58 ...
同传统的 SSH 相比,它具备如下特点:轻 -- ...这就意味着:如果一个 Web 应用,你在 WEB-INF/lib 下只 需要放置一个 nutz.jar 就够了当然你要使用其它的连接池,数据库驱动,打印PDF支持等功能,还需要自行添置 jar 包
对于 Java 程序员来说,除 SSH 之外,可能还有另外一个选择: Nutz 当然,它是开源的,并且是完全免费的。 同传统的 SSH 相比,它具备如下特点: 轻 -- 当前最新版,整个 jar 文件共 820k 薄 -- 针对 JDBC 的薄封装...
nutz框架使用手册,从零到有深入学习nutz平台开发
可以快速定位路径 页面 本jar包是nutz实用插件 希望大家多多下载
nutz框架jar包
每次项目验收写文档是一个很凌乱的事情,作为一个程序员,应该是用技术解决问题。当然有很多工具也可以实现。比如PDman就可以导出word或者pdf文档。 这个案例主要是学习springboot...以及使用nutz poi第三方工具的使用
nutz框架开发手册,框架很方便使用的,和大家分享
在做nutz redis集成的实时,由于依赖包的问题被坑了一把,为了后人不要走同样的路,把所有依赖包放在上面了。
。。。
。。。
用开源框架nutz搭建的MVC框架,适合小型系统的开发,快捷方便!
nutz-1.r.61-发布包
nutz jar包