java - 无法使用谷歌应用程序引擎显示图像

标签 java html spring google-app-engine

编辑:这已经开始工作,我没有改变任何东西,这是我第二次遇到这个问题,我的应用程序工作了一段时间,然后突然停止工作。 GAE对于Spring来说不可靠吗?还有其他人遇到过类似的 GAE 问题吗?

我无法在 jsp 页面上显示动画 gif。 gif 在本地显示,但当我将其放在应用程序引擎服务器上时,会引发错误。这是我的设置:

我已在 appengine-web.xml 中添加了图像目录:

<static-files> <include path="/images/**.*" /> </static-files>

我的项目结构:

enter image description here

I load the image using html code : `<img src="/images/ajax-loader.gif"/>`

但我收到错误:

enter image description here

管理控制台中抛出了 java.lang.NoSuchMethodError: 错误,但我不明白这怎么可能与加载 gif 图像有关? 我使用的gif来自http://www.ajaxload.info/ & 指标类型为“指标”

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)

外部库: enter image description here

最佳答案

NoSuchMethodError 几乎总是由于使用不兼容版本的库而引起。在这种情况下,您可能使用不同版本的 Spring 库。例如spring-web-3.1.0.jarspring-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,以确保在项目中只找到一个这样命名的类,并查看该类是否包含 isDefaultJndiEnvironmentAvailable() 方法。

  • 由于某种奇怪的原因,您没有执行当前的代码。尝试清理您的项目、临时文件夹和 Tomcat 工作目录。

如果这对您没有帮助,请向我们提供您的 war 中包含的所有 jar 列表。

关于java - 无法使用谷歌应用程序引擎显示图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9340765/

相关文章:

javascript - 动态获取当前 LatLng(Google map )

javascript - html5 Web SQL存储使用不同的js文件

javascript - 如何从下到上开始文本?

java - Spring 3 中字符串数组的问题

java - 在 REST 服务中使用 AOP 进行数据检索优化

java - StringTemplate 设置列表中最后一项的格式

java - 方法太复杂,无法使用 Try、Catch 进行分析

java - Swing 中的交互式平面直线图

java - 在 JavaFX 中根据对象状态的变化更新 UI 节点的正确方法是什么?

spring - 哪些资源可用于 Spring Integration 最佳实践