发表于: 2017-12-05 22:16:33

1 654


今天完成的事情

尝试用注解的方式配置spring mvc

之前都是在web.xml中配置spring mvc的前端控制器的,采用注解的方式的话,需要写一个Java类:

public class SpittrWebAppInitializer extends

         AbstractAnnotationConfigDispatcherServletInitializer{
    /**
    * DispatcherServlet映射到"/"
    * @return
    */
   @Override
   protected String[] getServletMappings(){
       return new String[]{"/"};
   }
   @Override
   protected Class<?>[] getRootConfigClasses(){
       return new Class<?>[] {RootConfig.class};
   }
   /**
    * 指定配置类
    * @return
    */

   @Override    

    protected Class<?>[] getServletConfigClasses(){
       return new Class<?>[] {WebConfig.class};
   }
}

展AbstractAnnotationConfigDispatcherServletInitializer的任意类都会自动地配置DispatcherServlet和Spring应用上下文。在Servlet 3.0环境中,servlet容器会查找实现了ServletContationerInititalizer接口的类,如果有,就用它来配置Servlet容器,spring提供了这个接口的实现,名为SpringServletContainerInitializer,而这个接口又会查找实现WebApplicationinitializer的类并用它来进行配置,它有一个基础的实现,也就是AbstractAnnotationConfigDispatcherServletInitializer,扩展了它的类,servlet容器会自动发现它,并用来配置servlet上下文

getServletMappings()方法用来设置映射路径

getServletConfigClasses()方法返回的带有@Controller注解的类,将会用来定义DispatcherServlet应用上下文中的bean

WebConfig:

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

@EnableWebMvc用来启动spring mvc

viewResolver()方法用来配置试图解析器

控制器:

@Controller
public class HomeController {
   @RequestMapping(value = "/",method = RequestMethod.GET)
   public String home(){
      return "home";
   }
}

可以编写单元测试来测试控制器:

@Test
public void testHomePage()throws Exception{
HomeController controller = new HomeController();
   MockMvc mockMvc = standaloneSetup(controller).build();
   mockMvc.perform(get("/")).andExpect(view().name("home"));
}

testHomePage()方法发起了对“/”的get请求,并断言结果视图名称位home

测试通过:


明天的计划

看版本控制


遇到的问题


收获

对spring mvc的运行机制有了一些理解



返回列表 返回列表
评论

    分享到