clean history

This commit is contained in:
Looly
2019-08-14 10:02:32 +08:00
commit 6b011af032
1215 changed files with 159913 additions and 0 deletions

View File

@@ -0,0 +1,19 @@
package cn.hutool.extra.emoji;
import org.junit.Assert;
import org.junit.Test;
public class EmojiUtilTest {
@Test
public void toUnicodeTest() {
String emoji = EmojiUtil.toUnicode(":smile:");
Assert.assertEquals("😄", emoji);
}
@Test
public void toAliasTest() {
String alias = EmojiUtil.toAlias("😄");
Assert.assertEquals(":smile:", alias);
}
}

View File

@@ -0,0 +1,62 @@
package cn.hutool.extra.ftp;
import java.util.List;
import org.junit.Ignore;
import org.junit.Test;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.lang.Console;
public class FtpTest {
@Test
@Ignore
public void cdTest() {
Ftp ftp = new Ftp("looly.centos");
ftp.cd("/file/aaa");
Console.log(ftp.pwd());
IoUtil.close(ftp);
}
@Test
@Ignore
public void uploadTest() {
Ftp ftp = new Ftp("looly.centos");
List<String> ls = ftp.ls("/file");
Console.log(ls);
boolean upload = ftp.upload("/file/aaa", FileUtil.file("E:/qrcodeWithLogo.jpg"));
Console.log(upload);
IoUtil.close(ftp);
}
@Test
@Ignore
public void reconnectIfTimeoutTest() throws InterruptedException {
Ftp ftp = new Ftp("looly.centos");
Console.log("打印pwd: " + ftp.pwd());
Console.log("休眠一段时间然后再次发送pwd命令抛出异常表明连接超时");
Thread.sleep(35 * 1000);
try{
Console.log("打印pwd: " + ftp.pwd());
}catch (FtpException e) {
e.printStackTrace();
}
Console.log("判断是否超时并重连...");
ftp.reconnectIfTimeout();
Console.log("打印pwd: " + ftp.pwd());
IoUtil.close(ftp);
}
}

View File

@@ -0,0 +1,21 @@
package cn.hutool.extra.mail;
import org.junit.Assert;
import org.junit.Test;
/**
* 默认邮件帐户设置测试
* @author looly
*
*/
public class MailAccountTest {
@Test
public void parseSettingTest() {
MailAccount account = GlobalMailAccount.INSTANCE.getAccount();
account.getSmtpProps();
Assert.assertNotNull(account.getCharset());
Assert.assertTrue(account.isSslEnable());
}
}

View File

@@ -0,0 +1,59 @@
package cn.hutool.extra.mail;
import java.util.Properties;
import org.junit.Assert;
import org.junit.Ignore;
import org.junit.Test;
import cn.hutool.core.io.FileUtil;
/**
* 邮件发送测试
* @author looly
*
*/
public class MailTest {
@Test
@Ignore
public void sendTest() {
MailUtil.send("hutool@foxmail.com", "测试", "<h1>邮件来自Hutool测试</h1>", true, FileUtil.file("d:/测试附件文本.txt"));
}
@Test
@Ignore
public void sendTest2() {
//附件名长度大于60时的测试
MailUtil.send("hutool@foxmail.com", "测试", "<h1>邮件来自Hutool测试</h1>", true, FileUtil.file("d:/6-LongLong一阶段平台建设周报2018.3.12-3.16.xlsx"));
}
@Test
@Ignore
public void sendHtmlTest() {
MailUtil.send("hutool@foxmail.com", "测试", "<h1>邮件来自Hutool测试</h1>", true);
}
@Test
@Ignore
public void sendByAccountTest() {
MailAccount account = new MailAccount();
account.setHost("smtp.yeah.net");
account.setPort(465);
account.setSslEnable(true);
account.setFrom("hutool@yeah.net");
account.setUser("hutool");
account.setPass("q1w2e3");
MailUtil.send(account, "914104645@qq.com", "测试", "<h1>邮件来自Hutool测试</h1>", true);
}
@Test
public void mailAccountTest() {
MailAccount account = new MailAccount();
account.setFrom("hutool@yeah.net");
account.setDebug(true);
account.defaultIfEmpty();
Properties props = account.getSmtpProps();
Assert.assertEquals("true", props.getProperty("mail.debug"));
}
}

View File

