2019-10-17 14:53

jfinal 是 web mvc + orm 框架,在理论上来说,实现 RPC 与其它类似框架并没有不同

挑选一个你钟意的 RPC 或者 json 请求机制的第三方整合进 jfinal 即可。整合的过程先学会使用 jfinal 的 AOP、Inject 功能,这个是整合的关键

可以参考一下 @海哥 的 jpress、jboot ,他的这两个项目在 jfinal 基础上集成了这些功能:
https://gitee.com/fuhai/jboot
https://gitee.com/fuhai/jpress

2019-10-17 14:48

@ben0133 补充: 使用 JDK 自带的 visual VM 检查一下项目的资源回收情况,访问各个资源,看内存回收是否正常,线程数据量的增减是否正确

2019-10-17 14:36

异常信息是什么,此外,检查一下有没有资源泄漏的相关代码,例如,搜索一下整个项目使用关键字:
getConnection()

如果自己通过 getConnection() 获取过 Connection 对象,一定要在 finally 块中关闭它:
try {
...
} finally {
connection.close();
}

2019-10-17 12:47

按升级文档就可以升级了,需要改的地方都有说明

再一个,可以在首页右侧下载 changelog.txt,这一两年的新版本所做的改变在 chagelog 中有详细说明

jfinal 经过 8 年多的迭代,已经十分成熟稳定,所以近一两年的改进主要在 jfinal 内部,对于用户原有的使用习惯影响很小很小

2019-10-17 11:17

需要先转成 Model,并且该 Model 是通过生成器生成了 setter 方法的 ,假定 Model 名是 Article 可以通过如下代码存入数据库:
Article article = FastJson.getJson().parse(jsonString, Article.class);
article.save();

如果 jsonString 中的数据与 Article 的对应关系并不是严格对应字段的,可以通过 Map 作为中间转换:
Map map = FastJson.getJson().parse(jsonString, Map.class);
Article article = new Article();
article.setXxx(map.get(xxx));
article.setYyy(map.get(yyy));
article.save();

2019-10-17 10:43

@xspycsj 用 tomcat 就要将项目完全当成是一个普通的 java web 项目,启动方式与其它的 java web 方式完全一样

那么就不需要用 jfinal 提供的 main 方法启动,一定要看文档中有关说明:
https://www.jfinal.com/doc/1-11

用传统方式启动的时候,删掉 jetty-server.jar

2019-10-16 19:05

@xspycsj 参考文档第一章,里面讲了 tomcat、IDEA、jetty 这类问题

2019-10-16 17:26

@xspycsj 注意要将 class path 指向 WEB-INF/classes,否则找不到类,也找不到 web.xml

这纯粹是一个 IDEA 的使用问题,你运行其它类型的 java web 项目同样会面临这个问题

2019-10-16 17:19

出现的 404 界面是 jetty 的, 证明你的项目未真正启动,检查 web.xml 中的配置

验证我前面的说法,可以在 SystemConfig.java 中的任意方法中用 System.out.println(...) 输出一行提示,启动的时候这个提示不可能出现,证明你的应用并未启动

当然,最好的验证办法是在 SystemConfig.java 中的方法中设置断点,单步调试

2019-10-16 17:17

@小剑魔 这个是十分罕见的纯 eclispe 问题,建议不要浪费时间折腾,重新解压安装 eclipse 完事

折腾这种 eclipse 的 bug 没有意义

2019-10-16 15:14

maven 已成为 java 开发应该掌握的基本技能,有些常用的插件是必须要掌握的,列如博主分享的 maven-compiler-plugin

还有一些重要的也要熟悉,例如 jfinal 打包推荐的 maven-assembly-plugin。

jfinal 调研了大量的打包方法与插件,maven-assembly-plugin 是最好的,并且这个插件是 maven 官方提供的,用户量大且一直在迭代发展,可靠性有保障

2019-10-16 14:59

@任小伊roy 类型不对而已,单步调试了解一下具体类型,然后合理地使用对象类型来转换

如果还是解决不了,大不了将其中的数据读出来再放到新的 HashMap 中:
Map ret = new HashMap();
for (Iterator it=super.getParameterMap().entrySet().iterator(); it.hasNext();) {
Entry e = it.next();
ret.put(e.getKey(), e.getValue();
}

2019-10-16 11:31

@鲁智深 我估计是生成器在输出带小数点的字段名的时候,当成了 field 表达式,可以通过拿到模板文件:
https://gitee.com/jfinal/jfinal/blob/master/src/main/java/com/jfinal/plugin/activerecord/generator/base_model_template.jf

然后,将这个文件复制出来,改一改里面出问题的表达式,最后再为生成器配置自己的模板来代替官方的模板:
generator.setBaseModelTemplate("my_template.jf");
generator.generate();

类似的,除了 base_model_template.jf 以外,其它三类模板也可以通过这种方法来自己定制

由于 enjoy 模板有十分丰富的表达式,所以可以通过改变表达式来解决,例如:
#(obj.name.abc)
上述表达式如果其中的 name.abc 是作为字段名存在的,而 obj 又是一个 Map 对象的话,可以改成:
#(obj.get("name.abc"))
或者改成:
#(obj["name.abc"])

上述这种表达式换一种写法的方式可以参考文档

2019-10-16 00:01

@杜福忠 同理心是做出好产品的基本素质

2019-10-15 22:29

@杜福忠 技术起家创业,一定要注意抛弃技术思维

要以用户/客户价值为中心,技术当成工具、手段

我身边那些技术好的朋友创业都失败了,相反技术很差的创业却赚了不少钱。因为技术差的往往不会有技术思维,而更容易将目标专注于实现用户价值

希望你不要在创业过程中掉入技术思维的坑

当然,在创业过程中选择可以提升效率、降低成本的技术是很重要的,技术是工具不是目标,但好用的工具可以让工作事半功倍