2018-03-02 16:50
@zhongshg jfinal enjoy 引擎的表达式在与 java 打通的基础上,做了极少的有助于用户体验的增强,例如本贴中的功能不仅支持 {1:'自买', 2:'跟买'}.get(type), 还支持:
{1:'自买', 2:'跟买'}[type]
如果懒得学习这类增强的用法,当成 java 去用也很方便
针对某个语言去写模板引擎,必须要与其语言直接打通的设计理念,这个在 jfinal enjoy 看来是极为自然的事情,可惜 freemarker velocity 之类的并没有这么做
2018-03-02 11:36
用一下 jfinal 中整合的 ehcache,关键配置是下面几个:
name="block"
timeToIdleSeconds="3000"
timeToLiveSeconds="0"
timeToIdleSeconds 为 3000 表示空闲时间达到 5 分钟即清除这个缓存,timeToLiveSeconds 为 0 表示缓存最大存活时间为永远,也就是说缓存清除交由第一个配置 timeToIdleSeconds 来控制
再做个拦截器,得到请求的 ip 地址为 key 值进行一些逻辑操作,大致如下:
String ip = IpUtils.getClientIp(inv.getController().getRequest());
Integer counter = CacheKit.get("block", ip);
if (counter == null) {
counter = 1;
CacheKit.put("block", ip, counter);
inv.invoke();
return ;
}
counter++;
CacheKit.put("block", ip, counter);
if (counter < MAX_VALUE) {
inv.invoke();
} else {
inv.getController().renderJson("msg", "访问太频繁");
}
2018-03-01 17:38
@wumugulu 试试 UploadFile files[] 改成 UploadFile files 看能不能支持
2018-03-01 00:30
非常高水平的分享,有很多值得学习的亮点:
1:Service 层应用 cache 的逻辑推理十分合理
2:拦截器中灵活运用了inv.getArgs() 得到用于生成 cache key 的参数值
3:拦截器中灵活运用了 inv.setReturnValue(...) 为业务层设置返回值
4:拦截器中使用 getMethod().getAnnotation(...) 配合自定义注解实现缓存的配置
5:注解配置中使用 enjoy 引擎表达式动态生成结果
6:简洁、优雅、完整的使用 jfinal 各种功能在业务层实现了缓存
这个缓存实现方案非常具有参考价值,建议小伙伴们用在自己的项目中,感谢分享
2018-02-28 17:14
@twzz 那就完全按其它项目来创建,然后手动再创建 jfinal 所需的 Java 类,以及手动改一下 web.xml 中 jfinal 所需的配置,启动方式也按照你以前的经验来,例如用 tomcat 等等
注意看一下文档:
http://www.jfinal.com/doc/1-4
2018-02-28 17:07
@twzz 出现这个错误提示,很可能是 web.xml 配置有问题,package 路径、类名要完全正确才可以