我无法在jsp页面上显示动画gif。 gif在本地显示但是当我在app引擎服务器上放置时会抛出错误。这是我的设置:
我在appengine-web.xml中添加了图片目录:
<static-files> <include path="/images/**.*" /> </static-files>
我的项目结构:
I load the image using html code : `<img src="/images/ajax-loader.gif"/>`
但我收到错误:
java.lang.NoSuchMethodError:在管理控制台中被抛出,但我看不出这与加载gif图像有什么关系? 使用的gif取自http://www.ajaxload.info/&amp;指标类型是“指标”
java.lang.NoSuchMethodError: org.springframework.jndi.JndiLocatorDelegate.isDefaultJndiEnvironmentAvailable()Z
at org.springframework.web.context.support.StandardServletEnvironment.customizePropertySources(StandardServletEnvironment.java:85)
at org.springframework.core.env.AbstractEnvironment.<init>(AbstractEnvironment.java:101)
at org.springframework.core.env.StandardEnvironment.<init>(StandardEnvironment.java:54)
at org.springframework.web.context.support.StandardServletEnvironment.<init>(StandardServletEnvironment.java:43)
at org.springframework.web.servlet.HttpServletBean.<init>(HttpServletBean.java:90)
at org.springframework.web.servlet.FrameworkServlet.<init>(FrameworkServlet.java:211)
at org.springframework.web.servlet.DispatcherServlet.<init>(DispatcherServlet.java:303)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:532)
at java.lang.Class.newInstance0(Class.java:372)
at java.lang.Class.newInstance(Class.java:325)
at org.mortbay.jetty.servlet.Holder.newInstance(Holder.java:153)
at org.mortbay.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:428)
at org.mortbay.jetty.servlet.ServletHolder.doStart(ServletHolder.java:263)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:685)
at org.mortbay.jetty.servlet.Context.startContext(Context.java:140)
at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250)
at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517)
at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:467)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.createHandler(AppVersionHandlerMap.java:202)
at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.getHandler(AppVersionHandlerMap.java:171)
at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:123)
at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.run(JavaRuntime.java:422)
at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:449)
at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:455)
at com.google.tracing.TraceContext.runInContext(TraceContext.java:695)
at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:333)
at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:325)
at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:453)
at com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:251)
at java.lang.Thread.run(Thread.java:679)
外部库:
答案 0 :(得分:3)
NoSuchMethodError 几乎总是由于使用不兼容的库版本而导致的。在这种情况下,您可能正在使用不同版本的Spring库。例如 spring-web-3.1.0.jar 和 spring-context-3.0.x.jar 。因此,尝试将所有Spring jar更新为上一版本。
如果您告诉我们您使用的是哪个版本,我们可以为您提供更多帮助。
编辑: pom.xml中的Spring依赖项
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>3.1.0.RELEASE</version>
</dependency>
...
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>3.1.0.RELEASE</version>
</dependency>
</dependencies>
修改强>
嗯, NoSuchMethodError 告诉我们的是您的应用程序正在执行 StandardServletEnvironment ,认为 JndiLocatorDelegate 有一个名为 isDefaultJndiEnvironmentAvailable()的方法,但实际调用它时该方法不存在。但是这个方法存在于 org.springframewor.context-3.1.1.jar 中,你可以看到here (version 3.1.0)。
所以,问题可能是几件事:
类路径中有多个 JndiLocatorDelegate 。如果您使用其他库metrics.collector,则可以执行此操作。在Eclipse中,您可以按Ctrl + Shift + T并键入 JndiLocatorDelegate ,以确保在项目中只找到一个名为this的类,并查看该类是否包含 isDefaultJndiEnvironmentAvailable() 方法。
由于某些奇怪的原因,您没有执行当前的代码。尝试清理项目,临时文件夹和Tomcat工作目录。
如果这对您没有帮助,请向我们提供战争中包含的所有罐子的列表。
答案 1 :(得分:1)
为了查看导致此错误的原因(可能是GAE或Spring问题)
尝试使用与GAE 100%兼容的Spring版本,请在列表中查看
并选择与GAE合作的Spring版本 因为也许你试图使用的版本目前不适用于GAE(没有特殊的调整)
另外,请看一下:Can i use Spring on GAE?了解更多信息..,
答案 2 :(得分:0)
在你的html标签上:
<img src="/images/ajax-loader.gif"/>
我错过了webapps上绝对路径所需的Web应用程序上下文(除非它被配置为根应用程序)。
使用contextPath“/ foo”(如在http://host:post/foo
中):
<img src="/foo/images/ajax-loader.gif"/>
答案 3 :(得分:0)
尝试:
<static-files> <include path="/images/*.*" /> </static-files>
正则表达式中的双星号应该是一个闭包,它会杀死正则表达式或让它永远运行。
答案 4 :(得分:0)
由于HTML是单独提供的(通过调用servlet),因此请尝试通过直接追踪图像(使用图像的URL)将其删除。然后在日志中显示什么?
对我来说唯一可疑的是include元素。
<include path="images/*.gif" />
形式,之前遇到过一些奇怪的“**”处理。