@@ -0,0 +1,53 @@
package cn.hutool.extra.qrcode;
import java.awt.Color;
import org.junit.Ignore;
import org.junit.Test;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.lang.Console;
/**
* 二维码工具类单元测试
*
* @author looly
*
*/
public class QrCodeUtilTest {
@Test
@Ignore
public void generateTest() {
QrCodeUtil.generate("https://hutool.cn/", 300, 300, FileUtil.file("e:/qrcode.jpg"));
}
@Test
@Ignore
public void generateCustomTest() {
QrConfig config = new QrConfig();
config.setMargin(3);
config.setForeColor(Color.CYAN.getRGB());
config.setBackColor(Color.GRAY.getRGB());
config.setErrorCorrection(ErrorCorrectionLevel.H);
QrCodeUtil.generate("https://hutool.cn/", config, FileUtil.file("e:/qrcodeCustom.jpg"));
}
@Test
@Ignore
public void generateWithLogoTest() {
QrCodeUtil.generate(//
"http://hutool.cn/", //
QrConfig.create().setImg("e:/pic/face.jpg"), //
FileUtil.file("e:/qrcodeWithLogo.jpg"));
}
@Test
@Ignore
public void decodeTest() {
String decode = QrCodeUtil.decode(FileUtil.file("e:/pic/qr.png"));
Console.log(decode);
}
}

View File

@@ -0,0 +1,64 @@
package cn.hutool.extra.ssh;
import org.junit.Ignore;
import org.junit.Test;
import com.jcraft.jsch.Session;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.lang.Console;
/**
* Jsch工具类单元测试
*
* @author looly
*
*/
public class JschUtilTest {
@Test
@Ignore
public void bindPortTest() {
//新建会话此会话用于ssh连接到跳板机堡垒机此处为10.1.1.1:22
Session session = JschUtil.getSession("looly.centos", 22, "test", "123456");
// 将堡垒机保护的内网8080端口映射到localhost我们就可以通过访问http://localhost:8080/访问内网服务了
JschUtil.bindPort(session, "172.20.12.123", 8080, 8080);
}
@Test
@Ignore
public void sftpTest() {
Session session = JschUtil.getSession("looly.centos", 22, "root", "123456");
Sftp sftp = JschUtil.createSftp(session);
sftp.mkDirs("/opt/test/aaa/bbb");
Console.log("OK");
}
@Test
@Ignore
public void reconnectIfTimeoutTest() throws InterruptedException {
Session session = JschUtil.getSession("sunnyserver", 22,"mysftp","liuyang1234");
Sftp sftp = JschUtil.createSftp(session);
Console.log("打印pwd: " + sftp.pwd());
Console.log("cd / : " + sftp.cd("/"));
Console.log("休眠一段时间,查看是否超时");
Thread.sleep(30 * 1000);
try{
// 当连接超时时isConnected()仍然返回truepwd命令也能正常返回因此利用发送cd命令的返回结果来判断是否连接超时
Console.log("isConnected " + sftp.getClient().isConnected());
Console.log("打印pwd: " + sftp.pwd());
Console.log("cd / : " + sftp.cd("/"));
}catch (JschRuntimeException e) {
e.printStackTrace();
}
Console.log("调用reconnectIfTimeout方法判断是否超时并重连");
sftp.reconnectIfTimeout();
Console.log("打印pwd: " + sftp.pwd());
IoUtil.close(sftp);
}
}

View File

@@ -0,0 +1,35 @@
package cn.hutool.extra.template;
import java.io.IOException;
import org.beetl.core.Configuration;
import org.beetl.core.GroupTemplate;
import org.beetl.core.Template;
import org.beetl.core.resource.StringTemplateResourceLoader;
import org.junit.Assert;
import org.junit.Test;
import cn.hutool.core.lang.Dict;
import cn.hutool.extra.template.engine.beetl.BeetlUtil;
/**
* BeetlUtil单元测试
*
* @author looly
*
*/
public class BeetlUtilTest {
@Test
public void renderStrTest() throws IOException {
GroupTemplate groupTemplate = BeetlUtil.createGroupTemplate(new StringTemplateResourceLoader(), Configuration.defaultConfiguration());
Template template = BeetlUtil.getTemplate(groupTemplate, "hello,${name}");
String result = BeetlUtil.render(template, Dict.create().set("name", "hutool"));
Assert.assertEquals("hello,hutool", result);
String renderFromStr = BeetlUtil.renderFromStr("hello,${name}", Dict.create().set("name", "hutool"));
Assert.assertEquals("hello,hutool", renderFromStr);
}
}

View File

