Spring MVC之@ModelAttribute
@ModelAttribute
注解将请求参数绑定到Model
对象,只支持一个value
属性,类型是String
。
该注解的方法会在所有Controller方法执行前执行,所在一个Controller映射多个URL
时,谨慎使用。个人认为该注解有些鸡肋。
@ModelAttribute
注解将请求参数绑定到Model
对象,只支持一个value
属性,类型是String
。
该注解的方法会在所有Controller方法执行前执行,所在一个Controller映射多个URL
时,谨慎使用。个人认为该注解有些鸡肋。
SpringMVC为Controller方法提供了多种注解,很方便的可以对请求进行约定和处理。@RequestParam
,@PathVariable
,@CookieValue
,@RequestHeader
汇总 SpringMVC 传参给到 JSP ,JSP 使用 JSTL
表达式取值来显示的各种方式。
Spring MVC默认单例多线程的,使用ThreadLocal
来切换线程之前的参数,Spring 把每个线程可能存在线程安全问题的参数值放进了 ThreadLocal,实现不同线程下的数据相互隔离。用ThreadLocal来保证线程安全,ThreadLoacal 的 key 就是当前线程的 Thread 实例。
Spring推荐配置就是单例,不用每次都 new , 高并发下能极大的节省资源,提高服务抗压能力。Spring IOC的 Bean 管理器是绝对的线程安全。
Sprinv MVC Controller也可以通过注解@Scope("prototype")
配置为多例模式。
SpringMVC 内部使用了一个org.springframework.ui.Model
接口来存储模型数据,该接口的实现类ExtendedModelMap
继承了ModelMap
,ModelMap 继承了java.util.LinkedHashMap
。
SpringMVC 在调用方法之前会创建一个隐含的模型对象,作为模型数据的存储容器。如果处理方法的参数为Model
或ModelAndView
类型,则 SpringMVC 会将隐含模型引用传递给这些参数。
SpringMVC 在controller
层的转发
和重定向
与Servlet的有些不一样,在实际使用时碰到各种小问题,现对对这个常用的基本功能做下总结。
@RequestMapping
注解用来映射 URL 到控制器类或方法上,指示Spring
用那一个类或方法来处理请求动作。
当用来注解一个控制器类时,所有方法都将映射为相对类级别的请求,再找该类下方法级别的映射,最终的 URI
是类的映射地址拼接上方法映射地址。
@Controller
和@RestController
都是在SpringMVC
中使用,作用在类上,用于申明该类是一个SpringMVC Controller
对象,即一个控制器Bean
。
SpringMVC
执行流程主要由四大组件协同完成,分别是:DispatcherServlet
,HandlerMapping
,HandlerAdapter
和 ViewResolver
。
这些组件对开发者来说是不可见的,开发者只需要在 Controller
(Handler)层完成对请求业务的处理。
了解SpringMVC
的前端控制器截获请求后如何工作?如何分派请求。