SpringMVC-java.lang.NoClassDefFoundError:javax/servlet/ServletContext

SpringMVC-java.lang.NoClassDefFoundError:javax/servlet/ServletContext,java,spring,spring-mvc,Java,Spring,Spring Mvc,做了这么多试验,但代码没有成功执行。所有这些代码都来自《Spring in Action》第四版第五章,而且这些代码与下载的示例代码都是相同的,所以我停止了思考。我也在谷歌上搜索了很多链接,但没有找到具体的解决方案 配置DispatcherServlet RootConfig.java HomeController.java 看法 视图名home位于/WEB-INF/views/home.jsp,并且已经存在 测试控制器 SpringMVC是一个web框架,它构建在Javaservlet规范之上

做了这么多试验,但代码没有成功执行。所有这些代码都来自《Spring in Action》第四版第五章,而且这些代码与下载的示例代码都是相同的,所以我停止了思考。我也在谷歌上搜索了很多链接,但没有找到具体的解决方案

配置DispatcherServlet RootConfig.java HomeController.java 看法 视图名home位于/WEB-INF/views/home.jsp,并且已经存在

测试控制器
SpringMVC是一个web框架,它构建在Javaservlet规范之上

因此,实现该规范的jar必须位于类路径中。 更具体地说,ServetContext位于:

servlet:javax.ServletAPI:3.1.0版本可能会因spring版本的不同而有所不同,但这是一个很好的起点


因此,只需确保它驻留在类路径中,并尝试启动应用程序。

您的类路径中需要servlet api。如果您使用的是maven,只需在POM中添加以下依赖项:

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.0.1</version>
    <scope>provided</scope>
</dependency>

如果您没有使用Maven,只需从Maven central下载servlet api工件,并将其保存在您的类路径中。

您是spring的初学者吗?我建议使用springboot&或者在这里看一看,同时发布logNoClassDefFoundError几乎总是意味着缺少依赖项。这里,您缺少javax.servlet.Side注意:您使用哪个版本的ServletAPI应该取决于您的应用服务器支持哪个版本的JavaEE。上面的代码片段只是一个例子。但是是的,OP必须注意你的观点。
@Configuration
@EnableWebMvc
@ComponentScan("spittr.web")
public class WebConfig 
        extends WebMvcConfigurerAdapter{ 

    @Bean
    public ViewResolver viewResolver(){
        InternalResourceViewResolver resolver = 
                    new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setSuffix(".jsp");
        resolver.setExposeContextBeansAsAttributes(true);
        return resolver;
    }

    @Override
    public void configureDefaultServletHandling(
                        DefaultServletHandlerConfigurer configurer){
        configurer.enable();
    }

}
@Configuration
@ComponentScan(basePackages={"spittr"},
            excludeFilters={
                @Filter(type=FilterType.ANNOTATION,      
                 value=EnableWebMvc.class)
            })
public class RootConfig {

}
package spittr.web;
import static org.springframework.web.bind.annotation.RequestMethod.*;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class HomeController {

        @RequestMapping(value="/", method=GET)
        public String home(){
            return "home";
        }
}
package spittr.web;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
import static org.springframework.test.web.servlet.setup.MockMvcBuilders.*;

import org.junit.Test;
import org.springframework.test.web.servlet.MockMvc;


public class HomeControllerTest {
    @Test
    public void testHomePage() throws Exception {
        HomeController controller = new HomeController();

        //assertEquals("home", controller.home());

        MockMvc mockMvc = standaloneSetup(controller).build();

        mockMvc.perform(get("/"))
            .andExpect(view().name("home"));

    }

}
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.0.1</version>
    <scope>provided</scope>
</dependency>