在Jetty調試下測試的時候遇到一個,同樣的內容在Tomcat下就沒有任何問題,問題是這樣的:訪問頁面的時候會出現例如css文件、js文件、圖片文件 等靜態文件沒有加載出來。
查看控制台后發現如下錯誤:
2013-07-25 23:48:29.782:WARN:oejs.ServletHandler:/SAMS/js/sams.utils.js java.lang.IllegalStateException: zip file closed at java.util.zip.ZipFile.ensureOpen(ZipFile.java:632) at java.util.zip.ZipFile.access$200(ZipFile.java:56) at java.util.zip.ZipFile$1.hasMoreElements(ZipFile.java:485) at java.util.jar.JarFile$1.hasMoreElements(JarFile.java:239) at org.eclipse.jetty.util.resource.JarFileResource.exists(JarFileResource.java:163) at org.eclipse.jetty.webapp.WebAppContext.getResource(WebAppContext.java:319) at org.eclipse.jetty.webapp.WebAppContext$Context.getResource(WebAppContext.java:1220) at org.eclipse.jetty.servlet.DefaultServlet.getResource(DefaultServlet.java:365) at org.eclipse.jetty.server.ResourceCache.lookup(ResourceCache.java:188) at org.eclipse.jetty.servlet.DefaultServlet.doGet(DefaultServlet.java:444) at javax.servlet.http.HttpServlet.service(HttpServlet.java:735) at javax.servlet.http.HttpServlet.service(HttpServlet.java:848) at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:558) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1362) at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilte java:88) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1333) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:487) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119) at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:483) at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:233) at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:972) at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:417) at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:192) at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:906) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117) at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:250) at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:149) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:110) at org.eclipse.jetty.server.Server.handle(Server.java:350) at org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:442) at org.eclipse.jetty.server.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:910) at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:565) at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:217) at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:46) at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:545) at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:43) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:598) at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:533) at java.lang.Thread.run(Thread.java:722)
其實我應該是沒有用到過zip這個東西才是,而且是靜態文件出錯,所以有可能是Jetty加載靜態文件室,使用了gzip之類的壓縮所以出錯。
但是我的另一個配置在Jetty里的應用卻沒有發生這樣的問題,所以我覺得這個錯誤一定和我的應用本身有關。
再往前查看 日志 發現
2013-07-25 23:43:25.889:WARN:oejj.ObjectMBean:No mbean getter or setters found for maxCookieAge in class org.eclipse.jetty.server.session.HashSessionManager七月 25, 2013 11:43:25 下午 com.sun.faces.config.ConfigureListener contextInitialized 信息: 初始化上下文 '/SAMS' 的 Mojarra 2.0.3 (FCS b03)七月 25, 2013 11:43:26 下午com.sun.faces.spi.InjectionProviderFactory createInstance 信息: JSF1048:有 PostConstruct/PreDestroy 注釋。標有這些注釋的 ManagedBeans 方法將表示注釋已處理。
google了一下出現 初始化上下文 '/SAMS' 的 Mojarra 2.0.3 的應該就是出現了包沖突。
沖突的包就是 有 com.sun.faces.config.ConfigureListener 這個類的包
ConfigureListener是jsf-impl.jar中的一個類,在lib下把 這個包刪了就好了