Spring实战(第四版)读书笔记13——Spring MVC总述及搭建

Spring MVC是构建在Spring理念上的Web框架,基于模型-视图-控制器模式实现。

1、跟踪Spring MVC请求

  • DispatcherServlet:Spring MVC中的前端控制器,将请求发送给对应的Spring MVC控制器。
  • 处理器映射:根据请求所携带的URL信息来决定将请求发送给哪个控制器。
  • 控制器:处理请求的负载(用户提交的信息),设计良好的控制器本身只处理很少甚至不处理工作,而是将业务逻辑委托给一个或多个服务对象进行处理。
  • 模型:控制器完成逻辑处理后产生的需要返回用户并显示的信息称为模型。
  • 视图:将信息以用户友好的形式进行格式化的文件。
  • 视图解析器:将逻辑视图名匹配为一个特定的视图实现,可能是也可能不是JSP,此处体现了松耦合。

2、搭建Spring MVC

2.1、配置DispatcherServlet

例子:

package spittr.config;

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

public class SpittrWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer{
	
	@Override
	protected String[] getServletMappings() {
		return new String[] {"/"};              //默认的Servlet,处理进入应用的所有请求
	}
	
	@Override
	protected Class<?>[] getRootConfigClasses() {
		return new Class<?>[] { RootConfig.class };
	}
	
	@Override
	protected Class<?>[] getServletConfigClasses() {
		return new Class<?>[] { WebConfig.class };
	}
}

扩展AbstractAnnotationConfigDispatcherServletInitializer的任意类都会自动配置DispatcherServlet和Spring应用上下文,Spring应用上下文会位于应用程序的Servlet上下文中。

2.2、两个应用上下文

DispatcherServlet创建的应用上下文,加载getServletConfigClasses()方法中配置文件所定义的bean(希望是包含web组件的bean,如:控制器,视图解析器以及处理器映射等)。

ContextLoaderListener创建的应用上下文,加载通常驱动应用后端的中间层和数据层组件。

AbstractAnnotationConfigDispatcherServletInitializer会同时创建DispatcherServlet和ContextLoaderListener。

2.3、启用Spring MVC

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();           //DispatcherServlet将对静态资源的请求发送到Servlet容器中默认的Servlet上
	}
}

控制器不在配置类中进行显示声明,通过@Controller配合组件扫描进行配置即可。

RootConfig例子:

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

猜你喜欢

转载自blog.csdn.net/Nemoosi/article/details/107312958
今日推荐