2017-07-07 11:19

最后再补充一点, jfinal 3.2 已经对 string template 默认进行缓存了,如果要缓存需要这么调用:
engine.getTemplateByString(content, true);

而 engine.getTemplateByString(content) 相当于第二个参数为 false,这个在升级到 3.2 版本的时候很轻松,先知道这件事就好

2017-07-07 11:18

@i++ 我倒是建议你不扩展 Engine,用一个独立的定时器线程每隔一段时间去看看 templateCacheSize(),如果超出一定的范围就清一下缓存,当然这样也会清掉模板文件的缓存

要做得更加完善,通过继承 engine 也是可以的,但不需要那么麻烦,只需要在继承类中覆盖掉 getTemplateByString 方法,然后将 key 存起来,并调用父类就可以了,大致如下:
public class MyEngine extends Engine {
Map stringTemplate = new HashMap();

public Template getTemplateByString(String content) {
String key = HashKit.md5(content);
Template ret = stringTemplate.get(key);
if (ret != null) {
return ret;
}
return super.getTemplateByString(content);
}

public void clearStringCache() {
// 这里对 Map stringTemplate 进行迭代
// 利用其 key 调用父类的 removeCache 方法
super.removeTempateCache(key);
stringTemplate.remove(key);
}
}

2017-07-07 11:09

直接获取页面内容直接给浏览器的用法,建议自己创建一个 MyRender,里面就是从文件系统加载内容,然后写到 response.getWriter() 中去就好,用的时候这样:
render(new MyRender(fileName));

2017-07-07 11:07

@朱 回复中的代码十分简洁,而且 key 值用到了比较操作符,超赞

2017-07-07 11:05

这个分享很有价值,已收藏并点赞

再建议用一下 jfinal-java8 版本来整合做一下,jfinal-java8 这个版本直接支持 action 参数注入:https://git.oschina.net/jfinal/jfinal/tree/jfinal-java8/

2017-07-07 11:03

@hzw 仔细看一下 jfinal 手册有关 sql 管理这一章,里面有很多例子

2017-07-07 11:01

你可以在 action 中判断一下是否为 https 请求,如果是的话,手动添加上这个 https 前缀,如果不是则直接: redirect("/agent/captcha");

2017-07-07 10:58

redirect 的时候,带上 htts 前缀: redirect("https:/agent/captcha");

这个地方确实可以考虑改进一下

2017-07-07 10:57

LenderController 的第 55 行与 BorrowerController 第 37 行,这两行代码所在的方法,互相之间在调用,形成了一个间接递归的关系

但这个递归调用没有结束控制,所以就会永远不停地调用下去,直到触发 JVM 的保护机制抛出异常

2017-07-05 18:55

@坚强的地瓜 好多方法判断:
1:用 string 的 endsWith 或者 startsWith 判断前缀与后缀
2:用正则表达式进行匹配

2017-07-05 18:38

参考一下 UrlSkipHandler 中的用法

2017-07-05 18:38

在 handler 中过滤的大致方式如下:
if (target 需要被过滤) {
HandlerKit.renderError(404);
} else {
next.handle(target, request response, isHandled);
}

2017-07-05 18:36

在后端 render("abc.html") 时,模板引擎是针对 abc.html 进行渲染,就算你的 abc.html 中引用了 def.js 文件,但这个 js 文件根本没走模板引擎,决然不可能渲染出 #(CONTEXT_PATH)

建议将 context path 渲染到 abc.html 文件之中,然后在调用 js 中的 function 的时候,当成参数传进去即可

2017-07-05 18:34

去掉 controller 中的所有 static 属性即可,注意多线程问题,多线程下的对象共享需要解决线程安全问题是 java 基础,一定要了解这个基本概念