一,MVC模式
MVC(Model-View-Controller)是一种常见的软件设计模式,用于将应用程序分为三个主要组件:模型(Model)、视图(View)和控制器(Controller)。MVC设计模式的目的是实现应用程序的分离,使得每个组件负责不同的职责,并且可以独立进行开发、测试和维护。
下面是每个组件的职责:
-
模型(Model):
- 表示应用程序的数据和业务逻辑。
- 通常包含数据模型、数据库访问、数据验证和业务规则等。
- 不关心用户界面或表示层。
-
视图(View):
- 用户界面的呈现层。
- 负责将模型的数据展示给用户。
- 可以是用户界面元素、HTML页面、图表等。
-
控制器(Controller):
- 处理用户交互和用户请求。
- 接收用户输入并根据输入更新模型和视图。
- 调度和协调模型和视图之间的交互。
- 通常包含路由、请求处理、业务逻辑和模型更新等。
MVC设计模式的优势包括:
- 分离关注点:模型、视图和控制器的分离,使得开发人员可以专注于各自的职责。
- 可维护性:由于各组件的独立性,修改其中一个组件不会影响其他组件的功能。
- 可测试性:由于各组件的独立性,可以更容易地编写单元测试和集成测试。
- 可扩展性:可以通过添加新的模型、视图或控制器来扩展应用程序的功能。
总而言之,MVC设计模式通过将应用程序分成模型、视图和控制器三个组件,实现了关注点的分离和代码的可维护性,提供了一种结构化的方式来开发和组织应用程序。
MVC优点
MVC三个模块相互独立,松耦合架构
多视图共享一个模型,大大提高代码的可重用性
控制器提高了应用程序的灵活性和可配置性
有利于软件工程化管理
MVC缺点
增加了系统结构和实现的复杂性,不适合小型规模的项目
视图层与模型之间需要控制器做中间的连接控制,所以效率较低
mvc 流程图 :
二,使用注解开发Spring MVC2-1
基于注解的处理器
<mvc:annotation-driven/>
一键式配置,通过注解的方式进行
Spring MVC
开发
<context:component-scan />
@Controller
:将该类注入到
Spring
容器并将其定义为一个控制器
@
RequestMapping
:通过请求
URL
进行映射
Spring MVC请求处理流程:
Spring MVC体系结构3-2
DispatcherServlet(前端控制器)
Spring MVC
最核心的类
web.xml
中配置
Handler(
处理器
)
对应
MVC
中的
C(Controller
层
)
作用:实际处理请求
标注了
@
RequestMapping
的所有方法都可以看做是一个
Handler
ModelAndView
模型对象信息
逻辑视图名
Spring MVC体系结构3-3
DispatcherServlet
(
前端控制器
)
Spring MVC
最核心的类
web.xml
中配置
Handler(
处理器
)
对应
MVC
中的
C(Controller
层
)
作用:实际处理请求
标注了
@
RequestMapping
的所有方法都可以看做是一个
Handler
ModelAndView
模型对象信息
逻辑视图名
Spring MVC框架特点 :
角色划分清晰
配置功能灵活
大量的控制器接口和实现类
可灵活选择
View
层实现技术
支持国际化
面向接口编程
功能丰富
@RequestMapping注解 :
不仅可以作用于控制器的方法上,还可以标注到控制器类上
映射规则
通过请求
URL
进行映射
通过请求方法进行映射
GET
POST
@RequestMapping(value="/view", method=RequestMethod.GET)
@
GetMapping
@
PostMapping
注意:@RequestMapping映射的请求信息必须保证全局唯一
三,入参处理
@RequestParam
uname
uvalue
urequired
udefaultValue
@RequestMapping("/hello2")
public String hello2(@RequestParam(value="userName",
required=false)
String realName) throws Exception {
……代码省略
}
出参处理
ModelAndView
包含模型数据信息和视图信息
常用方法
添加模型数据
ModelAndView
addObject
(String
attributeName,Object
attributeValue
);
ModelAndView
addAllObjects
(Map<String,?>
modelMap
);
设置视图
void
setView
(View
view
);
void
setViewName
(String
viewName
);
Model
处理方法的入参为
Model
类型
数据结构:
Map
类型
常用方法:添加模型数据
Model.addAttribute(String attributeName, Object attributeValue);
视图解析器:
InternalResourceViewResolver
:最常用的视图解析器
prefix
suffix
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>