在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下把 这个包删了就好了