springmvc
是spring框架的一个模块,springmvc和spring无需通过中间整合层进行整合
springmvc是一个基于mvc的web框架
mvc 什么? 是一种设计模式
Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指
的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,Spring Web MVC也是要简化我们日常Web开发的。
springmvc优势
1、清晰的角色划分:前端控制器(DispatcherServlet)、请求处理器映射器(HandlerMapping)、处理器适配器(HandlerAdapter)、视图解析器(ViewRe solver)、页面控制器(Controller)、验证器( Validator)、命令对象(Command 请求参数绑定到的对象就叫命令对象)、表单对象(Form Object 提供给表单展示和提交到的对象就叫表单对象)。
2、分工明确,而且扩展点相当灵活,可以很容易扩展,虽然几乎不需要;
3、由于命令对象就是一个POJO,无需继承框架特定API,可以使用命令对象直接作为业务对象;
4、和Spring 其他框架无缝集成,是其它Web框架所不具备的;
5、可适配,通过HandlerAdapter可以支持任意的类作为处理器;
6、可定制性,HandlerMapping、ViewResolver等能够非常简单的定制;
7、功能强大的数据验证、格式化、绑定机制;
8、利用Spring提供的Mock对象能够非常简单的进行Web层单元测试;
9、本地化、主题的解析的支持,使我们更容易进行国际化和主题的切换。
10、强大的JSP标签库,使JSP编写更容易。
还有比如RESTful风格的支持、简单的文件上传、约定大于配置的契约式编程支持、基于注解的零配置支持等等。
![](https://img-blog.csdnimg.cn/20200624144837728.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1F1bGlzaGFz,size_16,color_FFFFFF,t_70)
![](https://img-blog.csdnimg.cn/20200624144838448.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1F1bGlzaGFz,size_16,color_FFFFFF,t_70)
框架原理:
第一步:发送请求到前端控制器(DispatcherSerlvet)
DispatcherSerlvet:前端控制器(不需要程序员开发)
作用:接受请求 响应结果,相当于转发器,中央处理器,减少了其他组件之间的耦合度
第二步:前端控制器请求HandlerMapping查找Handler (就是Controller)
可以根据xml配置,注解进行查找
HandlerMapping:处理器适配器(不需要程序员开发)
作用:根据请求的URL查找Handler
第三步:处理器映射器HandlerMapping向前端控制器返归Handler
第四步:前端控制器调用处理器适配器去执行Handler
第五步:处理器适配器去执行 Handler
第六步:Handler执行完成给适配器返归 ModelAndView
第七步:处理器适配器向前端控制器返回ModelAndView
ModelAndView是springmvc框架的一个底层对象 包括 model 和view
第八步:前端控制器请求视图解析器去进行视图解析
根据逻辑视图名解析成真正的视图(jsp 。。)
第九步:视图解析器向前端控制器返回view
第十步:前端控制器进行视图渲染
视图渲染将模型数据( 在modelAndView中)填充到request作用域
第十一步:前端控制器向用户响应结果
组件:
1. DispatcherSerlvet:前端控制器(不需要程序员开发)
作用:接受请求 响应结果,相当于转发器,中央处理器,减少了其他组件之间的耦合度
2. HandlerMapping:处理器映射器(不需要程序员开发)
作用:根据请求的URL查找Handler
3. 处理器适配器 HanderAdapter(不需要程序员开发)
作用:按照特定规则(HanderAdapter要求的规则)去执行Hnadler
4.处理器 Handler(
需要程序员开发)
注意:编写Hnadler时要按照HnadlerAdapter的要求去做,这样是配置才可以正确的执行Handler
5.视图解析器 view resolver(不需要程序员开发)
作用:进行视图解析,根据逻辑视图解名解析成真正的视图(view)
6.视图view (
需要程序员开发 jsp)
view是一个接口,实现类支持不同的view类型(jsp,pdf。。。)
@RequestMapping
1.URL映射 :定义controller方法对应的URL,进行处理器映射的使用
2.窄化请求映射
3.限制请求方法:出于安全考虑 对http的链接进行方法映射,如果限制请求为post,用get请求则报错
Contraller方法的返回值
1.返归ModelAndView :需要方法结束时,定义ModelAndView将Model和View分别进行设置
2.返归string
重定向:return ‘’redirect:query.do‘’;
转发: return ‘’forward:query.do‘’;
3.返回void
在Contraller方法的形参上定义request 和 response。用request和response进行页面的跳转
参数绑定 :
从客户端请求 key/value 数据 经过参数绑定 将 key/value数据绑定到Contraller方法的形参上,Springmvc中,接收页面提交的数据是通过方法参数来接收,而不是在Contraller类定义成员变量接收
客户端请求
key/value
|
|
处理器适配器调用springmvc提供的参数绑定组件将key/value数据转成 contraller 方法的形参
参数绑定组件:在spring早期的版本使用propertyEditor(只能将字符串转成Java对象)后期使用converter进行任意类型的转换
springmvc提供了很多的converter(转换器),在特殊情况下要自定义converter,对日期数据绑定需要自定义converter
|
|
\ /
contraller 方法(形参)
默认支持的类型
直接在controller方法的形参上定义下面类型的对象,就可以使用这些对象。在参数绑定的过程中。如果遇到下面的类型直接进行绑定
HTTPresponse: 通过response处理响应信息
Httprequest : 通过request对象获取请求信息
Httpsession: 通过session对象得到session中存放的对象
Model / ModelMap:ModelMap是Model接口的实现类,通过Model或ModelMap向页面传递数据.
作用:将model填充到request域
例:model.addAttribute("item", item);
简单类型
通过@requestParam对简单类型的参数绑定
如果不使用@requestParam要求request传入的参数名称和controller方法的形参名称一致,方可绑定成功
如果使用@requestParam不用限制传入参数的一致性
public String edItems(Model m,@RequestParam(value='id') Intger iter_id)
requeseParam 里指定request传入的参数名称和形参绑定
指定参数必须和传入name一致
required属性指定参数是否需要传入
defaultValue可设置默认值,如果没有id传入。将默认值与形参绑定
Struts2和springmvc的区别:
springmvc 基于方法开发 struts2 基于类开发
1.springmvc将URL和controller方法映射,映射成功后springmvc生成一个Handler对象。对象中只包含了一个method,方法结束,形参数据销毁
2.spingmvc可以进行单例开发,并建议使用单例进行开发 Struts2通过类的成员变量(多线程共享),接收参数。无法使用单例,只能使用多例
springmvc的controller开发类似于service开发
3.经过实际测试,struts2速度慢,在于使用struts标签,如果使用struts建议使用jstl
RequestMapping
@RequestMapping :请求映射注解
用法举例:
1. @RequestMapping(“list.do”)
2. @RequestMapping(“/list.do”)
3. @RequestMapping(“list”)
4. @RequestMapping(value=”list”)
5. @RequestMapping(value=”list”,method.RequestMethod.POST)
get请求:
1. 所有从浏览器直接发送的请求,都是get请求
2. href发送的请求都是get请求
post:
1. 表单提交是post请求
2. ajax是post请求
json数据交互
-
@RequestBody注解用于读取http请求的内容(字符串),通过springmvc提供的HttpMessageConverter接口将读到的内容转换为json、xml等格式的数据并绑定到controller方法的参数上。
-
@RequestBody注解实现接收http请求的json数据,将json数据转换为java对象
-
@RequestBody/@ResponseBody要依赖Jackson
-
支持注解,注解映射器和注解适配器可以使用<mvc:annotation-driven />代替。<mvc:annotation-driven />默认注册了注解映射器和注解适配器等bean。
RESTful支持
Restful就是一个资源定位及资源操作的风格。不是标准也不是协议,只是一种风格,是对http协议的诠释。
资源定位:互联网所有的事物都是资源,要求url中没有动词,只有名词。没有参数
资源操作:使用put、delete、post、get,使用不同方法对资源进行操作。分别对应添加、删除、修改、查询。