一、 springMVC请求处理
@RequestMapping
意义:处理用户的请求,相似于doget与dopost
位置: 类上:一级目录方法:二级目录
例如:user/save
属性: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==代表修饰类
二、springMVC请求参数的绑定
绑定的机制:
SpringMVC 绑定请求参数的过程是通过把表单提交请求参数,作为控制器中方法参数进行绑定的
一.支持数据类型: 1.基本类型参数: 包括基本类型和 String 类型 2.POJO类型参数:包括实体类,以及关联的实体类 3.数组和集合类型参数: 包括 List 结构和 Map 结构的集合(包括数组) 4.使用 ServletAPI 对象作为方法参数( HttpServletRequest HttpServletResponse HttpSession java.security.Principal Locale InputStream OutputStream Reader Writer) 二.使用要求 1.发送请求中携带数据的key与方法参数的name必须一致 2.数据类型合法
@Controller
@RequestMapping("/one")
public class OneController {
/**
* 进入one.html页面
* */
@RequestMapping("/show")
public String show(){
return "one";
}
//基本类型和 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";
}
//POJO 类型作为参数
//单一对象
@RequestMapping("/show3")
public String show3(Emp emp){
System.out.println("=====接受到用户发送数据为:"+emp+"=======");
return "success";
}
//对象嵌套
@RequestMapping("/show4")
public String show4(Emp emp){
System.out.println("=====接受到用户发送数据为:"+emp+"=======");
return "success";
}
//@RequestParam
@RequestMapping("/map")
public String map(@RequestParam Map map){
System.out.println(map);
return "success";
}
//POJO 类中包含集合类型参数
@RequestMapping("/show5")
public String show5(Dep dep){
System.out.println("=====接受到用户发送数据为:"+dep+"=======");
return "success";
}
@RequestMapping("/show6")
public String show8(int[] nums){
System.out.println("=====接受到用户发送数据为:"+ Arrays.toString(nums) +"=======");
return "success";
}
//使用 ServletAPI 对象作为方法参数
@RequestMapping("/show7")
public String show7(HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
System.out.println(request);
System.out.println(response);
HttpSession session = request.getSession();
System.out.println(session);
session.setAttribute("","");
return "success";
}
}
<!DOCTYPE html>
<html lang="cn" xmlns:th="http://www.thymeleaf.org">
<head>
<title>Title</title>
</head>
<body>
<h1>springMVC控制器方法参数作用:接受用户请求中的数据</h1>
<hr/>
<h3>基本类型和 String 类型作为参数</h3>
<a href="/one/show1?msg1=9527">发送请求1</a>
<a href="/one/show2?msg1=jdk&msg2=9527">发送请求2</a>
<h3>POJO 类型作为参数</h3>
<a href="/one/show3?eid=1&ename=张三&esex=男">发送请求3</a>
<form action="/one/show4" method="post">
员工编号:<input type="text" name="eid" ><br/>
员工姓名:<input type="text" name="ename" ><br/>
员工性别:<input type="text" name="esex" ><br/>
部门编号:<input type="text" name="dept.did" ><br/>
部门名称:<input type="text" name="dept.dname" ><br/>
<input type="submit" value="发送请求4"/>
</form>
<form action="/one/map" method="post">
员工编号:<input type="text" name="eids"><br/>
员工姓名:<input type="text" name="enames"><br/>
员工性别:<input type="text" name="esexs"><br/>
<input type="submit" value="发送请求4(map)"/>
</form>
<h3>POJO 类中包含集合类型参数</h3>
<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>
<a href="/one/show6?nums=123&nums=456&nums=789">发送请求6</a>
<h3>使用 ServletAPI 对象作为方法参数</h3>
<a href="/one/show7">发送请求7</a>
</body>
</html>
三、 springMVC常用注解
1.@RequestParam
作用:把请求中指定名称的参数给控制器中的形参赋值。 如果页面标签名称和方法参数名称不一致,可以使用此注解实现
属性:
name属性:设置参数名称
defaultValue属性:设置默认值
required属性:设置是否为必传
2.@RequestBody
作用:用于获取"请求体"内容。
直接使用得到是 key=value&key=value... 结构的数据,并可以转换为对象
属性:
required:是否必须有请求体。默认值是:true。
前后端分离 :
@RequestBody可以将json ===》 javaBean
注意:
1.前端不能使用GET方式提交数据,GET方式无请求体
{ * "eid":101, * "ename":"詹姆斯邦德", * "esex":"绅士" * }
3.@PathVaribale
作用:用于绑定 url 中的占位符。 例如:请求 url 中 /delete/{id}, 这个{id}就是 url 占位符。 url 支持占位符是 spring3.0 之 后加入的。是 springmvc 支持 rest 风格 URL 的一个重要标志 属性: value:用于指定 url 中占位符名称。 required:是否必须提供占位符。 Restful是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。 主要用于客户端和服务器交互类的软件,基于这个风格设计的软件可以更简洁,更有层次, 更易于实现缓存机制等。 Restful风格的请求是使用“url+请求方式”表示一次请求目的的,HTTP 协议里面四个表示操作方式的动词如下: GET:用于获取资源 POST:用于新建资源 PUT:用于更新资源 DELETE:用于删除资源 例如: 新增 POST http://localhost:8080/user/用户名/用户密码/用户性别 查询 GET http://localhost:8080/user/用户ID 删除 delete http://localhost:8080/user/用户ID 修改 put http://localhost:8080/user/用户ID/用户名/用户密码/用户性别
@Controller
@RequestMapping("/two")
public class TwoController {
/**
* @RequestParam("名称必须与页面标签或者url地址key名称一致")
* */
@RequestMapping("/show1")
public String show1(@RequestParam(name = "msg1") String msg){
System.out.println("=====接受到用户发送数据为:\"+msg+\"=======");
return "success";
}
@RequestMapping("/show2")
public String show2(@RequestParam("msg1") String msg,@RequestParam("msg2")int num){
System.out.println("=====接受到用户发送数据为:"+msg+"=======");
System.out.println("=====接受到用户发送数据为:"+num+"=======");
return "success";
}
@RequestMapping("/show3")
public String show3(@RequestParam(name="uname",defaultValue = "暂无用户")String name){
System.out.println("账号:"+name);
return "success";
}
@PostMapping("/show5/{uname}/{pwd}")
public String show5(@PathVariable("uname") String msg1,@PathVariable("pwd") String msg2){
System.out.println(msg1);
System.out.println(msg2);
return "success";
}
@PostMapping("/show6/{uname}/{pwd}")
public String show6(@PathVariable String uname,@PathVariable String pwd){
System.out.println(uname);
System.out.println(pwd);
return "success";
}
}
四、springMVC数据传递
@Controller
@RequestMapping("/string")
public class StringController {
/**
* 进入首页
* */
@RequestMapping("/show")
public String show(){
return "index";
}
/*
* 充当试图的逻辑名称,默认页面跳转为请求转发方式
* */
@RequestMapping("show1")
public String show1(){
System.out.println("=========show1=========");
return "success_String";
}
/*
* 作充当一次请求转发或重定向
* */
@RequestMapping("/show2")
public String show2(){
System.out.println("=========show2=========");
return "redirect:show1";
}
@RequestMapping("/show3")
public String show3(){
System.out.println("=========show3=========");
return "forward:show1";
}
@RequestMapping("/show4")
public String show4(HttpServletRequest request){
System.out.println("=========show4=========");
//1.查询数据库(模拟)
Emp emp=new Emp(1,"张毅老师","男");
//2.获取session
request.getSession().setAttribute("emp",emp);
return "success_String";
}
}
@ResponseBody 对象====>json
位置:1.类
2.方法
@RequestBody json====>对象
位置:方法参数
@RestController = @Controller + @ResponseBody
@Controller
@RequestMapping("/json")
public class JsonController {
@RequestMapping("/show1")
@ResponseBody
public List<Emp> show1(){
//1模拟数据库
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;
}
@RequestMapping("/show2")
@ResponseBody
public String show2(){
return "helloWorld";
}
}
五、springMVC文件上传
(与七牛云相结合)
具体实现代码参见七牛云SDK文档