2019-08-30 10:18

render 时的错误在拦截器中获取不到,我前面给的方案是获取 controller 以及 interceptor、以及业务层的异常

如果你想获取 render 中的异常,继承 RenderFactory, 覆盖掉其中的 getErrorRender(...) 方法,将其返回的 render 自己定制一下即可,非常容易

最后配置一下:
me.setRenderFactory(new MyRenderFactory());

上面这行代码假定你扩展出来的类是 MyRenderFactory extends RenderFactory

2019-08-30 09:42

日志里面会有这类信息

不建议将这类信息响应到客户端,攻击者可以利用这个功能有针对性攻击,在出异常时响应 500 页面、404 页面即可

如果一定要显示这类异常,做一个全局拦截器即可,大致代码:
try {
inv.invoke();
} catch( Exception e) {
inv.getController().setAttr("errorMsg", e.getMessage());
inv.getController().render("error.html");
}


如果你是希望将错误输出为 json ,可以这样:
inv.getController().renderJson("errorMsg", e.getMessage());

2019-08-29 20:10

@渴死的鱼 "换成这个" 是换成哪个?

2019-08-29 17:10

大概率是客户端出问题了

做一个 html ,里面放上 input type=file 表单域,测试一下上传功能是否正常

你现在发贴上传的这个异常信就是用的 jfinal + cos 来上传的,用了八年多了,没有问题的

2019-08-29 16:32

jfinal 性能是 spring + mybatis 的 4.56 倍,这里是测试项目链接:
https://gitee.com/jfinal/jfinal-performance

jfinal 模板引擎性能是 freemarker 的 4.27 倍,是 velocity 的 3.42,不仅速度快而且内存占用更小,这里是测试项目链接:
https://gitee.com/jfinal/enjoy-performance

jfinal 4.4 又优化了 enjoy 模板引擎的性能,再次提升了 13% 的性能

比 jfinal 性能低得多的 spring 已被广泛应用,所以,完全不必关心 jfinal 的性能

2019-08-29 16:30

并发与很多因素相关, jfinal 诞生八年多,一直都极度关注性能,每一行代码都要考虑性能

所以 jfinal 的性能民传统框架的好几倍,可以自己在本地测试一下,参考这篇文章中提供的测试项目:
https://www.oschina.net/news/90815/jfinal-3-3

2019-08-29 14:49

注意排查是不是有多个版本 druid 的 jar 包有冲突,或者是没有引入该 jar 包

2019-08-29 14:48

@MarlonBrando jar包放到Tomcat的lib文件夹下不是一个好办法

这种方式能解决,已经证明了是 jar 包的问题,排查一下很好解决

2019-08-29 12:10

添加一下 druid 的依赖,可以参考 jfinal 项目的 pom.xml
https://gitee.com/jfinal/jfinal/blob/master/pom.xml

注意要去掉 scope provided 这个配置项

2019-08-29 12:09

@lori 如果希望用 fastjson 转换,需要配置:
me.setJsonFactory(new FastJsonFactory());

设置断点,看看转换流程走的是哪个类,这类问题很好查

出现 attrs 这个不太正常,一定要查出原因来,记得搞定后回来分享一下

2019-08-29 10:56

调整数据库连接池的初始大小,新版本 jfinal 做过调整,建议升级到最新版本 jfinal

启动会快得多

2019-08-29 10:11

检查你的 sql 序列处在事务中时,是不是发生了死锁

然后 google 搜索一下 "mysql 死锁" 解决

2019-08-29 10:04

看一下 jfinal 的 Model.java 源码中的 getAttrs() 方法是不是存在?

如果存在的话,升级到新版本,新版本方法名添加了下划线,不会被 fastjson 处理 _getAttrs()

不过这个只能解释属性到了 attrs 下面的原因,不能解释为什么你生成的 getter 方法未被用在 json 转换之中

查看一下 Useryieldlog 的 base model , 是不是真的生成了合格的 getter 方法

2019-08-28 18:22

拦截器与 Filter 完全无关

如果你是想添加 Filter ,直接在 web.xml 中添加即可,如果是 jfinal undertow 下开发,看下文档有关如何添加的办法

2019-08-28 17:19

大厂开放 API 时要考虑没有用上 https 通道的用户,所以一开始就提供了签名验证机制

有了签名机制无论在 https 还是 http 通道内都是安全的(当然,没有绝对的安全)

签名机制不要考虑是不是麻烦,而是要考虑是否有必要