SpringMVC(三)请求
目录
一、RequestMapping注解
1.RequestMapping的属性
实例
1.在这里创建文件,命名为Test:
2.复现-返回一个页面:
创建test界面(随便写点什么):
Test文件中编写:
编辑 运行:
3.不返回界面,返回字符串:
编辑Test文件:编辑
实现这两个小功能后的完整的Test:
2.RequestMapping的请求参数绑定
3.入参情况
1.请求携带一个参数:
2.请求携带两个入参
3.(两个及以上)可以以对象的形式传参
4.杂糅传参
5.用form表单的形式提交
二、不常用的注解
1.RequestParam注解
经过前面对SpringMVC的配置和原理的讲解,接着进行SpringMVC请求的相关讲解。
一、RequestMapping注解
RequestMapping注解的作用是建立请求URL和处理方法之间的对应关系
RequestMapping注解可以作用在方法和类上
1. 作用在类上:第一级的访问目录
2. 作用在方法上:第二级的访问目录
3. 细节:路径可以不编写 / 表示应用的根目录开始
1.RequestMapping的属性
1. path 指定请求路径的url
2. value value属性和path属性是一样的
3. mthod 指定该方法的请求方式(通常是GET和POST请求,默认GET请求)
现在以实例的形式进行讲解:
实例
1.在这里创建文件,命名为Test:
2.复现-返回一个页面:
在里面写一个方法test1--表示返回一个名为test的界面(既然这里return用了,那么就要保证html中当真存在这么一个方法--去创建)
创建test界面(随便写点什么):
Test文件中编写:
运行:
注意这里项目名称后的一级请求/二级请求,返回test.html界面内容(中文乱码,正常)
3.不返回界面,返回字符串:
编辑Test文件:
更改后端就要重启服务器:
同样步骤得到(这里显示的就是String字符串而非界面了):
实现这两个小功能后的完整的Test:
package controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller //首先先打上注解-创建对象并且标明这里是Controller层
@RequestMapping(path="/test") //一级请求路径(写不写/都无所谓)
public class Test {
/**
* /role/save
* method="当前方法允许请求方式能访问"
* params="请求路径上传参数"
* @return
*/
//打开页面的请求对应
@RequestMapping(path="/t1",method={RequestMethod.GET}) //二级请求路径
//这里指定了方法为GET(默认是GET),除此之外还有POST等等
public String test1(){
return "test";
}
//返回字符串
@ResponseBody
@RequestMapping(path="/t2")
public String test2(){
return "hello!";
}
}
2.RequestMapping的请求参数绑定
(1). 绑定机制
1. 表单提交的数据都是k=v格式的 username=haha&password=123
2. SpringMVC的参数绑定过程是把表单提交的请求参数,作为控制器中方法的参数进行绑定的
3. 要求:提交表单的name和参数的名称是相同的
(2). 支持的数据类型
1. 基本数据类型和字符串类型
2. 实体类型(JavaBean)
3. 集合数据类型(List、map集合等)
基本数据类型和字符串类型
1. 提交表单的name和参数的名称是相同的
2. 区分大小写
实体类型(JavaBean)
1. 提交表单的name和JavaBean中的属性名称需要一致
2. 如果一个JavaBean类中包含其他的引用类型,那么表单的name属性需要编写成:对象.属性 例如:address.name
给集合属性数据封装
1. JSP页面编写方式:list[0].属性
3.入参情况
1.请求携带一个参数:
这里给出一个例子(同样这个例子是写在Test文件中的):
//一个入参时
@ResponseBody
@RequestMapping(path="/t3",method={RequestMethod.GET}) //二级请求路径
public String test3(String name){
return name;
}
重启服务器:
将入参携带在请求中:
2.请求携带两个入参
这里给出一个例子(同样这个例子是写在Test文件中的):
//两个及以上不同类型入参
@ResponseBody
@RequestMapping(path="/t4",method={RequestMethod.GET}) //二级请求路径
public String test4(String name,Integer age,char sex){
return "name="+name+"age="+age+"sex="+sex;
}
重启服务器:
将入参携带在请求中:
3.(两个及以上)可以以对象的形式传参
创建User类(生成get和set方法):
这里给出一个例子(同样这个例子是写在Test文件中的):
//对象的形式传参
@ResponseBody
@RequestMapping(path="/t5",method={RequestMethod.GET}) //二级请求路径
public String test5(User user){
return user.toString();
}
重启服务器:
将入参携带在请求中:
这里就会遵循对象的原则(只传一个时,其他默认为空)
4.杂糅传参
这里给出一个例子(同样这个例子是写在Test文件中的):
//杂糅着用
@ResponseBody
@RequestMapping(path="/t6",method={RequestMethod.GET}) //二级请求路径
public String test7(User user,String father){
return user.toString()+father;
}
重启服务器:
将入参携带在请求中:
5.用form表单的形式提交
前面我们的传参都是通过请求携带的,现在我们来实现通过Form表单来实现入参:
首先修改想要return的前端界面test.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>我是一个复现界面的例子,我是界面!</h1>
<!--加上表单-->
<form action="/StringMVCTestTwice/test/t5" method="get">
<input type="text" name="name"/><br/>
<input type="text" name="age"/><br/>
<input type="text" name="sex"/><br/>
<input type="submit"/>
</form>
<!--表单结束-->
</body>
</html>
并在Test文件中添加:
//form的形式传参
@RequestMapping(path="/t7",method={RequestMethod.GET}) //二级请求路径
public String test7(User user){
return "test";
}
随后重启服务器去调用这个请求:
点击提交(就会自动识别跳转到 t5请求):
二、不常用的注解
1.RequestParam注解
1. 作用:把请求中的指定名称的参数传递给控制器中的形参赋值
2. 属性
1. value:请求参数中的名称
2. required:请求参数中是否必须提供此参数,默认值是true,必须提供
3. 代码如下:
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
@RequestMapping("/dept")
public class DeptController {
@RequestMapping("/save")
public String save(@RequestParam(value = "username",required = false) String name){
System.out.println(name);
return "suc";
}
}