1.请求处理
@RequestMapping
意义:处理用户的请求,相似于doget与dopost
位置:
类上:一级目录
方法:二级目录
例如:user/save
user/delete
student/save
student/delete
属性:
value="",path="" 表示请求路径(只写这个属性是可省略该属性名)
method=常量,此请求的类型(get,post),若不设置则此请求适配所有的请求方式
params="" 限制请求参数,例如:params={"msg1","msg2"}表示请求路径中必须携带参数名为msg1与msg2的参数
注意:1.超链接默认发送的是get请求
2.所有请求所携带的参数格式均为:key=value
@DeleteMapping删除
@PutMapping修改
@GetMapping查询
@PostMapping新增
@RequestMapping可以点击查看源码
@Target({ElementType.METHOD,ElementType.TYPE})
METHOD==代表修饰方法,TYPE==代表修饰类
@RequestMapping(value="/show1",method ={RequestMethod.POST})
public String show1(){
System.out.println("==========进入了springMVC的控制器=========");
System.out.println("使用post方式发送请求进入");
return "success";//返回方法执行完要跳转的页面名称
}
@RequestMapping(value="/show2",params = {"msg1=aa","msg2=bb"})
public String show2(){
System.out.println("==========进入了springMVC的控制器=========");
System.out.println("限制请求携带的参数");
return "success";//返回方法执行完要跳转的页面名称
}
@GetMapping("/show3")
public String show3(){
System.out.println("==========进入了springMVC的控制器=========");
System.out.println("必须使用get方式请求");
return "success";//返回方法执行完要跳转的页面名称
}
@PostMapping("/show4")
public String show4(){
System.out.println("==========进入了springMVC的控制器=========");
System.out.println("必须使用post方式请求");
return "success";//返回方法执行完要跳转的页面名称
}
2.参数绑定
springMVC请求参数的绑定
绑定的机制:SpringMVC绑定请求参数的过程是通过把表单提交请求参数,作为控制器中方法参数进行绑定的
一.支持数据类型:
1.基本类型参数:
包括基本类型和String类型
/***********************基本类型和 String 类型作为参数*********************************/
@RequestMapping("/show1")
public String show1(String msg1){
System.out.println("=====接受到用户发送数据为:"+msg1+"=======");
return "success";
}
@RequestMapping("/show2")
public String show2(String msg1,int msg2){
System.out.println("=====接受到用户发送数据为:"+msg1+"=======");
System.out.println("=====接受到用户发送数据为:"+msg2+"=======");
return "success";
}
2.POJO类型参数:
包括实体类,以及关联的实体类
@RequestMapping("/show3")
public String show3(Emp emp){
System.out.println("=====接受到用户发送数据为:"+emp+"=======");
return "success";
}
//对象嵌套(EMP部门包含dept员工List,Map)
@RequestMapping("/show4")
public String show4(Emp emp){
System.out.println("=====接受到用户发送数据为:"+emp+"=======");
return "success";
}
<form action="/one/show5" method="post">
部门编号:<input type="text" name="did" ><br/>
部门名称:<input type="text" name="dname" ><br/>
员工编号1:<input type="text" name="mylist[0].eid" ><br/>
员工姓名1:<input type="text" name="mylist[0].ename" ><br/>
员工性别1:<input type="text" name="mylist[0].esex" ><br/>
员工编号2:<input type="text" name="mylist[1].eid" ><br/>
员工姓名2:<input type="text" name="mylist[1].ename" ><br/>
员工性别2:<input type="text" name="mylist[1].esex" ><br/>
员工编号3:<input type="text" name="myMap['one'].eid" ><br/>
员工姓名3:<input type="text" name="myMap['one'].ename" ><br/>
员工性别3:<input type="text" name="myMap['one'].esex" ><br/>
员工编号4:<input type="text" name="myMap['two'].eid" ><br/>
员工姓名4:<input type="text" name="myMap['two'].ename" ><br/>
员工性别4:<input type="text" name="myMap['two'].esex" ><br/>
<input type="submit" value="发送请求5"/>
</form>
3.数组和集合类型参数:
包括List结构和Map结构的集合(包括数组)
@RequestMapping("/map")
public String map(@RequestParam Map map){
//@RequestParam 必须存在,这样才可以将多个数据注入到map中
System.out.println(map);
return "success";
}
<form action="/one/map" method="post">
员工编号:<input type="text" name="eids"><br/>
//map中的键(key):name的属性值,value就是表单的值
员工姓名:<input type="text" name="enames"><br/>
员工性别:<input type="text" name="esexs"><br/>
<input type="submit" value="发送请求4(map)"/>
</form>
4.使用ServletAPI对象作为方法参数
HttpServletRequest HttpServletResponse HttpSession java.security.Principal Locale InputStream OutputStream Reader Writer
@RequestMapping("/show7")
public String show7(HttpServletRequest request, HttpServletResponse response){
// request.setCharacterEncoding("UTF-8");
// response.setCharacterEncoding("UTF-8");
System.out.println(request);
System.out.println(response);
request.getParameter("msg1");
HttpSession session = request.getSession();
Cookie[] cookies = request.getCookies();
System.out.println(session);
session.setAttribute("yyd","闫亚东");
ServletContext applaction = session.getServletContext();
return "success";
}
二.使用要求
1.发送请求中携带数据的key与方法参数的name必须一致
2.数据类型合法
3.常用注解
springMVC常用注解
一.@RequestParam
作用:
把请求中指定名称的参数给控制器中的形参赋值。
如果页面标签名称和方法参数名称不一致,可以使用此注解实现
属性:
name属性:设置参数名称
defaultValue属性:设置默认值
required属性:设置是否为必传(默认为true)
@RequestMapping("/show9")
public String show9(@RequestParam(name = "masg1",defaultValue = "此时无参数") String masg2){
System.out.println("=====接受到用户发送数据为:"+ masg2 +"=======");
return "success";
}
二.@RequestBody
作用:
用于获取"请求体"内容。直接使用得到是key=value&key=value...
结构的数据,并可以转换为对象
属性:
required:是否必须有请求体。默认值是:true。
@RequestMapping("/show10")
public String show10(@RequestBody Emp emp){
System.out.println("=====接受到用户发送数据为:"+ emp +"=======");
return "success";
}
//请求题中的JSON数据
{
"eid":2024,
"ename":"闫亚东",
"esex":23,
"dept":{
"did":12,
"dname":"研发部",
"mylist":[{ "eid":2023,
"ename":"余承东",
"esex":43},{
"eid":2021,
"ename":"杨秀文",
"esex":21
}]
}
}
三.@PathVaribale
作用:
用于绑定url中的占位符。例如:请求url中/delete/{id},
这个{id}就是url占位符。url支持占位符是spring3.0之
后加入的。是springmvc支持rest风格URL的一个重要标志
属性:
value:用于指定url中占位符名称。
required:是否必须提供占位符。
@RequestMapping("/show11/{name}/{id}")//将名称为name的属性值赋给名称为ename的属性必
public String show11(@PathVariable(name = "name") String ename,@PathVariable(name = "id") int eid){
System.out.println("=====接受到用户发送数据为:"+ ename+" "+eid +"=======");
return "success";
}
@RequestMapping("/show12/{name}/{id}")//名称必须保持一致
public String show12(@PathVariable String name,@PathVariable int id){
System.out.println("=====接受到用户发送数据为:"+ name+" "+id +"=======");
return "success";
}
Restful是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。
主要用于客户端和服务器交互类的软件,基于这个风格设计的软件可以更简洁,更有层次,
更易于实现缓存机制等。
Restful风格的请求是使用“url+请求方式”表示一次请求目的的,HTTP协议里面四个表示操作方式
的动词如下:
GET:用于获取资源
POST:用于新建资源
PUT:用于更新资源
DELETE:用于删除资源
例如:
/users/1GET:得到id=1的user
/users/1DELETE:删除id=1的user
/users/1/新名/新性PUT:更新id=1的user
/users/新名/新性POST:新增user
springMVC常用注解
四.@RequestHeader
作用:
用于获取请求消息头。
属性:
value:提供消息头名称
required:是否必须有此消息头
@RequestMapping("/show13")
public String show13(@RequestHeader(name = "masg1") String masg){
System.out.println("=====接受到用户发送数据为:"+ masg +"=======");
return "success";
}
五.@CookieValue
作用:
用于把指定cookie名称的值传入控制器方法参数。
属性:
value:指定cookie的名称。
required:是否必须有此cookie。
@RequestMapping("/show14")
public String show14(@CookieValue(name = "JSESSIONID",required = false) String masg){
System.out.println("=====接受到用户发送数据为:"+ masg +"=======");
return "success";
}
4.数据传递
@RequestMapping("show4")
public String show4(HttpServletRequest request){
System.out.println("页面show4");
request.getSession().setAttribute("name","闫亚东");
return "success";
}
@RequestMapping("/show1")
@ResponseBody
public List<Emp> show1(){
Emp emp1 = new Emp(1,"张毅老师","男");
Emp emp2 = new Emp(2,"张毅老师","男");
Emp emp3 = new Emp(3,"张毅老师","男");
List<Emp> list = new ArrayList<>();
list.add(emp1);
list.add(emp2);
list.add(emp3);
return list;
}