Spring MVC框架核心简介

为什么要用spring MVC?

先说说springMVC的技术源头servlet.servlet接口最大特点是根据HTTP协议的特点进行定义.比如规范里提供了一个HttpServlet类,这个类根据http请求类型提供了doGet,doPost等方法.另外,http协议传输的都是文本形式,到了web容器解析后也是文本类型,我们就不得不做大量类型转换工作.
其实像这些框架,最大好处就是:让使用者只关心核心业务开发,框架屏蔽掉与业务开发无关的技术问题.
而在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,该控制器负责拦截用户的所有请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Model 返回给对应的View 进行展示,分工明确。在SpringMVC 中提供了一个非常简便的定义Controller 的方法,你无需继承特定的类或实现特定的接口,只需使用@Controller 标记一个类是Controller ,然后使用@RequestMapping(配置在类或者方法上,它的作用是指定URI和哪个类或者方法作为一个处理请求的处理器) 和@RequestParam(Spring MVC就知道从Http请求中获取参数) 等一些注解用以定义URL 请求和Controller 方法之间的映射,这样的Controller 就能被外界访问到。此外Controller 不会直接依赖于HttpServletRequest 和HttpServletResponse 等HttpServlet 对象,它们可以通过Controller 的方法参数灵活的获取到。
Spring MVC是视图不可知的,他并没有规定你的视图必须使用哪种视图技术,可以是JSP,也可以是Velocity模板、Tiles、Freemarker等
springMVC可以自动绑定用户输入,并正确的转换数据类型。例如,springMVC能自动解析字 符串,并设置float或decimal类型的属性。

spring MVC流程

首先,它围绕DispatcherServlet工作,它可以拦截http发送过来的请求.当一个请求来时,DispatcherServlet首先通过请求和事先解析好的HandlerMapping配置,找到对应的处理器Handler,这样就准备开始运行处理器和拦截器组成执行链,运行处理器需要一个环境,则再通过上下文环境找到处理器适配器HandlerAdapter来运行对应的处理器和拦截器,在处理器返回模型和视图ModelAndView给DispacherServlet后,DispacherServlet就会把对应的视图信息传递给视图解析器ViewResolver,(注意这一步取决于是否使用逻辑视图,如果是,才解析它然后把模型渲染到视图中去),最后响应用户请求.
通过源码可以看到其流程是:

  1. 通过请求找到对应执行链,执行链包含了拦截器和开发者控制器
  2. 通过处理器找到对应适配器
  3. 执行拦截器的事前方法,若返回false则流程结束,不再处理
  4. 通过适配器运行处理器,然后返回模型和视图
  5. 如果视图没名称,则给出默认视图名称
  6. 执行拦截器的事后方法
  7. 处理分发请求得到的数据模型和视图的渲染

注意:HandlerMapping就是注解@RequestMapping指定的对应请求的URI,spring MVC在初始化时候就会将这些信息解析存放.

spring MVC初始化

初始化spring IoC上下文
java web为其提供一个ServletContextListener接口,实现它可以使得在DispatcherServlet初始化前就可以完成spring IoC容器的初始化,也可以在结束期完成对spring IoC容器的销毁.
初始化映射请求上下文
这步通过DispatcherServlet初始化,如果工程中没有注册ContextLoaderListener,这时DispatcherServlet就会在其初始化时候进行对spring IoC容器初始化.此外,最好在web容器刚开始时候就对IoC容器进行初始化.
初始化首先调用DispatcherServlet的init方法,该方法调用其父类(FrameworkServlet)的initServletBean方法,此方法中会调用有初始化IoC容器(如果之前没有初始化的话),在最后会调用onRefresh方法,该方法会初始化spring MVC的各个组件(比如:HandlerMapping,handlerAdapter,ViewResolver(视图解析器)等等).这些组件DispatcherServlet会根据其配置文件DispatcherServlet.properties进行初始化.
注:另外还可以用注解配置方式初始化,首先得继承AbstractAnnotationConfigDispatcherServletInitializer类,然后实现他所定义的方法.只要实现了WebApplicationInitializer接口的onStartup方法,spring MVC就会把类当做一个初始化器加载进来.@EnableWebMvc注解代表启动spring MVC框架的配置.

控制器传递请求参数的多种方法

  1. 接收普通请求参数:如果传递过来的参数名称和HTTP的保存一致,那么无须任何注解.
  2. 使用@RequestParam注解获取参数:该注解默认下参数不能为空,如果为空则抛出异常,若希望允许为空,可以修改配置项required为false.
  3. 使用URL传递参数:这需要两个注解完成,即@RequestMapping和@PathVariable.例如:
@RequestMapping("/getRole/{id}")
public ModelAndViewpathVariable(@PathVariable("id") Long id){
              ................
}
//注解@PathVariable允许对应参数为空.
  1. 传递JSON参数:首先传递的JSON数据需要和对应参数POJO保持一致,其次,在请求时候需要告知请求参数类型为JSON,最后,传递的参数是一个字符串而不应该是JSON,所以还要用JSON.stringify()方法将JSON数据转换为字符串,(代码如下).另外,可以用注解@RequestBody放在参数前面进行接收参数.
//jQuery传递JSON数据
         ......
contentType:"application/json",
data:JSON.stringify(data),
         ......

//另外也可以将form数据序列化,传递给后台,则数据将以roleName=xxx&&note=xxx传递
data:$("form").serialize(),
//序列化后再获取参数就无须任何注解了,即第一种方式.
  • 未完待续…
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值