SpringMVC

SpringMVC

框架概念与特点

什么是MVC?
	模型-视图-控制器(MVC)是⼀个众所周知的以设计界⾯应⽤程序为基础的设计思想。
	它主要通过分离模型、视图及控制器在应⽤程序中的⻆⾊将业务逻辑从界⾯中解耦。
常见的MVC框架运行性能的比较
	Jsp+servlet > struts1 > spring mvc > struts2+freemarker > struts2,ognl,值栈
SpringMVC是什么?
	它是⼀种基于Java的实现了Web MVC设计思想的请求驱动类型的轻量级Web框架,即使⽤了MVC架构模式的思想,将web层进⾏职责解耦,基于请求驱动指的就是使⽤请求-响应模型,框架的⽬的就是帮助我们简化开发,Spring MVC也是要简化我们⽇常Web开发的。
SpringMVC能帮我们做什么?
	1. 让我们能⾮常简单的设计出⼲净的Web层;
	2. 进⾏更简洁的Web层的开发;
	3. 天⽣与Spring框架集成(如IOC容器、AOP等);
	4. 提供强⼤的约定⼤于配置的契约式编程⽀持;
	5. 能简单的进⾏Web层的单元测试;
	6. ⽀持灵活的URL到⻚⾯控制器的映射;
	7. ⾮常容易与其他视图技术集成,如jsp、Velocity、FreeMarker等等,因为模型数据不放在特定的API⾥,⽽是放在⼀个Model⾥(Map数据结构实现,因此很容易被其他框架使⽤);
	8. ⾮常灵活的数据验证、格式化和数据绑定机制,能使⽤任何对象进⾏数据绑定,不必实现特定框架的API;
	9. ⽀持灵活的本地化等解析;
	10. 更加简单的异常处理;
	11. 对静态资源的⽀持;
	12. ⽀持Restful⻛格。

SpringMVC请求流程

