2020-01-17 16:00
@北流家园网 java 的 Instrumentation 机制 + 定制 ClassLoader, 用这两套东西将 JVM 类加载接管过来,然后对于动态改变的 .class 文件进行重加载
重加载修改类并不是最麻烦的,最麻烦的事情是重加载类如果在内存中有对象实例,还需要将这些实例对象进行更新替换
jfinal undertow 用了 ClassLoader 通过重启容器来实现热加载,绕开了很多麻烦事
jrebel 这个第三方是专门实现热加载的,它做得比较细粒度,所以工作量极大,是一个很大的项目,可以参考一下
2020-01-16 19:00
将映射时的 "oauth/2.0/token" 改为 "oauth/20/token",也就是去掉小数点
然后用一个 Handler 做一下转换,将 String target 参数转换一下即可:
public class MyHandler extends Handler {
public void handle(String target ...) {
if (taget.startsWith("oauth/2.0/token")) {
target = target.replace("oauth/2.0/token", "oauth/20/token");
}
next.handle(...);
}
原因是 jfinal 会将带有小数点的 url 当成是静态资源,不会处理掉
上面的方案是将带小数点的 url 转成了不带小数点的,而 controller 被映射成了不带小数点的
2020-01-16 14:50
@任小伊roy 如果异出是在 controller 中进行的,在最后一行添加一句:
renderNull();
如果导出是在 handler 中进行的,注意要去掉 :
next.handle(target, request, response, isHandled);
并且要添加下面一行代码:
isHandled[0] = true;
2020-01-14 17:27
@yq95279527 性能上无差别, 用法是一样的,建议升级,这里有极其简单的升级文档:
https://jfinal.com/doc/14-1