小编典典

春季和跨上下文:WebAsyncManager无法强制转换为WebAsyncManager

jsp

我想在Spring应用程序中使用跨上下文功能,因此可以将一些webapp1 JSP导入到webapp2 JSP中。我正在将Eclipse
STS与随附的Tomcat 7.0.42(vFabric TC Server)和Spring Framework 3.2.8结合使用。

我已将Tomcat conf / context.xml配置为具有:

<Context crossContext="true">...</Context>`.

在webapp2 JSP中,我使用`

<c:import context="/webapp1" url="/myurl" />`.

当我调用webapp2 JSP时出现此错误:

HTTP Status 500 - javax.servlet.ServletException: javax.servlet.jsp.JspException: `java.lang.ClassCastException:` `org.springframework.web.context.request.async.WebAsyncManager cannot be cast to` org.springframework.web.context.request.async.WebAsyncManager`

有人遇到过这种情况么?


阅读 279

收藏
2020-06-08

共1个答案

小编典典

似乎Spring尚未准备好进行跨上下文请求处理(至少没有一点黑客手段)。

FrameworkServlet 总是尝试WebAsyncManager从请求属性中获取。而且它的提取方式无法在不同的上下文(类加载器)中工作。

我看到两种解决方法:

  • 实现您自己的includeJSP标记,该标记将包装原始请求,以使Spring特定的属性(通常以开头的属性org.springframework)在第二个上下文中不可见。
  • 将Spring JAR放在共享的类加载器路径中(这可能是更简单的方法)。
2020-06-08