Spring MVC

Spring MVC,第1张

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?方法路径
    

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/742737.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-28
下一篇 2022-04-28

发表评论

登录后才能评论

评论列表(0条)

保存