@@ -0,0 +1,138 @@
package cn.hutool.extra.template;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
import org.junit.Assert;
import org.junit.Ignore;
import org.junit.Test;
import cn.hutool.core.lang.Dict;
import cn.hutool.extra.template.TemplateConfig.ResourceMode;
import cn.hutool.extra.template.engine.beetl.BeetlEngine;
import cn.hutool.extra.template.engine.enjoy.EnjoyEngine;
import cn.hutool.extra.template.engine.freemarker.FreemarkerEngine;
import cn.hutool.extra.template.engine.rythm.RythmEngine;
import cn.hutool.extra.template.engine.thymeleaf.ThymeleafEngine;
import cn.hutool.extra.template.engine.velocity.VelocityEngine;
/**
* 模板引擎单元测试
*
* @author looly
*
*/
public class TemplateUtilTest {
@Test
public void createEngineTest() {
// 默认模板引擎此处为Beetl
TemplateEngine engine = TemplateUtil.createEngine(new TemplateConfig());
Template template = engine.getTemplate("hello,${name}");
String result = template.render(Dict.create().set("name", "hutool"));
Assert.assertEquals("hello,hutool", result);
}
@Test
public void beetlEngineTest() {
// 字符串模板
TemplateEngine engine = new BeetlEngine(new TemplateConfig("templates"));
Template template = engine.getTemplate("hello,${name}");
String result = template.render(Dict.create().set("name", "hutool"));
Assert.assertEquals("hello,hutool", result);
// classpath中获取模板
engine = new BeetlEngine(new TemplateConfig("templates", ResourceMode.CLASSPATH));
Template template2 = engine.getTemplate("beetl_test.btl");
String result2 = template2.render(Dict.create().set("name", "hutool"));
Assert.assertEquals("hello,hutool", result2);
}
@Test
public void rythmEngineTest() {
// 字符串模板
TemplateEngine engine = new RythmEngine(new TemplateConfig("templates"));
Template template = engine.getTemplate("hello,@name");
String result = template.render(Dict.create().set("name", "hutool"));
Assert.assertEquals("hello,hutool", result);
// classpath中获取模板
Template template2 = engine.getTemplate("rythm_test.tmpl");
String result2 = template2.render(Dict.create().set("name", "hutool"));
Assert.assertEquals("hello,hutool", result2);
}
@Test
public void freemarkerEngineTest() {
// 字符串模板
TemplateEngine engine = new FreemarkerEngine(new TemplateConfig("templates", ResourceMode.STRING));
Template template = engine.getTemplate("hello,${name}");
String result = template.render(Dict.create().set("name", "hutool"));
Assert.assertEquals("hello,hutool", result);
//ClassPath模板
engine = new FreemarkerEngine(new TemplateConfig("templates", ResourceMode.CLASSPATH));
template = engine.getTemplate("freemarker_test.ftl");
result = template.render(Dict.create().set("name", "hutool"));
Assert.assertEquals("hello,hutool", result);
}
@Test
public void velocityEngineTest() {
// 字符串模板
TemplateEngine engine = new VelocityEngine(new TemplateConfig("templates", ResourceMode.STRING));
Template template = engine.getTemplate("你好,$name");
String result = template.render(Dict.create().set("name", "hutool"));
Assert.assertEquals("你好,hutool", result);
//ClassPath模板
engine = new VelocityEngine(new TemplateConfig("templates", ResourceMode.CLASSPATH));
template = engine.getTemplate("templates/velocity_test.vtl");
result = template.render(Dict.create().set("name", "hutool"));
Assert.assertEquals("你好,hutool", result);
}
@Test
public void enjoyEngineTest() {
// 字符串模板
TemplateEngine engine = new EnjoyEngine(new TemplateConfig("templates"));
Template template = engine.getTemplate("#(x + 123)");
String result = template.render(Dict.create().set("x", 1));
Assert.assertEquals("124", result);
//ClassPath模板
engine = new EnjoyEngine(new TemplateConfig("templates", ResourceMode.CLASSPATH));
template = engine.getTemplate("enjoy_test.etl");
result = template.render(Dict.create().set("x", 1));
Assert.assertEquals("124", result);
}
@Test
public void thymeleafEngineTest() {
// 字符串模板
TemplateEngine engine = new ThymeleafEngine(new TemplateConfig("templates"));
Template template = engine.getTemplate("<h3 th:text=\"${message}\"></h3>");
String result = template.render(Dict.create().set("message", "Hutool"));
Assert.assertEquals("<h3>Hutool</h3>", result);
//ClassPath模板
engine = new ThymeleafEngine(new TemplateConfig("templates", ResourceMode.CLASSPATH));
template = engine.getTemplate("thymeleaf_test.ttl");
result = template.render(Dict.create().set("message", "Hutool"));
Assert.assertEquals("<h3>Hutool</h3>", result);
}
@Test
@Ignore
public void renderToFileTest() {
TemplateEngine engine = new BeetlEngine(new TemplateConfig("templates", ResourceMode.CLASSPATH));
Template template = engine.getTemplate("freemarker_test.ftl");
final Map<String, Object> bindingMap = new HashMap<>();
bindingMap.put("name", "aa");
File outputFile = new File("e:/test.txt");
template.render(bindingMap, outputFile);
}
}

