模板引擎
优质
小牛编辑
126浏览
2023-12-01
hi-nginx-java内置了两个mustache模板引擎:mustache.java和jmustache。
以下介绍仅就jmustache而言。
字符串模板
字符串模板是最简单的情况。例如:
package test;
import hi.request;
import hi.response;
import hi.route;
import java.util.regex.Matcher;
import java.util.HashMap;
import com.samskivert.mustache.Mustache;
import com.samskivert.mustache.Template;
public class stringtemplate implements hi.route.run_t {
public session() {
}
public void handler(hi.request req, hi.response res, Matcher m) {
res.set_content_type("text/plain;charset=UTF-8");
String source = "Hello {{arg}}!";
Template tmpl =hi.route.get_instance().get_compiler().compile(source);
HashMap<String, Object> context = new HashMap<String, Object>();
context.put("arg", "world");
res.content = tmpl.execute(context);
res.status = 200;
}
}
访问http://localhost/test/stringtemplate.java
即可获得服务。
文件模板
字符串模板渲染是不多见的。常见的是文件模板渲染。
例如,创建目录/usr/local/nginx/java/templates
,用来保存模板文件。在里面创建两个模板文件main.mustache
:
{{title}}
{{>sub.mustache}}
和sub.mustache
:
{{#persons}}
{{name}}: {{age}}
{{/persons}}
然后编写服务http://localhost/test/filetemplate.java
:
package test;
import hi.request;
import hi.response;
import hi.route;
import java.util.regex.Matcher;
import java.util.HashMap;
import java.util.Arrays;
import java.io.File;
import java.io.FileReader;
import com.samskivert.mustache.Mustache;
import com.samskivert.mustache.Template;
public class filetemplate implements hi.route.run_t {
public filetemplate() {
}
public void handler(hi.request req, hi.response res, Matcher m) {
res.set_content_type("text/plain;charset=UTF-8");
HashMap<String, Object> data = new HashMap<String, Object>();
data.put("title", "文件模板渲染测试");
Object persons = Arrays.asList(new Object() {
String name = "张三";
int age = 70;
}, new Object() {
String name = "李四";
int age = 59;
});
data.put("persons", persons);
try {
Template tmpl = hi.route.get_instance().get_compiler().compile(new FileReader(
hi.route.get_instance().get_config().getString("template.directory") + "/main.mustache"));
res.content = tmpl.execute(data);
res.status = 200;
} catch (Exception e) {
res.content = e.getMessage();
res.status = 500;
}
}
}
可用于java web开发的模板引擎太多了,常见且广受好评的是freemarker。如果想用freemarker,开发者可以自行添加hi-nginx配置,比如:
hi_java_classpath "-Djava.class.path=.:/usr/local/nginx/java:/usr/local/nginx/java/hi-nginx-java.jar:/usr/local/nginx/java/freemarker.jar:/usr/local/nginx/java/app.jar";
开发时,正常导入该库即可。