2020-09-24 22:10

博主的分析十分深入,值得学习

jfinal AOP 与 spring AOP 最大不同在于 jfinal 是极简设计,用户只需要学习三个核心概念:Interceptor、Before、Clear,这让学习成本低到极致

而 spring AOP 的概念一大堆,例如:Aspect、Advice、Joinpoint、Poincut、Introduction、Weaving、Around等等,并且需要引入IOC容器并配合大量的XML或者annotation来进行组件装配。概念太多让学习成本急剧上升,开发时头脑的负荷加重,认知成本很高,相应的开发效率也会降低


除了极简设计、学习成本低以外,jfinal AOP 的另一特色是采用动态编译方式实现 proxy, 在 java 界绝无仅有

同时还支持 cglib 进行增强模式实现,目的是为了支持 JRE 环境没有动态编译支持的场景

2020-09-24 18:00

undertow 不支持 jsp, 改用 jetty-server 就可以了:
https://jfinal.com/doc/1-6

@lyh061619 @天朝子民 这里使用的是 renderJsp(...) , 所以是明确了模板类型为 JSP 的, 这种情况无需配置 viewType, viewType 仅仅是针对 render(String) 方法,并不针对 renderXxx(...) 方法

2020-09-24 17:58

mysql 时间类型由 timestamp 改成 datetime

2020-09-24 17:57

这个应该是 GSON 自己的行为, 在 jfinal 内部是没能控制过的,找找 GSON 的文档,看有什么配置项可以使用

2020-09-24 17:56

@zzutligang 做一个 RedisKit 工具类,封装一下常用的一些 api,内部通过 jfinal 的 Redis 来获取需要的 jedis,实现所需功能:

public class RedisKit {
public void lpush(...) {
Jedis jedis = Redis.use().getJedis();
try {
jedis. lpush(...);
} finally {
jedis.close();
}
}
}

2020-09-24 15:06

确保序列化与反序列化算法一致

jfinal reids plugin 存数据前都会前数据进行序列化,默认使用 fst 序列化,那么你用别的工具拿数据时,也得用 fst 的算法反序列化

序列化以后的数据会多出一些表示数据本身特征的数据

通过 setSerializer(...) 可以配置自己的序列化算法

2020-09-23 17:23

@拿云 添加一个配置:
UndertowServer.create(MyApp.class)
.addHotSwapClassPrefix("cn.hinglo.activemq.plugin.")
.start();

文档中有说明:
https://jfinal.com/doc/1-5

2020-09-23 16:06

主动调用会更好,因为连接池会告诉数据库服务端客户端这边关闭掉了,否则服务端需要通过某种机制去关闭与客户端的连接,在此之前有一定的资源占用

2020-09-23 16:04

设计理念决定了用户体验

2020-09-23 16:04

Db.java 中的功能使用很方便,当初制的设计理念就是一步到位,也就是一行代码解决问题,所以你会看到都是这么用的:
Db.find
Db.save
Db.template(...).find
Db.batch

2020-09-23 16:02

用大扩号占位需要配置为 slf4j,或者 logback:
configConstant(Constants me) {
me.setToSlf4jLogFactory());
}

注意要添加其依赖

如果不配置的话,可以通过 %s 作为占位字符:
log.info("name:%s,phone:%s,idcard:%s已存在!",name,phone,idcard);

因为 jfinal 默认用的 log4j ,底层用的 String.format(...):
https://blog.csdn.net/anita9999/article/details/82346552

2020-09-23 15:23

setBaseDefaultName 我记得只是指定文件名的前缀,例如:
i18n_en-US.properties、 i18n_zh-CN.properties 这两个文件使用的前缀是 "i18n"

通过 setBaseDefaultName 可以改变这个前缀,一般不用修改,你碰到的或许主要是目录的问题,你配置的是 setBaseDefaultName("i18n/i18n") , JDK 可能将这个值当成了文件名

最后,你的最后一个 i18n_zh_TW.properties 好像是缺了一个下划线

2020-09-23 15:20

@sky浪翻云 这个问题最快的解决办法是找一找 JDK 有关 i18n 的文档,里头的用法本质上都是 JDK 给定的规则,很久不玩这个不记得

2020-09-23 12:13

@鼻涕刘o0 还真是,问题问的是 enjoy 不是 jfinal。 一眼扫过去太快

2020-09-23 11:17

@rirai undertow 给了报了异常,并没有当机,说明 undertow 可以识别这类攻击, undertow 相当好用