SSM框架学习笔记9—SpringMVC常用注解和RESTful介绍

SSM框架学习笔记系列,记录的是我在参加学校的京淘项目时所学习的内容,经我个人总结整理而成为本系列学习笔记。预计将分开为X篇进行记录,目前已有10篇。

接下来是这一系列的第九篇学习笔记


3 常用注解

3.1 @Controller(重要)

在SpringMVC中,控制器Controller负责处理由DispatcherServlet分发的请求,它把用户请求中的数据经过业务处理层处理后封装为一个Model,然后将该Model返回相应的View进行显示。

在SpringMVC中提供了一个非常简单的定义Controller的方法,你无需继承特定的类或者实现特定的接口,你只需要用@Controller注解标记一个类是Controoller,然后采用@RequestMapping和@RequestParam等一些注解用于定于URL和Controller方法之间的映射,这样Controller便能够被外界访问。此外,Controller不会直接依赖HttpServletRequest和HttpServletResponse等HttpServlet对象,这些对象可以通过Controller方法参数来获得。
采用@Controller注册一个bean到spring上下文中时,bean默认的ID名称是类名开头字母小写(驼峰式命名规则),也可以自己指定bean的名称:

3.2 @RequestMapping(重要)

@RequestMapping是一个用来处理请求地址映射的注解,可以用于类或方法上。当该注解用于类上时,表示该类中所有响应请求的方法都是以该地址为父路径。

@RequestMapping注解包含6个属性:

  1. value:指定请求的实际地址,指定的地址可以是URL Template模式;
  2. method:指定请求的方法类型;
  3. consumes:指定请求提交的内容类型(Content-Type),例如application/json,text/html;
  4. produces:指定返回的内容类型,仅当请求头部中Accept包含指定类型时方法才进行处理;
  5. params:请求中必须包含某些参数时,方法才进行处理;
  6. headers:请求header中必须包含某些指定的header值,方法才进行处理;

3.3 @Resource和@Autowired(重要)

@Resource和@Autowired都是bean注入时使用,但是其实@Resource并不是spring的注解,它的包是javax.annotation.Resource,需要导入,但是Spring支持该注解的注入;

@Resource和@Autowired的共同点:两者都可以使用在字段或者setter方法上,如果使用在了字段上,那么就不再需要setter方法。

@Resource和@Autowired的不同点:

@Autowired注解是由spring提供的,需要导入org.springframework.beans.factory.annotation.Autowired,只按照byType进行注入。在默认情况下,它要求依赖的对象必须存在,如果允许null,可以通过属性required设置为false进行设置。如果我们需要辅助通过byName进行装配bean,我们可以结合@Qualifier注解一起使用。

@Resource注解默认是按照byName进行装配bean,由J2EE提供,需要导入javax.annotion.Resource。@Resource注解包含两个重要的属性: name和type,Spring将@Resource注解中的name属性解析为bean的名字,将type属性解析为bean的类型。
当@Resource注解的name属性时,Spring将按照byName方式进行bean注入,找不到将会抛出异常;
当使用type属性时,将按照byType方式进行bean注入,找不到或者找到多个将会抛出异常;
如果同时使用了这两个属性,那么将会从Spring上下文中查找指定类型指定名字bean进行装配,找不到将会抛出异常;
如果两个属性都没有使用,那么将会按照默认方式byName进行bean注入。

3.4 @ModelAttribute

@ModelAttribute注解有两种用法:一种是用在拥有返回值的方法上,方法的返回值将会作为Model中指定属性的值;另一种是用在请求处理方法参数上,方法参数将会从Model的属性列表中获取指定属性的值。通过@ModelAttribute(“xxxx”)可以指定属性的名称。在Controller的请求处理方法调用之前,@ModelAttribute注解的方法都会被首先执行。返回到前端后,前端可以使用model中的这些属性

3.5 @SessionAttributes

@SessionAttibutes注解只能用在类上,不能使用在方法上。该注解将Model属性列表中指定的一些属性保存到Session对象中。返回到前端后,前端可以使用session中的这些属性

3.6 @PathVariable (重要)

该注解用于将请求URL的模板变量提取出来,应用到请求处理方法参数中。
如下例,使用这个注解来提取URL地址中的参数id(即注释中的7):

//查询一个 http://localhost:8080/user/get/7
@RequestMapping("/user/get/{id}")			//RESTful请求,{id}占位符
public User get(@PathVariable Integer id) {		//@PathVariable把占位符对应值传递id=7
	User user = new User();
	user.setId(id);
	user.setUserName("詹姆士邦德");
	user.setBirthday(new Date());
	user.setAddress("伦敦军情六处");
	return user;
}

3.7 @RequestParam

@RequestParam主要用于SpringMVC后台请求处理方法时,获取请求参数,该注解包含三个属性:required, defaultValue, value,他们的含义如下:
在这里插入图片描述
如下例:

public String userlist(@RequestParam(defaultValue="2",value="delId",required=true) String id) 
{

}

形参名称为id,但是这里使用value="delId" 限定参数名为delId,所以请求该方法时参数名必须是delId
这里通过required=true限定delId参数为必需传递,如果不传递则报400错误。但由于使用了defaultvalue=”2”默认值,即使不传delId参数它的值也为”2”,所以页面不传递delId也不会报错,如果去掉defaultvalue=”2”且定义required=true则如果页面不传递delId则会报错。

