MVC是一种软件架构模式(是一种软件架构设计思想),它将应用分为三块:
1)M:Model(模型),负责业务处理及数据的收集
2)V:View(视图),负责数据的展示
3)C:Controller(控制器),负责调度。决定什么时候调用Model来处理业务,什么时候调用View视图来展示数据
优点:
1)低耦合,扩展能力增强
2)代码复用性增强
3)代码可维护性增强
4)高内聚,让程序员更加专注业务的开发

MVC架构模式与三层模型:MVC 和三层模型都采用了分层结构来设计应用程序,都是降低耦合度,提高扩展力,提高组件复用性。区别在于:他们的关注点不同,三层模型更加关注业务逻辑组件的划分。MVC架构模式关注的是整个应用程序的层次关系和分离思想。


如下是Spring架构图,其中Web中的servlet指的就是Spring MVC:

与纯粹的Servlet开发区别:
1)入口控制:SpringMVC框架通过DispatcherServlet作为入口控制器,负责接收请求和分发请求。Servlet开发中,需要自己编写Servlet程序,在web.xml中进行配置,才能接受和处理请求
2)在SpringMVC中,表单提交时可以自动将表单数据绑定到相应的JavaBean对象中,只需要在控制器方法的参数列表中声明该JavaBean对象即可,无需手动获取和赋值表单数据。Servlet开发中,这些都是需要自己手动完成的
3)IoC容器:SpringMVC框架通过IoC容器管理对象,只需要在配置文件中进行相应的配置即可获取实例对象,Servlet开发中需要手动创建对象实例
4)统一处理请求:SpringMVC框架提供了拦截器、异常处理器等统一处理请求的机制,并且可以灵活地配置这些处理器。Servlet开发中,需要自行编写过滤器、异常处理器等,增加了代码的复杂度和开发难度。
5)视图解析:SpringMVC框架提供了多种视图模板,如JSP、Freemarker、Velocity等,并且支持国际化、主题等特性。Servlet开发中需要手动处理视图层,增加了代码的复杂度
SpringMVC框架可以节省时间和精力,减少代码的复杂度,更加专注于业务开发。提供了更多的功能和扩展性,可以更好地满足企业级应用的开发需求。
特点:轻量级;模块化;依赖注入;易于扩展;易于测试;自动化配置;灵活性
配置web.xml文件:
- "1.0" encoding="UTF-8"?>
- <web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd"
- version="6.0">
-
-
- <servlet>
- <servlet-name>springmvcservlet-name>
- <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
- servlet>
- <servlet-mapping>
- <servlet-name>springmvcservlet-name>
-
-
-
-
- <url-pattern>/url-pattern>
- servlet-mapping>
-
- web-app>
配置springmvc-servlet.xml文件:
- "1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:context="http://www.springframework.org/schema/context"
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
-
- <context:component-scan base-package="springmvc.controller"/>
-
- <bean id="thymeleafViewResolver" class="org.thymeleaf.spring6.view.ThymeleafViewResolver">
-
- <property name="characterEncoding" value="UTF-8"/>
-
- <property name="order" value="1"/>
-
- <property name="templateEngine">
- <bean class="org.thymeleaf.spring6.SpringTemplateEngine">
-
- <property name="templateResolver">
- <bean class="org.thymeleaf.spring6.templateresolver.SpringResourceTemplateResolver">
-
- <property name="prefix" value="/WEB-INF/templates/"/>
-
- <property name="suffix" value=".html"/>
-
- <property name="templateMode" value="HTML"/>
-
- <property name="characterEncoding" value="UTF-8"/>
- bean>
- property>
- bean>
- property>
- bean>
- beans>