View File

@@ -0,0 +1,99 @@
package cn.hutool.extra.template;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import org.junit.Assert;
import org.junit.Test;
import org.thymeleaf.context.Context;
import org.thymeleaf.templateresolver.StringTemplateResolver;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Dict;
import cn.hutool.extra.template.engine.thymeleaf.ThymeleafEngine;
/**
* Thymeleaf单元测试
*
* @author looly
*
*/
public class ThymeleafTest {
@Test
public void thymeleafEngineTest() {
Map<String, Object> map1 = new HashMap<>();
map1.put("name", "a");
Map<String, Object> map2 = new HashMap<>();
map2.put("name", "b");
// 日期测试
Map<String, Object> map3 = new HashMap<>();
map3.put("name", DateUtil.parse("2019-01-01"));
List<Map<String, Object>> list = new ArrayList<>();
list.add(map1);
list.add(map2);
list.add(map3);
// 字符串模板
TemplateEngine engine = new ThymeleafEngine(new TemplateConfig());
Template template = engine.getTemplate("<h3 th:each=\"item : ${list}\" th:text=\"${item.name}\"></h3>");
String render = template.render(Dict.create().set("list", list));
Assert.assertEquals("<h3>a</h3><h3>b</h3><h3>2019-01-01 00:00:00</h3>", render);
}
@Test
public void thymeleafEngineTest2() {
Map<String, Object> map1 = new HashMap<>();
map1.put("name", "a");
Map<String, Object> map2 = new HashMap<>();
map2.put("name", "b");
// 日期测试
Map<String, Object> map3 = new HashMap<>();
map3.put("name", DateUtil.parse("2019-01-01"));
List<Map<String, Object>> list = new ArrayList<>();
list.add(map1);
list.add(map2);
list.add(map3);
LinkedHashMap<String, Object> map = new LinkedHashMap<>();
map.put("list", list);
hutoolApi(map);
thymeleaf(map);
}
@SuppressWarnings({ "rawtypes", "unchecked" })
private static void thymeleaf(Map map) {
org.thymeleaf.TemplateEngine templateEngine = new org.thymeleaf.TemplateEngine();
StringTemplateResolver stringTemplateResolver = new StringTemplateResolver();
templateEngine.addTemplateResolver(stringTemplateResolver);
StringWriter writer = new StringWriter();
Context context = new Context(Locale.getDefault(), map);
templateEngine.process("<h3 th:each=\"item : ${list}\" th:text=\"${item.name}\"></h3>", context, writer);
Assert.assertEquals("<h3>a</h3><h3>b</h3><h3>2019-01-01 00:00:00</h3>", writer.toString());
}
@SuppressWarnings("rawtypes")
private static void hutoolApi(Map map) {
// 字符串模板
TemplateEngine engine = new ThymeleafEngine(new TemplateConfig());
Template template = engine.getTemplate("<h3 th:each=\"item : ${list}\" th:text=\"${item.name}\"></h3>");
// "<h3 th:text=\"${nestMap.nestKey}\"></h3>"
String render = template.render(map);
Assert.assertEquals("<h3>a</h3><h3>b</h3><h3>2019-01-01 00:00:00</h3>", render);
}
}

View File

