在ITEYE上看到很多JEECMS的帖子, 于是自己下载下来, 体验了一下。
JEECMS采用hibernate3+spring mvc+spring3+freemarker技术架构。
JEECMS的自定义模型吸引我了, 所谓自定义模型, 是能定义栏目或者内容的字段。界面如下
自己定义了栏目内容的模型, 然后看了一下数据库,
MariaDB [jeecms]> show table
+------------------------+
| Tables_in_jeecms |
+------------------------+
| jc_acquisition |
| jc_acquisition_history |
| jc_acquisition_temp |
| jc_advertising |
| jc_advertising_attr |
| jc_advertising_space |
| jc_channel |
| jc_channel_attr |
| jc_channel_ext |
| jc_channel_model |
| jc_channel_txt |
| jc_channel_user |
| jc_chnl_group_contri |
| jc_chnl_group_view |
| jc_comment |
| jc_comment_ext |
| jc_config |
| jc_config_attr |
| jc_content |
| jc_content_attachment |
| jc_content_attr |
| jc_content_channel |
| jc_content_check |
| jc_content_count |
| jc_content_ext |
| jc_content_group_view |
| jc_content_picture |
| jc_content_tag |
| jc_content_topic |
| jc_content_txt |
| jc_content_type |
| jc_contenttag |
| jc_dictionary |
MariaDB [jeecms]> desc jc_content_attr;
+------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+-------+
| content_id | int(11) | NO | MUL | NULL | |
| attr_name | varchar(30) | NO | | NULL | |
| attr_value | varchar(255) | YES | | NULL | |
+------------+--------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
自定义的字段都是存在 jc_content_attr 表当中,第一感觉jc_content_attr这个表会有性能问题,
虽然之后搜内容时, 会用lucence index, 但在hibernate显示页面都会查询这个表。
有些东西看似做的灵活, 内容一多,会存在性能问题。
接着看了一下动态页执行的controller
DynamicPageAct
/**
* 动态页入口
*/
@RequestMapping(value = "/**/*.*", method = RequestMethod.GET)
public String dynamic(HttpServletRequest request,
HttpServletResponse response, ModelMap model) {
// 尽量不要携带太多参数,多使用标签获取数据。
// 目前已知的需要携带翻页信息。
// 获得页号和翻页信息吧。
int pageNo = URLHelper.getPageNo(request);
String[] params = URLHelper.getParams(request);
PageInfo info = URLHelper.getPageInfo(request);
String[] paths = URLHelper.getPaths(request);
int len = paths.length;
if (len == 1) {
// 单页
return channel(paths[0], pageNo, params, info, request, response,
model);
} else if (len == 2) {
if (paths[1].equals(INDEX)) {
// 栏目页
return channel(paths[0], pageNo, params, info, request,
response, model);
} else {
// 内容页
try {
Integer id = Integer.parseInt(paths[1]);
return content(id, pageNo, params, info, request, response,
model);
} catch (NumberFormatException e) {
log.debug("Content id must String: {}", paths[1]);
return FrontUtils.pageNotFound(request, response, model);
}
}
} else {
log.debug("Illegal path length: {}, paths: {}", len, paths);
return FrontUtils.pageNotFound(request, response, model);
}
}
如果是栏目页就一定有index 字符, 就像http://localhost:8080/news/index.htm
现在CMS设计一般都会隐藏index.html, 还不如用urlrewrite 这样的开源JAR包重写一下。
看到这2个问题, 考虑是否真正用它来实现自己的系统, 或者重构一下, 有些东西还不如自己写一下。