Spring MVC

1. Spring MVC

  • 请求处理流程分析
    在这里插入图片描述

     流程:
     	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.最终前端控制器将渲染后的页面响应给用户或客户端。
    
  • 优势

     1.清晰的角色划分:前端控制器(DispatcherServlet)、请求到处理器映射(HandlerMapping)、处理器适配器(HandlerAdapter)、视图解析器(ViewResolver)、
       处理器或页面控制器(Controller)、验证器( Validator)、命令对象(Command 请求参数绑定到的对象就叫命令对象)、表单对象(Form Object 提供给表单展示和提交到的对象就叫表单对象)。
     2.分工明确,而且扩展点相当灵活,可以很容易扩展,虽然几乎不需要;
     3.和Spring 其他框架无缝集成,是其它Web框架所不具备的;
     4.可适配,通过HandlerAdapter可以支持任意的类作为处理器;
     5.可定制性,HandlerMapping、ViewResolver等能够非常简单的定制;
     6.功能强大的数据验证、格式化、绑定机制;
     7.利用Spring提供的Mock对象能够非常简单的进行Web层单元测试;
     8.本地化、主题的解析的支持,使我们更容易进行国际化和主题的切换。
     9.强大的JSP标签库,使JSP编写更容易。
    
  • 环境搭建

     1.开发环境	Idea + Maven + Jdk1.8 + Jetty
     2.pom.xml坐标添加
     3.配置web.xml
     4.spring.xml配置
     5.页面控制器的编写
     6.添加视图页面(在WEB-INF下新建jsp文件夹)
     7.启动jetty服务器
    
  • URL地址映射配置

     @RequestMapping
     通过注解@RequestMapping将请求地址与方法进行绑定,可以在类级别和方法级别声明。
     1.映射单个URL(声明在方法上面)
     	@RequestMapping("")或@RequestMapping(value="")
     	@RequestMapping("/请求路径")与@RequestMapping("请求路径")均可 
     	访问地址:http://ip:port/项目名/方法路径
     	如果有类路径需要写在方法路径前面
     2.映射多个URL(声明在方法上面)
     	@RequestMapping({"",""}) 或 @RequestMapping(value={"",""})
     	支持一个方法绑定多个url的操作
     	访问地址:http://ip:port/项目名/方法路径
     	如果有类路径需要写在方法路径前面
     3.映射URL在控制器上(声明在类上面)
     	表示类中的所有响应请求的方法都是以该地址作为父路径。
     	声明级别:
     		类级别 + 方法级别 (/类路径/方法路径)
     	访问地址:http://ip:port/项目名/类路径/方法路径
     4.设置URL映射的请求方式
     	默认没有设置请求方式,可以通过method属性设置支持的请求方式,如method=RequestMethod.POST;
     	如设置多种请求方式,以大括号包围,逗号隔开即可。
     	访问地址:http://ip:port/项目名/类路径/方法路径(只能使用POST请求访问)
     5.通过参数名称映射URL
     	@RequestMapping(params = "")
     	通过参数的形式访问
     	访问地址:http://ip:port/项目名/url?方法路径
    
  • 参数绑定

     1.基本数据类型
     	参数值必须存在。如果没有指定参数值,也没有设置参数默认值,则会报500异常。
     	通过注解@RequestParam标记一个形参为请求参数。(注解声明在形参的前面) 可以通过注解的属性设置相关内容 。
     	设置参数的默认值 				defaultValue
     	设置参数的参数名(别名)		 	name
     2.包装类型(如果数据是基本类型,建议使用包装类型)
     	客户端请求参数名与方法形参名保持一致,默认参数值为null。
     	设置参数的默认值 				defaultValue
     	设置参数的参数名(别名)		 	name
     3.字符串类型
     	客户端请求参数名与方法形参名保持一致,默认参数值为null。
     	设置参数的默认值 				defaultValue
     	设置参数的参数名(别名)		 	name
     4.数组类型
     	客户端传参形式:ids=1&ids=2&ids=3。
     5.JavaBean类型
     	客户端请求的参数名与JavaBean对象的属性字段名保持一致。
     6.List类型
     	User实体需要定义对应list属性。(对于集合的参数绑定,一般需要使用JavaBean对象进行包装)
     7.Set类型
     	Set和List类似,也需要绑定在对象上,而不能直接写在Controller方法的参数中。
     	绑定Set数据时,必须先在Set对象中add相应的数量的模型对象。
     8.Map类型
     	Map最为灵活,它也需要绑定在对象上,而不能直接写在Controller方法的参数中。
    
  • 请求转发与重定向
    SpringMVC默认采用服务器内部转发的形式展示页面信息。同样也支持重定向页面。

     1.重定向
     	重定向是发一个302的状态码给浏览器,浏览器自己去请求跳转的网页。地址栏会发生改变。
     	重定向到JSP页面:
     		格式:return "redirect:jsp文件名/别名?传递参数(传递中文参数会出现乱码)";
     		避免中文乱码问题(使用redirectAttributes):
     			@RequestMapping(value="/view04") 
     			public String view04(RedirectAttributes redirectAttributes){ 
     				redirectAttributes.addAttribute("uname","张三"); 
     				redirectAttributes.addAttribute("upwd","123456"); 
     				return "redirect:view.jsp"; 
     			}
     	重定向到Controller:
     		格式:return modelAndView;
     		返回ModelAndView对象(用来封装需要响应到页面的数据和视图名字):
     			@RequestMapping(value="/view07") 
     			public ModelAndView view07(ModelAndView modelAndView){ 
     				modelAndView.addObject(&
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值