2016-10-12 10:30

大规模系统会使用多个 redis 实例或同一个 redis 中的不同 db 来做不同模块的缓存,例如用户登录模块使用一个 redis 库,文章模块一个库

那么使用不同的 cacheName 就可以对应到不同的 redis 库,或者不同的 redis 实例,在使用的时候通过 Redis.use(cacheName) 就可以指定用的是哪个库

至于你说的用户的 key 与菜单 key 会重复的问题,显示需要让 key 不重复,或者 key 可以重复但存放的一级 key 不相同,redis 支持丰富的类型,你可以让用户与菜单分别放在两个不同的 map 中,在这两上 map 中使用相同的 key 就不会有问题

粗暴点的办法是将用户与菜单的 key 前面添加一个前缀,如: user_123, menu_123

当然,既然使用了 redis,一般都会将不同类型的数据放在不同的 map 中,建议学习一下 redis 的具体用法

2016-10-11 21:34

@nbjgl 前面只是公布了一点点社区源代码,逐步会有更有价值的代码分享出来

2016-10-11 21:33

@nbjgl jfinal 新社区不是闹着玩的,必将打造成极其专注的极速开发社区,提升开发效率、降低开发成本、提升开发体验

2016-10-11 21:25

@cnzzr 可以将这部分代码追加到贴子中,追加部分的前面说明一下是解决后的追加代码,因为回复功能不支持语法高亮显示,追加完后,可以再评论 @ 一下有需要的人就可以了,感谢支持

2016-10-11 21:21

我用的 jsoup 1.9.2,注意下版本

2016-10-11 21:13

自定义一个满足自己要求的白名单即可,以下是 jfinal 社区的代码,在 Jsoup 原有的 Whitelist.relaxed() 白名单基础上添加了一些额外的白名单,注意对于 a 的 href 很有用,否则会过滤掉 a 标签的 target属性:
static final Whitelist myWhiteList = createContentWhitelist();
Whitelist createContentWhitelist() {
return Whitelist.relaxed()
.removeProtocols("a", "href", "ftp", "http", "https", "mailto")
.removeProtocols("img", "src", "http", "https")
// 官方默认会将 target 给过滤掉
.addAttributes("a", "href", "title", "target")
// 在 Whitelist.relaxed() 之外添加额外的白名单规则
.addTags("div", "span", "embed", "object", "param")
.addAttributes(":all", "style", "class", "id", "name")
.addAttributes("object", "width", "height", "classid", "codebase")
.addAttributes("param", "name", "value")
.addAttributes("embed", "src", "quality", "width", "height", "allowFullScreen", "allowScriptAccess", "flashvars", "name", "type", "pluginspage");
}

然后用的时候这样:Jsoup.clean(content, myWhiteList );

2016-10-11 21:01

Jsoup 采用白名单的方式过滤,只有在白名单之内指定过的标记才会被保留,其它会全部被过滤掉

2016-10-11 20:58

在保存之前,用 Jsoup 这个工具,过滤掉一些不需要的内容,非常容易,一行代码的事,大致如下:
1:Jsoup.clean(content, Whitelist.relaxed()),过滤得比较 relaxed 宽松,li、h1、p、img 等等会被保留
2:Jsoup.clean(content, Whitelist.basicWithImages()),只保留基本的标记与图片标记
其它方法自己摸索一下,写个工具类,创建几个固定的过滤方法,例如 JsoupKit.filterContent(...)、JsoupKit.filterTitle(...) 基本就可以了

2016-10-11 18:14

jfinal 社区里面通用的功能会开源出来,多多关注社区动态

2016-10-11 18:03

此外 MyController 要注册路由,通过 me.add("/", MyController.class),MyHandler 也要注册一下 me.add(new MyHandler()),具体方法可以参考 jfinal 手册

通过以上方法进行的转发,可以在 MyController 中很方便的调用各种方法,例如 render(...)、renderJson()、getAttr("target")、getPara(...) 等等

2016-10-11 18:00

web.xml 中还是正常按 jfinal 的配置,配置上 JFinalFilter,然后再创建一个可访问到的 Controller,假定访问到这个 Controller.index() 方法的路由是 "/"

接下来做一个 MyHandler,将所有请求转发给前面的 Controller.index();
class MyHandler extends Handler {
public void handle(target, req, res, isHandled) {
// 先将 target 存起来,可在 controller 中通过getAttr("target")得到
req.setAttribute("target", target);
// 直接转发到 Controller.index();
next.handle("/", req, res, isHandled);
}
}

2016-10-11 16:35

@innerac 社区会逐步提供更多有价值的资源,多多关注社区动态

2016-10-11 16:01

@innerac 看具体场景,例如,你要用的这个功能本身就需要先启动一个服务,打开了监听端口之类这样才能工作,那就是要开启服务,如果只是使用 spring 的一些常规 API就不需要开服务,例如 factory.getBean(name) 这种从 spring 中获取 bean 是不需要开启服务的

2016-10-11 15:41

@innerac 理论上来说在 jfinal 中使用第三方,直接用就好,不一定要有一个集成的动作

2016-10-11 15:33

在 YourJFinalConfig 中创建一个 public void afterJFinalStart() 方法,在这里启动 Spring,然后就可以直接使用 spring 了