@@ -0,0 +1,93 @@
package cn.hutool.extra.tokenizer;
import java.util.Iterator;
import org.junit.Assert;
import org.junit.Test;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.extra.tokenizer.engine.analysis.SmartcnEngine;
import cn.hutool.extra.tokenizer.engine.hanlp.HanLPEngine;
import cn.hutool.extra.tokenizer.engine.ikanalyzer.IKAnalyzerEngine;
import cn.hutool.extra.tokenizer.engine.jcseg.JcsegEngine;
import cn.hutool.extra.tokenizer.engine.jieba.JiebaEngine;
import cn.hutool.extra.tokenizer.engine.mmseg.MmsegEngine;
import cn.hutool.extra.tokenizer.engine.word.WordEngine;
/**
* 模板引擎单元测试
*
* @author looly
*
*/
public class TokenizerUtilTest {
String text = "这两个方法的区别在于返回值";
@Test
public void createEngineTest() {
// 默认分词引擎此处为Ansj
TokenizerEngine engine = TokenizerUtil.createEngine();
Result result = engine.parse(text);
checkResult(result);
}
@Test
public void hanlpTest() {
TokenizerEngine engine = new HanLPEngine();
Result result = engine.parse(text);
String resultStr = CollUtil.join((Iterator<Word>)result, " ");
Assert.assertEquals("这 两 个 方法 的 区别 在于 返回 值", resultStr);
}
@Test
public void ikAnalyzerTest() {
TokenizerEngine engine = new IKAnalyzerEngine();
Result result = engine.parse(text);
String resultStr = CollUtil.join((Iterator<Word>)result, " ");
Assert.assertEquals("这两个 方法 的 区别 在于 返回值", resultStr);
}
@Test
public void jcsegTest() {
TokenizerEngine engine = new JcsegEngine();
Result result = engine.parse(text);
checkResult(result);
}
@Test
public void jiebaTest() {
TokenizerEngine engine = new JiebaEngine();
Result result = engine.parse(text);
String resultStr = CollUtil.join((Iterator<Word>)result, " ");
Assert.assertEquals("这 两个 方法 的 区别 在于 返回值", resultStr);
}
@Test
public void mmsegTest() {
TokenizerEngine engine = new MmsegEngine();
Result result = engine.parse(text);
checkResult(result);
}
@Test
public void smartcnTest() {
TokenizerEngine engine = new SmartcnEngine();
Result result = engine.parse(text);
String resultStr = CollUtil.join((Iterator<Word>)result, " ");
Assert.assertEquals("这 两 个 方法 的 区别 在于 返回 值", resultStr);
}
@Test
public void wordTest() {
TokenizerEngine engine = new WordEngine();
Result result = engine.parse(text);
String resultStr = CollUtil.join((Iterator<Word>)result, " ");
Assert.assertEquals("这两个 方法 的 区别 在于 返回值", resultStr);
}
private void checkResult(Result result) {
String resultStr = CollUtil.join((Iterator<Word>)result, " ");
Assert.assertEquals("这 两个 方法 的 区别 在于 返回 值", resultStr);
}
}

View File

