我在使用Servlet 2.5让Spring Framework 4与我现有的项目一起工作时遇到了问题。我的web项目实际运行正常,但我的测试用例失败,它是由MockHttpServletRequest
引起的,它引发了这个异常: -
java.lang.NoClassDefFoundError: javax/servlet/AsyncContext
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
我尝试添加任一依赖项,但我会得到其他与Servlet 3.0相关的异常: -
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>6.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>servlet-api</artifactId>
<version>3.0.20090124</version>
<scope>test</scope>
</dependency>
基于Spring Framework网站,它可以与Servlet 2.5一起使用。但是,Spring 4's MockHttpServletRequest
似乎依赖于Servlet 3.0前进。
如何解决此问题?感谢。
答案 0 :(得分:19)
将spring-test的依赖项限制为4之前的版本,如spring-test-3.2。
我不知道Spring-4放弃了对Servlet-2.5的支持。 3.9 Testing Improvements说:
从Spring 4.0开始,org.springframework.mock.web包中的模拟集现在与Servlet 3.0兼容。
我不明白“与servlet-3兼容”意味着删除了servlet-2.5支持。如果它是故意的,它至少应该进入参考文档。因此,甚至可能值得提交一个关于它的错误(SPR-11292)。
但请等待3.4 Java EE 6 and 7:
Java EE 6或更高版本现在被认为是Spring Framework 4的基准,JPA 2.0和Servlet 3.0规范特别相关。[...]可以将Spring应用程序部署到Servlet 2.5环境中。但是,尽可能推荐使用Servlet 3.0+。
所以我认为这符合文档中提到的资格。
<强>更新强> Spring 4.0.1参考文档现在更清楚Mocks:
强烈建议使用Servlet 3.0+,这是Spring测试和开发环境中测试设置的模拟包的先决条件。