什么是MVC
是一种架构思想,包含模型 视图 控制器
Model:模型类 指工程中的javaBean,作用是数据处理
javaBean分两类:
实体类Bean:存储业务数据、
业务处理Bean:例如Service或 Dao对象 用于处理业务逻辑和数据访问
View:视图层,之工程中的html或者jsp等页面
Controller:指工程中的Servlet,作用是接受请求和响应浏览器
什么是SpringMVC
是Spring中的一个子项目,为表述层开发提供的一套完备解决方案,封装Servlet
SpringMVC的特点
Spring家族原生产品 与IOC(控制反转)容器等基础设施无缝衔接
基于原生的Servlet,通过前端控制器DispatcherServlet 对请求和响应进行统一处理
内部组件化程度高,可插拔式组件 即插即用
代码清晰,简洁,性能卓越
开发环境
idea、maven、tomcat、Spring
创建Maven项目
设置打包方式 war,导入jar包
新建webapp 以及 web配置文件
修改路径
配置web.xml
配置SpringMVC前端控制器,对浏览器发送的请求进行统一处理
扩展配置文件
init-param
load-on-startup 1 提前启动,目的第一次慢,后续访问快
创建请求控制器
POJO实体类,需要@Controller注解将其标记为 控制层组件,交给Spring的IOC(控制反转)容器管理
配置springMVC配置文件
扫描组件:刚刚创建实体类了,但是需要扫描组件 把他找到
<context: component-scan>
视图解析器
访问首页
在控制层,访问首页,首页要导入thymeleaf文件配置
@RequestMapping(value="/")请求,当浏览器返送请求
配置tomcat文件
访问指定页面
创建 超链接(thymeleaf)语法,controller注册页面,访问页面 转发操作
总结
浏览器发送请求,若请求地址符合前端控制器的URL-pattern,该请求就会被前端控制器DispatcherServlet处理
前端控制器会读取SpringMVC的核心配置文件,通过扫描组件,找到控制器
将请求地址和控制器中@RequestMapping注解(请求映射)的value进行匹配,若匹配,该注解所标识的方法就是处理请求的方法
处理请求的方法需要一个返回字符串类型的视图名称,该视图名称会被视图解析器访问,加上前缀和后缀,通过thymeleaf渲染
搭建框架
新建项目,修改打包方式 ,webapp修改路径,注册前端控制器(名字与Servlet一样)
@RequestMapping注解
该注解的作用就是将请求和处理请求的控制器方法关联起来,建立映射关系
@RequestMapping注解的位置
标识一个类:设置映射请求的请求路径的初始信息
标识一个方法:设置映射请求的请求路径的具体信息
方法上的该注解 不能重复
类上的可以区分,比如 User的 ,或者Student的 在找方法上的
@RequestMapping注解的value属性
value=地址
@RequestMapping注解的method属性
method=方法(get或者post)表单
是一个RequestMethod类型的数组 里面的方法,put get post
报错会是405,请求方式不是映射的方式、
@RequestMapping注解结合请求方式的派生注解
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@RequestMapping注解的params属性(了解)
"param":要求请求映射所匹配的请求必须携带param请求参数
"!param":要求请求映射所匹配的请求不能携带param请求参数
"param=value":要求请求映射所匹配的请求必须携带param请求参数且param=value
"param!=value":要求请求映射所匹配的请求必须携带param请求参数且param!=value
@RequestMapping注解的headers属性(了解)
headers=请求头
"headers":要求请求映射所匹配的请求必须携带headers请求参数
"!headers":要求请求映射所匹配的请求不能携带headers请求参数
"headers=value":要求请求映射所匹配的请求必须携带param请求参数且headers=value
"headers!=value":要求请求映射所匹配的请求必须携带param请求参数且headers!=value
SpringMVC支持ant风格的路径
?:任意字符
*:0个或者多个字符
**:一层或多层目录
SpringMVC中支持路径中的占位符(重点)
将值拼接到路径中
网页(test/1/admin)
restful风格,需要注解@PathVariable("username")Sring username
SpringMVC获取请求参数
通过ServletAPI获取
将HttpServletRequest作为控制器方法的形参 ,方法 request.getParameter
通过控制器方法的形参获取请求参数
arrays.toString方法打印字符串数组
@RequestParam注解处理请求参数和控制器方法的形参的映射关系
就是两者不一样的时候,username和user_name这样
requird
defaultValue
@RequestHeader注解处理请求头和控制器方法的形参的映射关系
@CookieValue将cookie数据和控制器方法的形参的映射关系
首先控制器获取HttpSession request.getSession
第一次,响应报文,之后再请求报文中
通过实体类的形参获取请求参数
通过实体类的对象直接输出
通过CharacterEncodingFilter处理字符编码
监听--》过滤--》--》servlet
filter-name/mapping 过滤器比servlet执行早
域对象共享数据
34.搭建springMVC项目
使用ServletAPI想request域对象共享数据
使用modelandview
使用model
使用map
使用modelmap