@@ -0,0 +1,62 @@
#\u9ed8\u8ba4\u914d\u7f6e
ENGINE=org.beetl.core.engine.FastRuntimeEngine
# \u6307\u5b9a\u4e86\u5360\u4f4d\u7b26\u53f7\uff0c\u9ed8\u8ba4\u662f${ }\uff0c\u4e5f\u53ef\u4ee5\u6307\u5b9a\u4e3a\u5176\u4ed6\u5360\u4f4d\u7b26\u3002
DELIMITER_PLACEHOLDER_START=${
DELIMITER_PLACEHOLDER_END=}
# \u6307\u5b9a\u4e86\u8bed\u53e5\u7684\u5b9a\u754c\u7b26\u53f7\uff0c\u9ed8\u8ba4\u662f<% %>\uff0c\u4e5f\u53ef\u4ee5\u6307\u5b9a\u4e3a\u5176\u4ed6\u5b9a\u754c\u7b26\u53f7
DELIMITER_STATEMENT_START=<%
DELIMITER_STATEMENT_END=%>
# \u6307\u5b9aIO\u8f93\u51fa\u6a21\u5f0f\uff0c\u9ed8\u8ba4\u662fFALSE,\u5373\u901a\u5e38\u7684\u5b57\u7b26\u8f93\u51fa\uff0c\u5728\u8003\u8651\u9ad8\u6027\u80fd\u60c5\u51b5\u4e0b\uff0c\u53ef\u4ee5\u8bbe\u7f6e\u6210true\u3002\u8be6\u7ec6\u8bf7\u53c2\u8003\u9ad8\u7ea7\u7528\u6cd5
DIRECT_BYTE_OUTPUT = FALSE
# \u6307\u5b9a\u4e86\u652f\u6301HTML\u6807\u7b7e\uff0c\u4e14\u7b26\u53f7\u4e3a#,\u9ed8\u8ba4\u914d\u7f6e\u4e0b\uff0c\u6a21\u677f\u5f15\u64ce\u8bc6\u522b<#tag ></#tag>\u8fd9\u6837\u7684\u7c7b\u4f3chtml\u6807\u7b7e\uff0c\u5e76\u80fd\u8c03\u7528\u76f8\u5e94\u7684\u6807\u7b7e\u51fd\u6570\u6216\u8005\u6a21\u677f\u6587\u4ef6\u3002\u4f60\u4e5f\u53ef\u4ee5\u6307\u5b9a\u522b\u7684\u7b26\u53f7\uff0c\u5982bg: \u5219\u8bc6\u522b<bg:
HTML_TAG_SUPPORT = true
HTML_TAG_FLAG = #
# \u6307\u5b9a\u5982\u679c\u6807\u7b7e\u5c5e\u6027\u6709var\uff0c\u5219\u8ba4\u4e3a\u662f\u9700\u8981\u7ed1\u5b9a\u53d8\u91cf\u7ed9\u6a21\u677f\u7684\u6807\u7b7e\u51fd\u6570
HTML_TAG_BINDING_ATTRIBUTE = var
# \u6307\u5b9a\u5141\u8bb8\u672c\u5730Class\u76f4\u63a5\u8c03\u7528
NATIVE_CALL = TRUE
# \u6307\u5b9a\u6a21\u677f\u5b57\u7b26\u96c6\u662fUTF-8
TEMPLATE_CHARSET = UTF-8
# \u6307\u5b9a\u5f02\u5e38\u7684\u89e3\u6790\u7c7b\uff0c\u9ed8\u8ba4\u662fConsoleErrorHandler\uff0c\u4ed6\u5c06\u5728render\u53d1\u751f\u5f02\u5e38\u7684\u65f6\u5019\u5728\u540e\u53f0\u6253\u5370\u51fa\u9519\u8bef\u4fe1\u606f\uff08System.out)
ERROR_HANDLER = org.beetl.core.ConsoleErrorHandler
# \u6307\u5b9a\u4e86\u672c\u5730Class\u8c03\u7528\u7684\u5b89\u5168\u7b56\u7565
NATIVE_SECUARTY_MANAGER= org.beetl.core.DefaultNativeSecurityManager
# \u914d\u7f6e\u4e86\u662f\u5426\u8fdb\u884c\u4e25\u683cMVC\uff0c\u901a\u5e38\u60c5\u51b5\u4e0b\uff0c\u6b64\u5904\u8bbe\u7f6e\u4e3afalse
MVC_STRICT = FALSE
#\u8d44\u6e90\u914d\u7f6e\uff0cresource\u540e\u7684\u5c5e\u6027\u53ea\u9650\u4e8e\u7279\u5b9aResourceLoader
RESOURCE_LOADER=org.beetl.core.resource.ClasspathResourceLoader
#classpath \u6839\u8def\u5f84
RESOURCE.root= /
#\u662f\u5426\u68c0\u6d4b\u6587\u4ef6\u53d8\u5316,\u5f00\u53d1\u7528true\u5408\u9002\uff0c\u4f46\u7ebf\u4e0a\u8981\u6539\u4e3afalse
RESOURCE.autoCheck= true
#\u81ea\u5b9a\u4e49\u811a\u672c\u65b9\u6cd5\u6587\u4ef6\u7684Root\u76ee\u5f55\u548c\u540e\u7f00
RESOURCE.functionRoot = functions
RESOURCE.functionSuffix = html
#\u81ea\u5b9a\u4e49\u6807\u7b7e\u6587\u4ef6Root\u76ee\u5f55\u548c\u540e\u7f00
RESOURCE.tagRoot = htmltag
RESOURCE.tagSuffix = tag
##### \u6269\u5c55 ##############
# \u5185\u7f6e\u7684\u65b9\u6cd5
FN.date = org.beetl.ext.fn.DateFunction
#\u5185\u7f6e\u7684\u529f\u80fd\u5305
FNP.strutil = org.beetl.ext.fn.StringUtil
# \u5185\u7f6e\u7684\u9ed8\u8ba4\u683c\u5f0f\u5316\u51fd\u6570
FTC.java.util.Date = org.beetl.ext.format.DateFormat
# \u6807\u7b7e\u7c7b
TAG.include= org.beetl.ext.tag.IncludeTag

View File

@@ -0,0 +1,18 @@
# **************************************************************
# ----- Setting File with UTF8-----
# ----- 邮件发送功能的账户信息配置文件 -----
# ----- 此邮箱专门注册用于Hutool发送邮件测试为公开邮箱 -----
# **************************************************************
# 邮件服务器的SMTP地址
host = smtp.yeah.net
# 邮件服务器的SMTP端口
port = 465
# 发件人(必须正确,否则发送失败)
from = 小磊<hutool@yeah.net>
# 用户名注意如果使用foxmail邮箱此处user为qq号
user = hutool
# 密码
pass = q1w2e3
#使用 STARTTLS安全连接
startttlsEnable = true

View File

