Spring MVC 简单原理及 JavaConfig 基本配置

Spring MVC的核心就是DispatcherServlet类,Spring MVC处理请求的流程如下图所示
这里写图片描述
Spring MVC所有的请求都会通过一个前端控制器(front controller)Servlet。前端控制器是常用的Web应用程序模式,在这里一个单实例的Servlet将请求委托给应用程序的其他组件来执行实际的处理。在Spring MVC中,DispatcherServlet就是前端控制器。
请求过程

DispatcherServlet的任务是将请求发送给Spring MVC控制器,应用程序中可能会有多个控制器,DispatcherServlet需要知道应该将请求发送给哪个控制器。所以DispatcherServlet以会查询一个或多个处理器映射(handler mapping) 来确定请求的下一站在哪。
一旦选择了合适的控制器,DispatcherServlet会将请求发送给选中的控制器。到了控制器,请求会卸下其负载(用户提交的信息)并耐心等待控制器处理这些信息。
控制器所做的最后一件事就是将模型数据打包,并且标示出用于渲染输出的视图名。它接下来会将请求连同模型和逻辑视图名发送回DispatcherServlet。
DispatcherServlet将会使用视图解析器(view resolver)来将逻辑视图名匹配为一个特定的视图实现。
既然DispatcherServlet已经知道由哪个视图渲染结果,那请求的任务基本上也就完成了。它的最后一站是视图的实现(可能是JSP) ,在这里它交付模型数据。请求的任务就完成了。视图将使用模型数据渲染输出,这个输出会通过响应对象传递给客户端(不会像
听上去那样硬编码) 。

  1. 将 DispatcherServlet 配置在 Servlet 容器中而不再使用 web.xml
    只要继承了AbstractAnnotationConfigDispatcherServletInitializer类并实现了相关方法即可实现注册一个DispatcherServlet类。
public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer{


    @Override
    protected Class<?>[] getRootConfigClasses() {
        // TODO Auto-generated method stub
        return new Class<?>[] {RootConfig.class}; 
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        // TODO Auto-generated method stub
        return new Class<?>[] {WebConfig.class};
    }

    //将DispatcherServlet 映射到"/"
    @Override
    protected String[] getServletMappings() {
        // TODO Auto-generated method stub
        return new String[]{"/"};
    }

}

2.定义RootConfig类

/**
 * 
 * @author mm
 * <p>相当于 applicationcontext.xml</p>
 */
@Configuration
@ComponentScan(basePackages= {"cn.mm.test"},
    excludeFilters= {
            @Filter(type=FilterType.ANNOTATION,value=EnableWebMvc.class)
    })
public class RootConfig {

}

3.定义WebConfig类

/**
 * 
 * @author mm
 * <p> 这个类的配置相当于 springmvc-servlet.xml </p>
 */
@Configuration
@EnableWebMvc //启用Spring MVC
@ComponentScan("cn.mm.test.controller")
public class WebConfig extends WebMvcConfigurerAdapter{

    //配置JSP视图解析器
    @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();
    } 
}

猜你喜欢

转载自blog.csdn.net/milaobai/article/details/81320770
今日推荐