![](/img/trans.png)
[英]java.lang.NoClassDefFoundError: javax/servlet/ServletContext
[英]SpringMVC - java.lang.NoClassDefFoundError: javax/servlet/ServletContext
完成了许多试验,但代码未成功执行。 Spring in Action第4版第5章中的所有这些代码,以及已下载的示例代码均对此代码进行了检查,两者都是相同的,因此我停止了思考。 我也用谷歌搜索了这么多的链接,但无法得到具体的解决方案。
public class SpittrWebappInitializer
extends AbstractAnnotationConfigDispatcherServletInitializer{
protected Class<?>[] getRootConfigClasses(){
return new Class<?>[] { RootConfig.class};
}
protected Class<?> [] getServletConfigClasses(){
return new Class<?> [] { WebConfig.class};
}
protected String[] getServletMappings(){
return new String[] {"/"};
}
}
@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";
}
}
视图名称“ home”位于/WEB-INF/views/home.jsp中。
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"));
}
}
您的类路径中需要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 MVC是一个Web框架,其建立在Java Servlet规范之上。
因此,实现此规范的jar必须位于类路径中。 更具体地说,ServetContext位于:
javax.servlet:javax.servlet-api:3.1.0
(版本可能会有所不同,具体取决于您认为的春季版本,但这是一个不错的起点)
因此,只需确保它驻留在类路径中,然后尝试启动您的应用程序即可。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.