2020-02-09 18:05

关键信息是这句:
09-Feb-2020 17:31:56.199 严重 [main] org.apache.catalina.core.StandardContext.startInternal One or more Filters failed to start. Full details will be found in the appropriate container log file

注意去 tomcat 自身的 log file 中去找错误,现有异常并不明确。从代码上看没有什么问题

此外,建议使用 jfinal undertow 开发,而不是 JFinal.start(...) 使用的 jetty

说到 jetty ,我估计是你 jetty 的 jar 包没删干净,从而与 tomcat 的 jar 包相关冲突,注意看文档中的有关说明,注意看第二小节的内容:
https://jfinal.com/doc/1-7

2020-02-08 19:22

最好的办法是规范数据,传输过来的数据要严格限定格式

2020-02-08 18:46

自己写个解析程序,可以配合正则表达式

如果你的每对 key value 之间的分隔符没有统一的话,可以先利用 JDK 中的 String.replaceAll(String regex, String replacement) 方法,将分隔符统一,例如统一成 "###":
str = str.repalceAll(regex, "###");
String[] keyValueArray = str.split("###");

上面两步就将所有 key value 全放到数组里头去了,然后你再利用:
kv.splite("=")
就可以将 key value 分离出来了

注意这些事都与 jfinal 无关

2020-02-08 18:40

可能是下载不稳,先将本地 maven 库中的相关目录删掉,让 maven 重新下载

另外,注意使用比较新的 maven 版本,还要注意配置好:
https://jfinal.com/doc/1-1

2020-02-08 14:47

meal 里的食物 ID ,存的是 "1, 2, 3" 一定要拆分改成一对多或者多对多关系,否则后患无穷

2020-02-07 11:14

@yxhjeremy 如果你用的是 jfinal-undertow, 那么是不需要自行引入 servlet-api.jar 的,因为 jfinal-undertow 已经帮你引入了最新版本

在 webapp/WEB-INF/lib 放的 jar 包,可以通过配置 pom.xml 中的 dependency 来解决:
https://www.jianshu.com/p/f50841f0963d

具体办法是配置其 scope 为 system,然后再添加一个 systemPath

如果有外部 jar 包不要放 webapp/WEB-INF/lib 下面,因为 eclipse 会默认再一次让这个目录下的 jar 包生效,这与前面的配置 pom.xml 的方式重复了

2020-02-06 21:24

检查打包后的 lib 目录下面的 jar 包, 可能出现了多个 servlet-api 有关的 jar 包,也可能是 servlet-api 的 jar 包的版本不对

2020-02-06 18:36

@永字诀 早就解决了,注意配置 undertow.hotSwapClassPrefix,文档中有:
https://jfinal.com/doc/1-5

2020-02-05 12:47

jfinal club 整体上就是本站 jfinal.com 的功能,代码简洁,很多功能直接可以用于二次开发,例如权限管理、内容管理、账户管理、登录、注册、账号激活等功能

2020-02-03 20:29

很可能是你有线程是 "非守护线程",JVM 无法退出

检查你项目中启动的线程是不是设置了 setDaemon(true)

2020-02-03 18:46

@琴海森林 我自己测试是没有问题的,可能有些同学的环境不同,后续版本我计划将 RedirectRender.java 中的注释再放开

2020-02-03 18:45

没真正重启成功

注意一下官方启动脚本里头有一个注释说明,讲到了 kill 指令的 -9 这个参数,如果出于什么原因无法停止项目,可以加上这个参数

2020-02-02 12:34

建议加入俱乐部,获取 jfinal 官网代码,一整套解决方案,十分便利:
https://jfinal.com/club

2020-02-02 12:33

jfinal.com 官网中就是用了这样的机制,很便利,例如:
public class BaseController extends Controller {
@NotAction
public Account getLoginAccount() {
....
}

@NotAction
public boolean isLogin() {
return getLoginAccount() != null;
}

@NotAction
public boolean notLogin() {
return !isLogin();
}
}

2020-02-02 12:30

getSession() 依赖于 Controller 内部持有的 HttpServletRequest request 对象,而你的 UtilController 继承 Controller 时,这个对象是不存在的

你可以引入一个 public class BaseController extends Controller ,然后在这里面添加 getIdentity() 方法。最后,你所有的 controller 改为继承 BaseController 即可