@@ -0,0 +1,68 @@
#---------------------------------------------------------------------------
# Template for beetl.properties
# see http://ibeetl.com/guide/beetl.html#header-c6267
#---------------------------------------------------------------------------
#\u9ed8\u8ba4\u914d\u7f6e
#\u5f15\u64ce\u5b9e\u73b0\u7c7b\uff0c\u9ed8\u8ba4\u5373\u53ef
ENGINE=org.beetl.core.engine.FastRuntimeEngine
#\u5360\u4f4d\u7b26\u53f7\u5f00\u59cb
DELIMITER_PLACEHOLDER_START=${
#\u5360\u4f4d\u7b26\u53f7\u7ed3\u675f
DELIMITER_PLACEHOLDER_END=}
#\u8bed\u53e5\u7684\u5b9a\u754c\u7b26\u53f7\u5f00\u59cb
DELIMITER_STATEMENT_START=<%
#\u8bed\u53e5\u7684\u5b9a\u754c\u7b26\u53f7\u7ed3\u675f
DELIMITER_STATEMENT_END=%>
#IO\u8f93\u51fa\u6a21\u5f0f\uff0c\u9ed8\u8ba4\u662fFALSE,\u5373\u901a\u5e38\u7684\u5b57\u7b26\u8f93\u51fa\uff0c\u5728\u8003\u8651\u9ad8\u6027\u80fd\u60c5\u51b5\u4e0b\uff0c\u53ef\u4ee5\u8bbe\u7f6e\u6210true
DIRECT_BYTE_OUTPUT = FALSE
#\u652f\u6301HTML\u6807\u7b7e\uff0c\u4e14\u7b26\u53f7\u4e3a#,\u9ed8\u8ba4\u914d\u7f6e\u4e0b\uff0c\u6a21\u677f\u5f15\u64ce\u8bc6\u522b<#tag ></#tag>\u8fd9\u6837\u7684\u7c7b\u4f3chtml\u6807\u7b7e\uff0c\u5e76\u80fd\u8c03\u7528\u76f8\u5e94\u7684\u6807\u7b7e\u51fd\u6570\u6216\u8005\u6a21\u677f\u6587\u4ef6\u3002\u4f60\u4e5f\u53ef\u4ee5\u6307\u5b9a\u522b\u7684\u7b26\u53f7\uff0c\u5982bg: \u5219\u8bc6\u522b<bg:
HTML_TAG_SUPPORT = true
HTML_TAG_FLAG = #
#\u6307\u5b9a\u5982\u679c\u6807\u7b7e\u5c5e\u6027\u6709var\uff0c\u5219\u8ba4\u4e3a\u662f\u9700\u8981\u7ed1\u5b9a\u53d8\u91cf\u7ed9\u6a21\u677f\u7684\u6807\u7b7e\u51fd\u6570
HTML_TAG_BINDING_ATTRIBUTE = var
#\u6307\u5b9a\u5141\u8bb8\u672c\u5730Class\u76f4\u63a5\u8c03\u7528
NATIVE_CALL = TRUE
#\u6307\u5b9a\u6a21\u677f\u5b57\u7b26\u96c6\u662fUTF-8
TEMPLATE_CHARSET = UTF-8
#\u6307\u5b9a\u5f02\u5e38\u7684\u89e3\u6790\u7c7b\uff0c\u9ed8\u8ba4\u662fConsoleErrorHandler\uff0c\u4ed6\u5c06\u5728render\u53d1\u751f\u5f02\u5e38\u7684\u65f6\u5019\u5728\u540e\u53f0\u6253\u5370\u51fa\u9519\u8bef\u4fe1\u606f\uff08System.out)
ERROR_HANDLER = org.beetl.core.ConsoleErrorHandler
#\u6307\u5b9a\u4e86\u672c\u5730Class\u8c03\u7528\u7684\u5b89\u5168\u7b56\u7565
NATIVE_SECUARTY_MANAGER= org.beetl.core.DefaultNativeSecurityManager
#\u914d\u7f6e\u4e86\u662f\u5426\u8fdb\u884c\u4e25\u683cMVC\uff0c\u901a\u5e38\u60c5\u51b5\u4e0b\uff0c\u6b64\u5904\u8bbe\u7f6e\u4e3afalse
MVC_STRICT = FALSE
#\u9ed8\u8ba4\u4f7f\u7528\u7684\u6a21\u677f\u8d44\u6e90\u52a0\u8f7d\u5668\uff0c\u8d44\u6e90\u914d\u7f6e\uff0cresource\u540e\u7684\u5c5e\u6027\u53ea\u9650\u4e8e\u7279\u5b9aResourceLoader
RESOURCE_LOADER=org.beetl.core.resource.ClasspathResourceLoader
#classpath \u6839\u8def\u5f84
RESOURCE.root= /
#\u662f\u5426\u68c0\u6d4b\u6587\u4ef6\u53d8\u5316
RESOURCE.autoCheck= true
#\u81ea\u5b9a\u4e49\u811a\u672c\u65b9\u6cd5\u6587\u4ef6\u7684Root\u76ee\u5f55\u548c\u540e\u7f00
RESOURCE.functionRoot = functions
RESOURCE.functionSuffix = html
#\u81ea\u5b9a\u4e49\u6807\u7b7e\u6587\u4ef6Root\u76ee\u5f55\u548c\u540e\u7f00
RESOURCE.tagRoot = htmltag
RESOURCE.tagSuffix = tag
##### \u6269\u5c55 ##############
## \u5185\u7f6e\u7684\u65b9\u6cd5
FN.date = org.beetl.ext.fn.DateFunction
##\u5185\u7f6e\u7684\u529f\u80fd\u5305
FNP.strutil = org.beetl.ext.fn.StringUtil
##\u5185\u7f6e\u7684\u9ed8\u8ba4\u683c\u5f0f\u5316\u51fd\u6570
FTC.java.util.Date = org.beetl.ext.format.DateFormat
## \u6807\u7b7e\u7c7b
TAG.include= org.beetl.ext.tag.IncludeTag

