使用 Servlet 2.5 测试 Spring Framework 4

2022-09-02 21:27:43

我在使用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的MockHttpServletRequest似乎依赖于Servlet 3.0向前发展。

如何解决此问题?谢谢。


答案 1

将 spring-test 的依赖项限制为 4 之前的版本,如 spring-test-3.2。

我不知道Spring-4放弃了对Servlet-2.5的支持。3.9 测试改进 说:

从 Spring 4.0 开始,org.springframework.mock.web 软件包中的模拟集现在与 Servlet 3.0 兼容。

我不明白“与 servlet-3 兼容”意味着丢弃了 servlet-2.5 支持。如果是故意的,它至少应该进入参考文档。因此,甚至可能值得提交一个关于它的错误(SPR-11292)。

但是等一下有3.4 Java EE 6和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 用于开发环境中测试设置的测试和模拟包中的先决条件。


答案 2

推荐