JFinal.start(String webAppDir, int port, String context, int scanIntervalSeconds)
jfinal.start方法是利用当前工作空间作为部署目录,并且监控当前项目的WebRoot/WEB-INF/classes下文件变化来热加载的。
比如我有eclipse有两个项目,一个是jfinal-generator一个是demo.
我想在jfinal-generator这个项目里面通过一个main方法启动demo。
如果是在jfinal-generator中启动下面代码
JFinal.start(“WebRoot", 8080, "/generator", 5);
假如加载的是/home/kid/workspace/jfinal-generator/WebRoot下的内容,那么监控的是/home/kid/workspace/jfinal-generator/WebRoot/WEB-INF/classes下的classes变化
监控文件变化的目录可以通过修改以下代码实现
// configureScanner if (scanIntervalSeconds > 0) { Scanner scanner = new Scanner("新增一个参数传入", scanIntervalSeconds) { public void onChange() { try { System.err.println("Loading changes ......"); webApp.stop(); webApp.start(); System.err.println("Loading complete.\n"); } catch (Exception e) { System.err.println("Error reconfiguring/restarting webapp after change in watched files"); e.printStackTrace(); } } };那么怎么设置webAppDir,才能做到在jfinal-generator中启动demo这个项目呢?
源代码相关部分如下
webApp = new WebAppContext(); webApp.setContextPath(context); webApp.setWar(webAppDir); webApp.setInitParameter("dirAllowed", "false"); webApp.setInitParameter("useFileMappedBuffer", "false"); // web.setInitParams(Collections.singletonMap("org.mortbay.jetty.servlet.Default.useFileMappedBuffer", "false")); server.setHandler(webApp);
似乎用到weAppdir这个变量就这里
webApp.setWar(webAppDir)
JFinal.start("WebRoot", 8080, "/demo", 5);
这样是加载的本项目而不能加载到demo这个项目。
JFinal.start("/home/workspace/kid/demo/WebRoot", 8080, "/demo", 5);
会java.io.FileNotFoundException: /home/workspace/kid/demo/WebRoot.
webApp.setWar(webAppDir);
这个貌似不是war文件,所以应该换个方法……比如setResourceBase……你懂得
感谢@JFinal 敬礼
######发现jetty源码里面应该setWar兼容setResourceBase的。你再看看你那个路径是不是写错了?######上次发给你的 JFinal 新版本不是已经用的 setBaseResource(...)了吗? 如果没有,找我拿一个最新版本######新版本什么时候发布啊? ######据小道消息说是最近哈哈###### ./ 强势围观、 希望能以简洁为准版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。