Spring3.0 – 学习笔记 –MVC装配

Spring3.0 – 学习笔记 –MVC装配

------转载请注明出处  作者:小魔头

(未完待续)

1.Spring MVC 请求流程

   DispatcherServlet是绝对的核心控制在整个流程中

 

2. 配置方式:

    a.JavaConfig和自动隐式装配

    b.xml装配

3.JavaConfig显示和自动隐式装配Spring MVC

   3.1 DispatcherServlet及config

    a.在servlet3.0中,服务器容器根据查找javax.servlet.ServletContainerInitializer的实现来配置servlet容器,具体spring如何实现这里不深入研究

    b.只需要继承Spring的AbstractAnnotationConfigDispatcherServletInitializer, 并且重写如下3个方 法,就可以将DispatcherServlet配置到servlet容器中,其实上面的spring父类会同时创建DispatcherServlet and ContextLoaderListener,作用如下:

Protected String getServletMapping(){
    return new String[]{"/"};//MVC总入口,接受所有请求
}

    //ContextLoaderListener 将会配置RootConfig中的业务逻辑bean(service,DB)

Protected Class<?> getRootConfigClasses(){
    return new Class<?>{RootConfig.class};
}
       //DispatcherServlet 将会配置WebConfig种配置的MVC组件bean(控制器,视图解析器和处理器映射)
Protected Class<?> getRootConfigClasses(){
    return new Class<?>{RootConfig.class};
}
 

 

    c. 配置WebConfig,显示的声明配置控制器,视图解析器和处理器映射bean

        i.add @Configuration
        ii.add @EnableWebMvc -- 如果采用xml配置可以由<mvc:annotation-driven>来同样启动        springmvc注解相关的组件
        iii.add@ComponentScan({"com.package1","com.package2"})启动组件扫描,这样不仅可以加载在WebConfig中显示声明的控制器,同样可以载入外部@Controller注解的控制器

        iiii.显示配置视图解析器,代码如下,视图解析器就是根据servlet传入的视图名("home"),解析生成完整的视图路径("/WEB-INF/web/home.jsp")

        iiiii.配置静态资源处理servlet, 继承WebMvcConfigurerAdapter 并且重写configureDefaultServletHanding方法并且调用enable()方法来开启静态资源开关代码如下 

public class WebConfig extends WebMvcConfigurerAdapter{
      @bean
      public ViewResolver viewResolver(){
          InternalResourceViewResolver resolver = new InternalResourceViewResolver();
          resolver.setPrefix("/WEB-INF/web/");
          resolver.setSuffix(".jsp");
          resolver.setExposeContextBeansAsAttributes(true);
          return resolver;
      }
      public void configureDefaultServletHanding(DefaultServletHandlerConfigurer configurer){
          configurer.enable();
      }
}

    d.配置RootConfig,就是显示声明业务逻辑bean,同样add @ComponentScan来加载外部bean

   3.2 自动隐式Controller --控制器在处理完业务逻辑后,返回给servlet数据模型和视图名("home")

     a.add @Controller在类声明前,其实@Controller和@Component起到的作用是相同,只是语义更加明确

     b.add @RequestMapping(value="/service", method=GET),定义映射逻辑及方法,DispatcherServlet会根据映射器找到对应的controller

猜你喜欢

转载自lyf-email.iteye.com/blog/2315989
今日推荐