簡體   English   中英

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

[英]SpringMVC - java.lang.NoClassDefFoundError: javax/servlet/ServletContext

完成了許多試驗,但代碼未成功執行。 Spring in Action第4版第5章中的所有這些代碼,以及已下載的示例代碼均對此代碼進行了檢查,兩者都是相同的,因此我停止了思考。 我也用谷歌搜索了這么多的鏈接,但無法得到具體的解決方案。

配置DispatcherServlet

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[] {"/"};
    }
}

啟用S​​pring MVC

WebConfig.java

@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();
    }

}

RootConfig.java

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

}

HomeController.java

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM