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 DAO支持多种数据库,如MySQL、Oracle、SQL Server等,并且支持JDBC模板、SQL映射文件(类似于MyBatis)等多种方式编写SQL。`nutz-dao`包含的jar包如`jdbc-driver`,用于连接不同的数据库,而`nutz-runtimex`则...
- **Beetl模板引擎**:提供便捷的视图层开发,支持国际化。 - **日志记录**:通过`@SLog`注解自动记录操作日志,便于追踪问题。 - **文件输出**:`@SFile`注解实现文件的自动输出,如PDF格式。 - **JSON输出**:`@...
.`SpringMVC+Nutz框架介绍范本模板.docx
- Nutz的MVC模式中,视图层支持多种模板引擎,包括JSP、Velocity、Freemarker等。 2. **Freemarker**: - Freemarker是一个模板语言,它与Java代码分离,使得开发者可以专注于页面布局和设计,而无需关心业务逻辑...
它支持RESTful API、模板引擎、拦截器、数据绑定等功能,使得Web开发更加便捷。 3. **Nutz DAO**:DAO(Data Access Object)层负责与数据库交互。Nutz DAO提供了简单易用的API,用于执行SQL查询、事务管理等操作,...
4. **SQL支持**:Nutz提供了强大的数据库操作API,可以方便地进行SQL查询和结果映射。 5. **Web开发**:Nutz支持RESTful API设计,可以构建高性能的Web服务。 6. **命令行工具**:Nutz提供了一系列的命令行工具,...
3. **Nutz Redis集成**:Nutz Redis模块提供了一套完整的API,让开发者可以轻松地在Nutz应用中操作Redis。集成过程包括添加依赖、配置Redis连接信息、编写代码进行数据操作等步骤。 4. **依赖包管理**:在集成Nutz ...
Nutz MVC允许开发者自定义路由规则,支持RESTful API,提供了模板引擎和视图解析机制。 4. **Nutz插件和扩展**:Nutz框架允许开发者通过插件机制来扩展其功能,如缓存管理、任务调度、安全控制等。手册会介绍如何...
1. 源代码:项目的主程序代码,包括生成器的实现、数据库连接处理、模板引擎等。 2. 模板文件:预定义的代码模板,可以根据需求进行修改或添加自定义模板,以满足特定的代码风格和项目规范。 3. 配置文件:可能包含...
Nutz是一个轻量级、高性能的Java开发框架,它提供了许多实用工具,包括数据库操作、Web开发、模版引擎等。在给定的压缩包"nutz生成javabean工具.zip"中,我们可以看到一个名为"NutzCodematic-master"的项目,这很...
#### 四、Nutz框架质量保障 - **测试覆盖率**:Nutz框架非常重视代码质量,其JUnit测试覆盖率较高,并且持续增加。通过大量的单元测试来确保框架的稳定性和可靠性。 - **持续改进**:框架维护者会定期更新和完善...
Nutz邮箱验证jar包可能提供模板引擎,支持动态插入变量和格式化输出,方便开发者自定义邮件模板。 4. **异步处理**:为了提高用户体验,邮箱验证通常会设计成异步操作。这意味着验证请求会被放入队列,然后由后台...
Nutz是一款优秀的Java ORM框架,而Beetl则是一款高效的Java模板引擎,它们都将为我们的应用程序提供强有力的支持。 首先,让我们详细了解一下SpringBoot。SpringBoot是由Pivotal团队提供的全新框架,其设计目标是...
2. **缓存策略**:Nutz支持两种缓存策略,即LRU(Least Recently Used,最近最少使用)和LFU(Least Frequently Used,最不经常使用)。LRU会优先淘汰最近最少使用的数据,而LFU则会淘汰访问频率最低的数据。 3. **...
6. **Web**:NUTZ提供了Web应用的开发支持,包括路由、请求处理、模板引擎等,可以快速构建RESTful API和服务。 在压缩包“wendal-nutz-master.zip”中,你可能会找到以下内容: - 项目结构:通常包括src/main/...
此外,`nutz.plugin.multiupload` 插件提供了更高级的文件上传支持,包括多文件上传、断点续传等功能。使用这个插件,你需要在控制器中注入相关的服务,然后调用服务接口来处理上传请求。 通过标签 "源码",我们...
3. **Web开发**:Nutz对HTTP请求处理、响应生成、URL映射等提供了全面的支持,同时集成了模板引擎,如Freemarker和JSP,方便生成动态网页内容。 4. **约定优于配置**:Nutz遵循这一原则,许多配置都有默认值,减少...