1. ⾸先⽤⼾发送请求,请求被SpringMvc前端控制器(DispatherServlet)捕获;
2. 前端控制器(DispatherServlet)对请求URL解析获取请求URI,根据URI, 调⽤HandlerMapping;
3. 前端控制器(DispatherServlet)获得返回的HandlerExecutionChain(包括Handler对象以及Handler对象对应的拦截器。
4. DispatcherServlet 根据获得的HandlerExecutionChain,选择⼀个合适的HandlerAdapter。(附注:如果成功获得HandlerAdapter后,此时将开始执⾏拦截器的preHandler(...)⽅法);
5. HandlerAdapter根据请求的Handler适配并执⾏对应的Handler;HandlerAdapter(提取Request中的模型数据,填充Handler⼊参,开始执⾏Handler(Controller)。 在填充Handler的⼊参过程中,根据配置,Spring将做⼀些额外的⼯作:
	HttpMessageConveter: 将请求消息(如Json、xml等数据)转换成⼀个对象,将对象转换为指定的响应信息。
	数据转换:对请求消息进⾏数据转换。如String转换成Integer、Double等数据格式化:数据格式化。 如将字符串转换成格式化数字或格式化⽇期
	数据验证: 验证数据的有效性(⻓度、格式等),验证结果存储到BindingResult或Error中)
6. Handler执⾏完毕,返回⼀个ModelAndView(即模型和视图)给HandlerAdaptor
7. HandlerAdaptor适配器将执⾏结果ModelAndView返回给前端控制器。
8. 前端控制器接收到ModelAndView后,请求对应的视图解析器。
9. 视图解析器解析ModelAndView后返回对应View;
10. 渲染视图并返回渲染后的视图给前端控制器。
11、最终前端控制器将渲染后的⻚⾯响应给⽤⼾或客⼾端

URL地址映射配置&参数绑定

URL地址映射配置之@RequesrMapping 映射单个URL

@RequestMapping(“ ”) 		@RequestMapping(value=“ ”)
  映射多个 URL 	@RequestMapping({"",""})
  	 @RequestMapping(value={"",""}) 		映射 URL 在控制器上 		

⽤于类上,表⽰类中的所有响应请求的⽅法都是以该地址作为⽗路径。
设置 URL 映射的请求⽅式 可以通过 method

属性设置⽀持的请求⽅式 method=RequestMethod.POST
通过参数名称映射 URL
通过参数的形式访问 @RequestMapping(params = “test06”)

参数绑定

	 基本数据类型
		第一种
			参数值必须存在
			如果没有指定参数值,也没有设置参数默认值,则会报500异常
		第二种
			通过注解 @RequestParam 标记⼀个形参为请求参数
			(注解声明在形参的前⾯)
			可以通过注解的属性设置相关内容
			 * 设置参数的默认值 defaultValue
		第三种
			可以通过注解的属性设置相关内容
			 * 设置参数的参数名(别名) name
	 包装类型
		如果数据是基本类型,建议使⽤包装类型
		客户端请求参数名与⽅法形参名保持⼀致,默认参数值为null
		可以通过 @RequestParam 的name属性设置参数的别名
		defaultValue属性设置参数默认值
	字符串类型
		客户端请求参数名与⽅法形参名保持⼀致,默认参数值为null
		可以通过 @RequestParam 的name属性设置参数的别名,defaultValue属性设置参数默认值
	 数组类型
		客户端传参形式:ids=1&ids=2&ids=3
	 JavaBean 类型
		客户端请求的参数名与JavaBean对象的属性字段名保持⼀致
	 List 类型
		此时 User 实体需要定义对应 list 属性
	 Set 类型
		也需要绑定在对象上,⽽不能直接写在 Controller ⽅法的参数中
	 Map 类型
		Map最为灵活,它也需要绑定在对象上,⽽不能直接写在Controller⽅法的参数中

SpringMVC请求转发与重定向

重定向到JSP页面
	重定向是发⼀个302的状态码给浏览器,浏览器⾃⼰去请求跳转的⽹⻚。地址栏会发⽣改变
	重定向是以redirerct:开头的
	传递参数
	传递参数 (传递中⽂参数会出现乱码)
	传递参数 (通过 RedirectAttributes 对象设置重定向参数,避免中⽂乱码问题)
	返回 ModelAndView 对象
	重定向到Controller返回 ModelAndView 对象
	⻚⾯中获取参数值
		${param.参数名}
请求转发
	请求转发以 forward: 开头
	地址栏不发生改变可以获取请求域中的地址
	设置参数
	设置请求域
	默认会去指定⽬录下找JSP⻚⾯ (配置⽂件中设置的)
	请求转发到 Controller
	请求转发到 Controller
		传递参数
	⻚⾯中获取数据
		获取传递的参数:${param.参数名}
		获取请求域的数据:${请求域中设置的名称}

SpringMVC之JSON数据开发

注释使用
	 @ResponseBody
		* @ResponseBody 返回的是JOSN格式的数据,返回JavaBean对象
			注解设置在⽅法体上
			注解设置在⽅法返回对象前,修饰符之后
		@ResponseBody 返回的是JOSN格式的数据,返回集合
	 @RequestBody
		⽤来处理 content-type 不是默认的 application/x-www-form-urlcoded 类型的内容
		 @RequestBody 规定请求的参数是JOSN格式的字符串
			注解设置在形参前⾯

请求域对象设置api的五种方式

1.ModelAndView
	ModelAndView modelAndView = new ModelAndView();
	modelAndView.addObject("hello","你好啊!");
	modelAndView.setViewName("hello");
	return modelAndView;
2.ModelMap
	 modelMap.addAttribute("hello","heoolwda02");
	 return "hello";
3.Model
	   model.addAttribute("hello","dsauhduqwewq123");
	   return "hello";
4.Map
	  map.put("hello","helloModel04321");
	  return "hello";
5.HttpServletRequest
	 request.setAttribute("hello","sdadsadsadasdsadwmnb");
	 return "hello";
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值