2020-06-22 09:47
@JFinal 首先感谢波总的肯定,对“输出才是最好的输入”深有感触,疫情期间利用业余时间更加完整、深入的对文档和源码进行了学习,颇有收获,正在尝试进行更多的“输出”。
2020-06-06 22:17
@JFinal 已测试,反馈如下:
1、JFinal.initPathKit() 中的 servletContext.getRealPath("/"); 获取到的值,取决于 undertow.resourcePath,使用的是第一个有效目录;
2、根据代码观察应该是在 UndertowServer.configUndertow 中使用 di.setResourceManager(config.getResourceManager()); 逻辑将 undertow.resourcePath 和 servletContext 做了关联;
3、分别在 UndertowServer.start、UndertowServer.doStart、MyConfig.onStart、MyController 方法中输出了多次 PathKit.getWebRootPath,控制台显示的输出顺序是在 MyConfig.onStart 方法前后都有输出,但是 UndertowServer.start、UndertowServer.doStart 都不是配置中的,MyConfig.onStart、MyController 输出的是配置信息,这应该就是波总说的时机问题吧,但是能力有限暂时不能很好地理解这个时机。
2020-06-05 22:06
@JFinal 再次感谢波总,您说的非部署模式下“ PathKit 中的 webRootPath 可以被正确获取”这个过程我可以理解。但是非部署模式下我在 undertow.txt 中设置 undertow.resourcePath = G:/, classpath:static 后,Engine.addSharedFunction 开始在 G:/ 目录下开始寻找文件了,我是没有理解非部署模式下 undertow.resourcePath = G:/, classpath:static 怎么给到 webRootPath 的?
2020-06-05 20:42
@JFinal 非常感谢波总的耐心回复,但是还得追问一句,我看您说的这个地方了,他的上一步是先判断是否是部署模式,只有部署模式才进行哪个UndertowKit.configJFinalPathKit(config);我把这个代码贴出来,您再回忆回忆
/**
* 为 com.jfinal.kit.PathKit 注入值,以便支持 jfinal-undertow 的部署方式
* 该配置要兼顾开发与部署两种场景
*/
protected void configJFinalPathKit() {
// 部署模式下才需要为 jfinal 的 PathKit 注入值
if (UndertowKit.isDeployMode()) {
UndertowKit.configJFinalPathKit(config);
return ;
}
}
2020-02-06 18:05
@JFinal 使用Undertow - 2.0.28.Final也有这个问题
2020-02-06 18:05:24
[INFO]-[io.undertow.Undertow.start()]: starting server: Undertow - 2.0.28.Final
Loading complete in 0.6 seconds (^_^)
2020-02-06 18:05:44
[ERROR]-[com.sites.cms.common.GlobalErrorInterceptor.intercept()]: 抓获全局异常
java.lang.ClassCastException: com.sites.common.model.Account cannot be cast to com.sites.common.model.Account
at com.sites.cms.login.LoggedInterceptor.intercept(LoggedInterceptor.java:23)
at com.jfinal.aop.Invocation.invoke(Invocation.java:91)