概述:
总所周知,MVC 全名是 Model View Controller,是 模型(model)-视图(view)-控制(controller)
的缩写,是一种用于设计创建 Web 应用程序表现层的模式。MVC 中每个部分各司其职:
- Controller(控制器):SpringMvc中,所有的请求都会通过一个前端控制器Servlet,DispatcherServlet就是前端控制器,是应用程序中处理用户交互的部分。作用一般就是处理程序逻辑的
- Model(模型):通常指的就是我们的数据模型。作用一般情况下用于封装数据。
- View(视图):通常指的就是我们的 jsp 或者 html。作用一般就是展示数据的。
流程和组件是SpringMVC的核心,这里包括Dispatcher,HandlerAdapter等,关于这些组件的初始化,我们可以看到spring-webmvc-xxx.jar包的属性文件DispatcherServlet.properties文件,它定义的对象都是在SpringMVC开始时就初始化,并且存放在SpringIoc容器中,有兴趣的小伙伴可以看一下源码
SpringMvc在三层架构的位置:
一个案例:
1. 配置DispatcherServlet
DispatcherServlet是SpringMvc的核心,SpringMVC的工作流程是围绕DispatcherServlet展开的,它也是SpringMVC最重要的组件,按照传统的方式DispatcherServlet会被配置在web.xml中
当DispatcherServlet启动的时候,它会创建Spring应用上下文,并加载配置文件(xml文件)或配置类中所声明的bean
<!--配置前端控制器-->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
也可以在java中配置
import org.springframework.web.servlet.support.
AbstractAnnotationConfigDispatcherServletInitializer;
/**
* @author rwh
* @date 2020/3/5
*/
public class DispatcherServletDemo
extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[0];
}
@Override
protected Class<?>[] getServletConfigClasses() {//指定配置类
return new Class<?>[] {config.class};
}
@Override
protected String[] getServletMappings() {//将DispatcherServlet映射到"/"
return new String[]{"/"};
}
}
在基于java配置的方式中,我么可以看到自定义的类继承了AbstractAnnotationConfigDispatcherServletInitializer
这里需要做一个说明:只要扩展了AbstractAnnotationConfigDispatcherServletInitializer
的任意类都会自动地配置DispatcherServlet和spring应用上下文(指定配置类),在这里简单了解一下
2.开启注解扫描,装载bean
注意:
当我们好Dispatcher后,Dispatcher会自动的创建spring应用上下文,加载我们的bean
这是对应的xml文件
<!-- 开启注解扫描 -->
<context:component-scan base-package="****"/>
<!-- 视图解析器对象 -->
<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/"/>
<property name="suffix" value=".jsp"/>
</bean>
3.编写基本的控制器
@Controller
public class Hello {
@RequestMapping(path="/hello")
public String sayHello(){
System.out.println("Hello StringMVC");
return "success";
}
}
目录结构:
开始运行:
现在分析过程:
附: