EAR 在 Weblogic 10.3.6 中不工作

EAR not working in Weblogic 10.3.6

我正在使用 Eclipse,当我 运行 Pivotal tc(又名 Tomcat)下的 Spring MVC 项目时,我有一个正确显示的图像(我可以达到它的 URL),但是当我在 Weblogic 10.3.6 下 运行 EAR 项目(加载 Spring MVC 项目)时图像没有显示,当我尝试直接加载时图片 URL(在浏览器 "open in a new window" 上),我得到这个错误:

java.lang.NoSuchMethodError: javax.servlet.http.HttpServletResponse.getStatus()I
    at org.springframework.web.context.request.ServletWebRequest.checkNotModified(ServletWebRequest.java:176)
    at org.springframework.web.servlet.resource.ResourceHttpRequestHandler.handleRequest(ResourceHttpRequestHandler.java:241)
    at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:51)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
    at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
    at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:301)
    at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)
    at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
    at oracle.security.jps.ee.http.JpsAbsFilter.run(JpsAbsFilter.java:119)
    at java.security.AccessController.doPrivileged(Native Method)
    at oracle.security.jps.util.JpsSubject.doAsPrivileged(JpsSubject.java:315)
    at oracle.security.jps.ee.util.JpsPlatformUtil.runJaasMode(JpsPlatformUtil.java:442)
    at oracle.security.jps.ee.http.JpsAbsFilter.runJaasMode(JpsAbsFilter.java:103)
    at oracle.security.jps.ee.http.JpsAbsFilter.doFilter(JpsAbsFilter.java:171)
    at oracle.security.jps.ee.http.JpsFilter.doFilter(JpsFilter.java:71)
    at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
    at oracle.dms.servlet.DMSServletFilter.doFilter(DMSServletFilter.java:139)
    at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
    at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3730)
    at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3696)
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
    at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
    at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2273)
    at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2179)
    at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1490)
    at weblogic.work.ExecuteThread.execute(ExecuteThread.java:256)
    at weblogic.work.ExecuteThread.run(ExecuteThread.java:221)

图片在下面:/resources/images/ 我通过以下方式加载它:

<img th:src="@{/resources/images/0-logo.gif}" />

在 xml 我有:

<mvc:annotation-driven/>
<mvc:resources mapping="/resources/**" location="/resources/"/>

为什么只有当我在 tomcat 我的项目 Foo 上 运行 时才显示图像,而当我在 Weblogic 下 运行 FooEAR 时不显示图像?我能做什么?我需要任何额外的配置吗?

解法:

从 spring 4.2.0.RELEASE 降级到 3.1.4.RELEASE 和 thymeleaf 从 2.1.3.RELEASE 降级到 2.1.2.RELEASE 解决了我的问题。阅读答案了解更多详情。

我猜问题出在上下文根映射上。

尝试添加特定于 WebLogic 的部署描述符并添加上下文根立场。

尝试查看 WebLogic deployment descriptor docs 以获取有关如何操作的更多信息。

HttpServletResponse#getStatus 仅在 Servlet 3.0 中添加。该问题是由您的应用程序服务器提供的旧 Servlet 实现引起的。查看Weblogic的版本,看是否实现了Servlet 3.

更新:根据提供的信息,您使用的Weblogic版本为10.3.6。看看这个 Servlet version support table,您至少应该使用 Weblogic 12c 才能使用 Servlet 3。