SSM整合-常用注解

SpringMVC运行原理

在这里插入图片描述

  1. 客户端发送请求到中央调度器(前端处理器、控制器等等称呼)
  2. 处理器映射器解析配置文件,把处理器对应的url进行存储;调度器根据用户发送的请求信息,找到对应的处理器信息
  3. 把找到的处理器(执行链)信息交给处理器适配器处理
  4. 处理器适配器调用处理器处理请求,执行相应的业务逻辑
  5. 处理器处理完请求,返回模型和视图信息,模型中存放的是数据,视图是个逻辑上的视图
  6. 视图解析器会根据逻辑视图找到真正的视图
  7. 中央调度器把模型数据传递给真正的视图
  8. 把渲染后的视图响应给客户端

1 @Controller

  • Controller是SpringMVC中的处理器,用来处理dispatcherServlet分发的请求;把用户的请求经过业务处理后封装成一个model返回给对应的view进行展示
  • @Controller注解标记在一个类上,使程序员在创建controller的时候无需继承/实现特定的接口;即:@Controller把自己修饰的类交给spring容器进行管理,并且告知spring容器这是一个SpringMVC的controller
  • 我们需要在springMVC配置文件中告诉spring容器去哪里找controller
<context:component-scan base-package = "标记了@Controller的controller所在包" />

2 @RequestMapping

  • @Controller 只是定义了一个控制器类,而使用@RequestMapping 注解的方法才是真正处理请求的处理器
  • @RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径
  • @RequestMapping常用属性:
  1. value, method
    value: 指定请求的实际地址
    method: 指定请求的method类型, GET、POST、PUT、DELETE等
@Controller
@RequestMapping("my")
public class MyController {

	//http://localhost:8080/springMVC-demo/my/hello1
	@RequestMapping(value = "hello1",method = RequestMethod.GET)
	public String hello1() {
		
		return "index";
	}
}
只有请求路径和请求方式与RequestMapping指定的value和method保持一致,才能由该方法处理
  1. consumes,produces
    consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;当请求头中的信息为consumes指定的类型一致才能由该方法处理请求
	@RequestMapping(value = "hello5",consumes="application/json")
	public String hello5() {
		return "index";
	}

produces: 指定返回的内容类型及编码,仅当request请求头中的(Accept)类型中包含该指定类型才返回;

	@RequestMapping(value = "hello6",produces ="application/json")
	public String hello6() {
		return "index";
	}

在这里插入图片描述
请求头中设置能接受的类型为text/html,后台返回application/json,客户端无法解析报406错误

科普一下请求头中的信息:
Accept:代表发送端(只有客户端才有这个属性)希望接受的数据类型。 
比如:Accept:text/xml; 
代表客户端希望接受的数据类型是xml类型
<!--常见的请求头中accept值如下,其中包含*/*,即可以接受任意类型返回值-->
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Content-Type:代表发送端(客户端|服务器都有这个属性)发送的实体数据的数据类型。 
比如:Content-Type:text/html; 
代表发送端发送的数据格式是html。
二者合起来:
Accept:text/xml; 
Content-Type:text/html ;
即代表希望接受的数据类型是xml格式,本次请求发送的数据的数据格式是html
  1. params,headers
    params: 指定request中必须包含某些参数值是,才让该方法处理。
    headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求。
	@RequestMapping(value = "hello3",params = {"name","age=1","!sex"})
	public String hello3() {
		return "index";
	}

当hello3请求中包含name参数(值是多少无所谓),包含age参数并且值必须为1,不能包含sex参数;才能被该方法处理

	//http://localhost:8080/springMVC-property/my/hello4.do
	@RequestMapping(value = "hello4",headers={ "host=localhost" , "Accept" })
	public String hello4() {
		return "index";
	}

当hello4请求头信息中包含Accept参数(值是多少无所谓),包含host参数并且值为localhost;才能被该方法处理

3 @ResponseBody

@ResponseBody是作用在方法上或者作用于修饰方法返回值;
表示该方法的返回结果直接写入 HTTP response body 中,不再经由视图解析器解析;一般在异步获取数据时使用(AJAX)

4 @RequestBody

表单post请求时,参数传递:
在这里插入图片描述
ajax请求类型为json时,参数传递:
在这里插入图片描述
get请求时,参数在uri后,和uri用?隔开,参数之间用&隔开
@RequestBody是作用在形参列表上,用于将前台发送过来固定格式的数据【xml 格式或者 json等】封装为对应的 JavaBean 对象;封装时,会根据json字符串中的key来匹配对应实体类的属性,如果匹配一致且json中的该key对应的值符合(或可转换为)实体类的对应属性的类型要求时,会调用实体类的setter方法将值赋给该属性

5 @ReqeustParam

  • @requestbody 一般处理的都是json格式的数据,而@RequestParam 的contentType为application/x-www-form-urlencoded,即form表单
  • @RequestParam用于矫正参数名|数据类型不一致
  • @RequestParam有3个属性:value 请求参数的参数名,作为参数映射名称;required 该参数是否必填,默认为true(必填),当设置成必填时,如果没有传入参数,报错; defaultValue 设置请求参数的默认值;
// http://localhost:8080/springMVC-property/my/hello8.do?hobby=1&hobby=2&hobby=3
   @RequestMapping(value = "hello8")
   public String hello8(int[] hobby) {
   	for (int i : hobby) {
   		System.out.println(i);
   	}
   	return "index";
   }

   // http://localhost:8080/springMVC-property/my/hello9.do?hobby=1&hobby=2&hobby=3
   @RequestMapping(value = "hello9")
   public String hello9(String[] hobby) {
   	for (String i : hobby) {
   		System.out.println(i);
   	}
   	return "index";
   }

   // http://localhost:8080/springMVC-property/my/hello10.do?hobby=1&hobby=2&hobby=3
   @RequestMapping(value = "hello10")
   public String hello10(@RequestParam("hobby") int[] aihao) {
   	for (int i : aihao) {
   		System.out.println(i);
   	}
   	return "index";
   }

   // http://localhost:8080/springMVC-property/my/hello11.do?hobby=1&hobby=2&hobby=3
   @RequestMapping(value = "hello11")
   public String hello11(@RequestParam List<Integer> hobby) {
   	for (int i : hobby) {
   		System.out.println(i);
   	}
   	return "index";
   }

   // http://localhost:8080/springMVC-property/my/hello12.do?hobby=1&hobby=2&hobby=3
   @RequestMapping(value = "hello12")
   public String hello12(@RequestParam("hobby") List<Integer> aihao) {
   	for (int i : aihao) {
   		System.out.println(i);
   	}
   	return "index";
   }

6 @Component

    相当于通用的注解,当不知道一些类归到哪个层时使用,但是不建议。

7 @Repository

    用于注解dao层,在daoImpl类上面注解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值