3.8 @ResponseBody (重要)

一言以蔽之:本应返回跳转地址,使用了@ResponseBody注解后变成返回Json串

@ResponseBody作用在方法上的,@ResponseBody 表示该方法的返回结果直接写入 HTTP response body 中,一般在异步获取数据时使用【也就是AJAX】。

注意:在使用 @RequestMapping后,返回值通常解析为跳转路径,但是加上 @ResponseBody后返回结果不会被解析为跳转路径,而是直接写入 HTTP response body 中。 比如异步获取 json 数据,加上@ResponseBody 后,会直接返回 json 数据。

如下例,将返回一个包含Person对象信息列表的json字符串,而不是返回要跳转的页面名

	@RequestMapping("/json")
	@ResponseBody
	public List<Person> person(){
		List<Person> list = new ArrayList<Person>();
		for(int i=0;i<5;i++){
			Person p = new Person();
			p.setId(i);
			p.setName("chen"+i);
			
			list.add(p);
		}
		return list;
	}

3.9 @RestController(重要)

@RestController是一个类注解,表示将该类交给Spring容器进行管理,同时启动SpringMVC框架,用来接受用户请求,该程序该类的返回值是JSON串。如果要求方法返回的是JSON格式数据,而不是跳转页面,可以直接在类上标注 @RestController ,而不用在每个方法中标注@ResponseBody,简化了开发过程。

@RestController
public class HelloController {
	@RequestMapping("/getMsg")
	public String getMsg() {
		return "你好";
	}
}

3.10 @Component

泛指各种组件,就是说当我们的类不属于各种归类的时候(不属于@Controller、@Services等的时候),我们就可以使用@Component来标注这个类。相当于通用的注解。把普通pojo实例化到spring容器中。

3.11 @Repository

用于注解DAO层。声明使用该注解的类为Bean,交给Spring容器进行管理,从而能自动注入进其他类中



4 RESTful

4.1 简介

RESTful是一种网络应用程序的设计风格和开发方式,基于HTTP,可以使用XML格式定义或JSON格式定义。RESTful适用于移动互联网厂商作为业务使能接口的场景,实现第三方OTT调用移动网络资源的功能,动作类型为新增、变更、删除所调用资源。

4.2 架构

RESTful架构是对MVC架构改进后所形成的一种架构,通过使用事先定义好的接口与不同的服务联系起来。在RESTful架构中,浏览器使用POST,DELETE,PUT和GET四种请求方式分别对指定的URL资源进行增删改查操作。因此,RESTful是通过URI实现对资源的管理及访问,具有扩展性强、结构清晰的特点。
RESTful架构将服务器分成前端服务器和后端服务器两部分,前端服务器为用户提供无模型的视图;后端服务器为前端服务器提供接口。浏览器向前端服务器请求视图,通过视图中包含的AJAX函数发起接口请求获取模型。
项目开发引入RESTful架构,利于团队并行开发。在RESTful架构中,将多数HTTP请求转移到前端服务器上,降低服务器的负荷,使视图获取后端模型失败也能呈现。但RESTful架构却不适用于所有的项目,当项目比较小时无需使用RESTful架构,项目变得更加复杂。

4.3 特点

RESTful特点包括:

  1. 每一个URI代表1种资源;
  2. 客户端使用GET、POST、PUT、DELETE4个表示操作方式的动词对服务端资源进行操作:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源;
  3. 通过操作资源的表现形式来操作资源;
  4. 资源的表现形式是XML或者HTML;
  5. 客户端与服务端之间的交互在请求之间是无状态的,从客户端到服务端的每个请求都必须包含理解请求所必需的信息。

4.4 与SpringMVC的联系

MVC框架至少有以下三点不足:

  1. 每次请求必须经过“控制器->模型->视图”这个流程,用户才能看到最终的展现的界面,这个过程似乎有些复杂。
  2. 实际上视图是依赖于模型的,换句话说,如果没有模型,视图也无法呈现出最终的效果。
  3. 渲染视图的过程是在服务端来完成的,最终呈现给浏览器的是带有模型的视图页面,性能无法得到很好的优化。

为了使数据展现过程更加直接,并且提供更好的用户体验,可以对MVC模式进行改进:首先从浏览器发送AJAX请求,然后服务端接受该请求并返回JSON数据返回给浏览器,最后在浏览器中进行界面渲染。

也就是说,我们输入的是AJAX请求,输出的是JSON数据,市面上有这样的技术来实现这个功能吗?答案是REST

所以,SpringMVC框架中为开发者提供RESTful这一技术,有了RESTful技术,前端关注界面展现,后端关注业务逻辑,分工明确,职责清晰。 SpringMVC的RESTful技术是通过@RequestMapping 及@PathVariable两个注解实现的。

所以下一节将讲述如何通过SpringMVC来获取页面参数


未完待续…


目前为止这一系列已更新的学习笔记导航:
SSM框架学习笔记1——Maven
SSM框架学习笔记2——Maven安装及配置
SSM框架学习笔记3——SpringBoot介绍与使用
SSM框架学习笔记4—Junit单元测试
SSM框架学习笔记5—Mybatis
SSM框架学习笔记6—Mybatis Plus
SSM框架学习笔记7—Spring
SSM框架学习笔记8—SpringMVC背景
SSM框架学习笔记9—SpringMVC常用注解和RESTful介绍
SSM框架学习笔记10—SpringMVC请求和响应

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值