Jetty服务在调试JFinal项目的启动问题

Jetmark 发布于 2013/05/11 09:09
阅读 4K+
收藏 2

看到JFinal-BBS中使用了Jetty启动WEB服务,代码及注释如下:

/**
	 * 建议使用 JFinal 手册推荐的方式启动项目<br/>
	 * 运行此 main 方法可以启动项目,此main方法可以放置在任意的Class类定义中,不一定要放于此<br/>
	 * 第一个参数填写的是“WEB-INF”文件夹的父文件夹名称<br/>
	 * 第二个参数是设置访问的端口号<br/>
	 * 第三个参数是设置该项目的访问根目录<br/>
	 * 第四个参数是设置jetty每隔几秒钟扫描文件变化并重启应用<br/>
	 */
	public static void main(String[] args) throws Exception {
		JFinal.start("web", 80, "/", 5);
	}
对Jetty的使用方法很简单,就是运行这个Java Application就可以了,Jetty会在每隔5秒扫描文件的改变,在调试Java项目的过程中,省去了反复启动WEB服务的麻烦,节省了很多的时间。

但我在运行时,JFinal出现了以下错误(使用Tomcat Server启动是正常的):

OSC的编辑问题编辑是否有BUG,重新粘贴下:

2013-5-11 9:10:24 org.eclipse.jetty.util.component.AbstractLifeCycle setFailed
警告: FAILED jfinal: java.lang.RuntimeException: Can not create instance of class: com.taxhotline.web.WebConfig. Please check the config in web.xml
java.lang.RuntimeException: Can not create instance of class: com.demo.web.WebConfig. Please check the config in web.xml  --这个文件是存在的,并且配置也是正确的
at com.jfinal.core.JFinalFilter.createJFinalConfig(JFinalFilter.java:99)
at com.jfinal.core.JFinalFilter.init(JFinalFilter.java:47)
at org.eclipse.jetty.servlet.FilterHolder.doStart(FilterHolder.java:119)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:724)
at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:265)
at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250)
at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:706)
at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:492)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:95)
at org.eclipse.jetty.server.Server.doStart(Server.java:277)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
at com.jfinal.server.JettyServer.doStart(JettyServer.java:117)
at com.jfinal.server.JettyServer.start(JettyServer.java:64)
at com.jfinal.core.JFinal.start(JFinal.java:165)
at com.demo.web.WebStart.main(WebStart.java:8)
===>>>Loading.....  ---在WebConfig的构造方法中打印出了这行信息
2013-5-11 9:10:24 org.eclipse.jetty.webapp.WebAppContext doStart
警告: Failed startup of context o.e.j.w.WebAppContext{/,file:/d:/java/demo/WebContent/}
java.lang.RuntimeException: Can not create instance of class: com.demo.web.WebConfig. Please check the config in web.xml
at com.jfinal.core.JFinalFilter.createJFinalConfig(JFinalFilter.java:99)
at com.jfinal.core.JFinalFilter.init(JFinalFilter.java:47)
at org.eclipse.jetty.servlet.FilterHolder.doStart(FilterHolder.java:119)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:724)
at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:265)
at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250)
at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:706)
at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:492)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:95)
at org.eclipse.jetty.server.Server.doStart(Server.java:277)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
at com.jfinal.server.JettyServer.doStart(JettyServer.java:117)
at com.jfinal.server.JettyServer.start(JettyServer.java:64)
at com.jfinal.core.JFinal.start(JFinal.java:165)
at com.taxhotline.web.WebStart.main(WebStart.java:8)
2013-5-11 9:10:24 org.eclipse.jetty.server.AbstractConnector doStart
信息: Started SelectChannelConnector@0.0.0.0:8080
Starting Complete. Welcome To The JFinal World :) ----JFinal提示启动完成了

加载中
2
紫电清霜
紫电清霜
有时候jetty自动扫描更新并加载不管用,访问时会出现莫名其妙的bug,最好是更改之后再次运行main方法。
Jetmark
Jetmark
问题解决了,是因为WEB-INF目录下没有classes目录的缘故,使用Tomcat时,每次有文件更新,再进行Refresh操作时,Eclipse会重新编译Java代码并Deploy到Tomcat服务设定的目录。因此,在设计目录的WEB-INF下却没有classes目录,将Java编译到这个目录下,再启动Jetty就没有问题啦。
Jetmark
Jetmark
我在用Tomcat,重启时,每次是先Refresh,然后Run server,至少要点一次鼠标和两次快捷键,很麻烦。以上的问题在tomcat下是没有的。
1
绝望的八皮
绝望的八皮
请问你确定你项目的bulid path里面吧class文件输出的路径设置成了WebRoot/WEB-INF/classes吗。
Jetmark
Jetmark
对,就是你说的这个原因,已经解决啦,谢谢!!!
0
紫电清霜
紫电清霜
哦,出现了什么错误?你把错误信息放上来看看。另外可以加入jfinal群:222478625,方便交流提问
Jetmark
Jetmark
首先,你回复的很及时哈! 发现OSC一个很奇怪的问题,我刚刚在提交一个问题,不小心按了Ctrl+Enter,然后我就修改这个问题再保存,结果发现有出现了一个链接地址http://www.oschina.net/question/265150_110301,请移步。
0
紫电清霜
紫电清霜

哦,哈哈,刚刚去买菜了,才回来~

错误信息提示是:找不到类,所以可以看看那个类(MyConfig.java)在不在,或者有没有被正确配置(web.xml里配置)。

嗯,解决了就好哈:)

返回顶部
顶部