




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第 17 章 基于注解的控制器0117.1 Spring MVC 常用注解02030417.2 在 Spring MVC 中处理模型数据17.3 基于注解的控制器示例 117.4 基于注解的控制器示例 2本章导读从 Spring 2.5 开始引入注解,使用注解的方式可以减少 XML 的配置,也提供了自动装配的功能,使得开发工作变得更为轻松,这实际上是“约定优于配置”的开发原则。0117.1 Spring MVC 常用注解使用基于注解的控制器有以下两个优点:(1)一个使用基于注解的控制器可以处理多个动作,而一个实现了 Controller 接口的控制器只能处理一个动作。这就允许将相关的操作写在同
2、一个控制器类中,从而减少应用程序中类的数量。(2)基于注解的控制器的请求映射不需要存储在配置文件中。使用 RequestMapping 注解类型,可以对一个方法进行请求处理。0117.1 Spring MVC 常用注解org.springframework.stereotype.Controller 注解类型用于指示 Spring 类的实例是一个控制器,其注解形式是 Controller ,Spring MVC 使用扫描机制查找应用程序中所有基于注解的控制器类(使用Controller 标记的类)。分发处理器会扫描使用了该注解的类的方法,并检测该方法是否使用了 RequestMapping 注
3、解,而使用 RequestMapping 注解的方法才是真正处理请求的处理器。为了保证 Spring 能找到你的控制器,需要在 Spring MVC 的配置文件中添加相应的扫描配置信息。17.1.1 Controller 和 RequestMapping0117.1 Spring MVC 常用注解RequestMapping 注解可以在控制器类的级别和(或)控制器类中的方法的级别上使用。在类的级别上的注解会将一个特定请求或者请求模式映射到一个控制器之上。之后还可以另外添加方法级别的注解来进一步指定到处理方法的映射关系。17.1.1 Controller 和 RequestMapping0117
4、.1 Spring MVC 常用注解 Spring MVC 还定义了处理器的拦截器,当启动 Spring MVC 的时候,Spring MVC 就会解析 Controller 中的 RequestMapping 的配置,再结合所配置的拦截器,这样它就会组成多个拦截器和一个控制器的形式,存放到一个 HandlerMapping 中去。当请求来到服务器,首先是通过请求信息找到对应的 HandlerMapping,进而可以找到对应的拦截器和处理器,这样就能够运行对应的控制器和拦截器。17.1.1 Controller 和 RequestMapping0117.1 Spring MVC 常用注解 将依
5、赖注入到 Spring MVC 控制器的最简单方法是通过注解 Autowired 到字段(属性)或方法。Autowired 注解类型属于 org.springframework.beans.factory.annotation 包。被定位于实现业务逻辑功能的 Service,为了能被作为依赖注入,类必须要声明为 Service,该类型是 org.springframework.stereotype 的成员。Service 注解类型指示类是一个服务。此外,在 Spring MVC 配置文件中,还需要添加自动扫描控制器(Contoller)所在的包以及服务(Service)所在的包的代码。17.1
6、.2 Autowired 和 Service0117.1 Spring MVC 常用注解 RequestParam 用于将请求参数区数据映射到功能处理方法的参数上。例如下面的示例代码:17.1.3 RequestParam 和 PathVariable 这里 RequestParam 注解可以用来提取请求参数区数据名为“num”的 String 类型的参数,并将之作为输入参数传给 number。0117.1 Spring MVC 常用注解 这里请求参数区数据可以是 URL 请求中的参数,也可以是提交表单中的参数。例如针对前一种可假设 URL 请求如下:http:/localhost:8080/
7、context/accounts/show?num=168针对后一种可假设提交表单如下:17.1.3 RequestParam 和 PathVariable0117.1 Spring MVC 常用注解 PathVariable 可以用来映射 URL 中的占位符到目标方法的参数中。例如有以下的代码:17.1.3 RequestParam 和 PathVariable 如请求的 URL 为“控制器URL/users/123/topics/456”,则自动将 URL 中模板变量 userId 和 topicId 绑定到通过 PathVariable 注解的同名参数上,即入参后 userId=123、
8、topicId=456。0117.1 Spring MVC 常用注解 考虑浏览器和服务器之间的交互。当用户第 1 次访问服务器时,服务器会在响应消息中增加 Set-Cookie 头字段,将用户信息以 Cookie 的形式发送给浏览器。一旦用户浏览器接受了服务器发送的 Cookie 信息,就会将它保存在浏览器的缓冲区中。这样,当浏览器后续访问该服务器时,都会在请求信息中将用户信息以 Cookie 的形式发送给 Web 服务器,从而使服务器端分辨出当前请求是由哪个用户发出的。使用 Cookie 注解可以将请求的 Cookie 数据映射到功能处理方法的参数上。17.1.4 CookieValue 和
9、 RequestHeader0117.1 Spring MVC 常用注解org.springframework.web.bind.annotation.RequestHeader 注解类型用于将请求的头信息区数据映射到功能处理方法的参数上。在控制器的方法参数中使用 RequestHeader 注解,能够从 Http 请求头中提取指定的某个请求头,可以说等价于 HttpServletRequest.getHeader(String) 。17.1.4 CookieValue 和 RequestHeader0217.2 在 Spring MVC 中处理模型数据ModelAndView 有一个类型为
10、ModelMap 的属性 model,而 ModelMap 继承了 LinkedHashMap,因此可以存放各种键值对。为了进一步定义数据模型功能,Spring 还创建了类 ExtendedModelMap,这个类实现了数据模型定义的 Model 接口,如图17-1所示,并且还在此基础上派生了关于数据绑定的类 BindingAwareModelMap。17.2.1 数据模型0217.2 在 Spring MVC 中处理模型数据在控制器的方法中,可以把 ModelAndView、Model、ModelMap 作为参数。在 Spring MVC 运行的时候,会自动初始化它们,因此可以选择 Mode
11、lMap 或者 Model 作为数据模型。事实上 Spring MVC 创建的是一个 BindingAwareModelMap 实例。ModelAndView 初始化后,model 属性为空,当调用它增加数据模型的方法后,会自动创建一个 ModelMap 实例,用以保存数据模型。17.2.1 数据模型0217.2 在 Spring MVC 中处理模型数据Spring MVC 提供了以下几种途径输出模型数据:17.2.1 数据模型0217.2 在 Spring MVC 中处理模型数据可将控制器处理方法的返回值设为 ModelAndView, ModelAndView 中既可存放视图信息,也可存放
12、模型数据信息。 SpringMVC 会把 ModelAndView 的 model 中数据放入到 request 域对象中。17.2.2 ModelAndView0217.2 在 Spring MVC 中处理模型数据Spring MVC 在调用方法前会创建一个隐含的模型对象作为模型数据的存储容器(事实上这个隐含的模型对象是一个 BindingAwareModelMap 类型的对象,通过后面的例子我们可以验证),如果方法的入参为 Map、Model 或者 ModelMap 类型,Spring MVC 会将隐含模型的引用传递给这些入参(因为 BindingAwareModelMap 继承或实现了
13、Map、Model 或者 ModelMap )。在方法体内,开发者可以通过这个入参对象访问到模型中的所有数据,也可以向模型中添加新的属性数据,Spring MVC 也会把 Map 中数据放入到 request 域对象中。 17.2.3 Map 及 Model0217.2 在 Spring MVC 中处理模型数据上面介绍的两种方式,Spring MVC 都是将数据存放在 request 域对象中,若希望在多个请求之间共用某个模型属性数据,则可以在控制器类上标注一个 SessionAttributes 注解(该注解只能放在类的上面,而不能修饰放方法),Spring MVC将把模型中对应的属性暂存到
14、 HttpSession 中。SessionAttributes 除了可以通过属性名指定需要放到会话中的属性外,还可以通过模型属性的对象类型指定哪些模型属性需要放到会话中。17.2.4 SessionAttributes0217.2 在 Spring MVC 中处理模型数据Spring MVC 在每次调用请求处理方法时,都会创建 Model 类型的一个实例。若打算使用该实例,则可以在方法中添加一个 Model 类型的参数。除此之外,我们还可以使用在方法中添加org.springframework.web.bind.annotation.ModelAttribute注解类型将请求参数绑定到 Mo
15、del 对象。17.2.5 ModelAttribute0217.2 在 Spring MVC 中处理模型数据ModelAttribute 注解只支持一个属性 value,类型为String,表示绑定的属性名称。可以用 ModelAttribute 来注解方法参数或方法。带 ModelAttribute 注解的方法(请求方法),会将其输入的或创建的参数对象添加到 Model 对象中(若方法中没有显式地增加)。17.2.5 ModelAttribute0217.2 在 Spring MVC 中处理模型数据ModelAttribute 还可以标注一个非请求的处理方法。被 ModelAttribut
16、e 注解的方法,会在每次调用该控制器类的请求处理方法时被调用。Spring MVC会在调用请求处理方法之前调用带有 ModelAttribute 注解的方法。带 ModelAttribute 注解的方法可以返回一个对象或一个 void 类型。如果返回一个对象,则返回对象会自动添加到 Model中;若方法返回 void,则还必须添加一个 Model 类型的参数,并自行将实例添加到 Model 中。17.2.5 ModelAttribute0317.3 基于注解的控制器示例 1本示例着是对前面章节中SpringMVC_Basic_Demo2 工程的改写。由于使用注解类型来开发,一个控制器类可以包含多个请求处理方法。原本在 SpringMVC_Basic_Demo2 工程中的两个控制器 AddBookController 和 SaveBookController,这里用一个控制器替代 就可以了,这个控制器是 BookController 。而控制器 BookController 包含了两个请求方法,其请求映射分别是 /book_add 和 /book_save。0417.4 基于注解的控制器示例 2本示例着重说明: 如何使用 Autowired 和 Service 进行依赖注入; Spring 如何通过 Flash 属性进行重定向传值; PathVariable 使用; Sprin
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 若尔盖县2025年数学三下期末质量检测模拟试题含解析
- 食品供应合同范本
- 天津市红桥教育中学心2025年第二学期初三期初考试语文试题含解析
- 中建-工程分包合同
- 辽宁省朝阳市建平县2019-2020学年八年级上学期期末物理试题【含答案】
- 书店员工合同协议书
- 古诗阅读渔歌子赏析课件
- 发热症状评估考试试题及答案
- 高中信息技术 《For…Next语句》教学设计 沪教版选修1
- 七年级地理下册 7.5 北极地区和南极地区教学设计 (新版)湘教版
- 传爱国时代风铸强国梦
- 人教版四年级美术下册单元测试题及答案全套1
- 脑梗死的健康宣教及指导
- 江苏省南京市2021年中考道德与法治真题试卷(含答案解析)
- 科室业务学习计划安排表
- 校舍抗震安全鉴定服务投标方案
- 2023年河南测绘职业学院单招考试职业适应性测试试题及答案解析
- Python自然语言处理-课件-第05章-词向量与关键词提取
- 五年级下册综合实践活动教学设计-有趣的拉线偶人 全国通用
- 医疗废物管理PPT演示课件
- 海康监控阵列不可用数据不保留处理
评论
0/150
提交评论