View File

@@ -0,0 +1,40 @@
# **************************************************************
# ----- Setting File with UTF8-----
# ----- 邮件发送功能的账户信息配置文件 -----
# ----- 此邮箱专门注册用于Hutool发送邮件测试为公开邮箱 -----
# **************************************************************
# 邮件服务器的SMTP地址
host = smtp.yeah.net
# 邮件服务器的SMTP端口
port = 465
# 发件人(必须正确,否则发送失败)
from = 小磊<hutool@yeah.net>
# 用户名
user = hutool
# 密码
pass = q1w2e3
# 是否打开调试模式,调试模式会显示与邮件服务器通信过程,默认不开启
debug = true
# 编码决定了邮件正文编码和发件人、收件人、抄送人、密送人姓名中的中文编码默认UTF-8
charset = UTF-8
#使用 STARTTLS安全连接
startttlsEnable = true
#使用 SSL安全连接
sslEnable = true
# 指定实现javax.net.SocketFactory接口的类的名称,这个类将被用于创建SMTP的套接字
socketFactoryClass = javax.net.ssl.SSLSocketFactory
# 如果设置为true,未能创建一个套接字使用指定的套接字工厂类将导致使用java.net.Socket创建的套接字类, 默认值为true
socketFactoryFallback = true
# 指定的端口连接到在使用指定的套接字工厂。如果没有设置,将使用默认端口456
socketFactoryPort = 465
# 对于超长参数是否切分为多份默认为false国内邮箱附件不支持切分的附件名
splitlongparameters = false
# SMTP超时时长单位毫秒缺省值不超时
timeout = 0
# Socket连接超时值单位毫秒缺省值不超时
connectionTimeout = 0

View File

@@ -0,0 +1,52 @@
##这是一行注释,不会输出
#*
这是多行注释,不会输出
多行注释
*#
// ---------- 1.变量赋值输出------------
Welcome $name to Javayou.com!
today is $date.
tdday is $mydae.//未被定义的变量将当成字符串
// -----------2.设置变量值,所有变量都以$开头----------------
#set( $iAmVariable = "good!" )
Welcome $name to Javayou.com!
today is $date.
$iAmVariable
//-------------3.if,else判断--------------------------
#set ($admin = "admin")
#set ($user = "user")
#if ($admin == $user)
Welcome admin!
#else
Welcome user!
#end
//--------------4.迭代数据List---------------------
#foreach( $product in $list )
$product
#end
// ------------5.迭代数据HashSet-----------------
#foreach($key in $hashVariable.keySet() )
$key s value: $ hashVariable.get($key)
#end
//-----------6.迭代数据List Bean($velocityCount为列举序号默认从1开始可调整)
#foreach ($s in $listBean)
<$velocityCount> Address: $s.address
#end
//-------------7.模板嵌套---------------------
#foreach ($element in $list)
#foreach ($element in $list)
inner:This is ($velocityCount)- $element.
#end
outer:This is ($velocityCount)- $element.
#end
//-----------8.导入其它文件,多个文件用逗号隔开(非模板静态)--------------
#include("com/test2/test.txt")
//-----------8.导入其它文件,多个文件用逗号隔开(模板文件)--------------
#parse("com/test2/test.txt")

View File

@@ -0,0 +1 @@
hello,${name}

View File

@@ -0,0 +1 @@
#(x + 123)

View File

@@ -0,0 +1 @@
hello,${name}

View File

@@ -0,0 +1,2 @@
@args String name
hello,@name

View File

@@ -0,0 +1 @@
<h3 th:text="${message}"></h3>

View File

@@ -0,0 +1 @@
你好,$name