参数注入方式:
前端form表单等方式提交数据,后端如何接收数据?采用数据注入的方式,将前端提交的数据注入到方法的参数中。
一.单个数据注入:
- 1.前端:
<form method="post" action="${pageContext.request.contextPath}/req.action">
<label>姓名:</label><input type="text" name="username">
<label>年龄:</label><input type="text" name="age">
<input type="submit" value="提交">
</form>
- 2.后端:
package com.user.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class DataSubmitAction {
@RequestMapping("/req.action")
public String one(String username,int age){
System.out.println(username+" "+age);
return "main";
}
}
- 3.执行结果:
- 4.说明:
在方法中声明参数username,age,框架会按照参数名称寻找表单中name属性的属性值为username,age的标签,并自动将标签中的value值注入到方法的参数中。
二、对象封装注入:
- 1.前端:
<form method="post" action="${pageContext.request.contextPath}/req.action">
<label>姓名:</label><input type="text" name="username">
<label>年龄:</label><input type="text" name="age">
<input type="submit" value="提交">
</form>
- 2.后端:
package com.user.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class DataSubmitAction {
@RequestMapping("/req.action")
public String one(User user){
System.out.println(user);
return "main";
}
}
//自定义的实体类
class User{
private String username;//必须和前端name属性名一致
private int age;//必须和前端name属性名一致
public User() {
}
public User(String username, int age) {
this.username = username;
this.age = age;
}
//必须要有set、get方法,因为前端数据向后端注入时底层调用set、get方法
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"username=" + username +
", age=" + age +
'}';
}
}
-
3.执行结果:
-
4.说明:
在方法中声明一个自定义的实体类参数,框架调用实体类中相应的setter方法注入属性值,只要保证实体类中成员变量的名称与提交请求的name属性值一致即可。
在提交请求中,保证请求参数的名称与实体类中成员变量的名称一致,则可以自动创建对象,则可以自动提交数据,自动类型转换,自动封装数据到对象中。
三、@PathVariable动态占位符注入:
(仅用于超链接)
- 1.前端:
<a href="${pageContext.request.contextPath}/req/张三/19.action">超链接</a>
- 2.后端:
package com.user.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class DataSubmitAction {
@RequestMapping("/req/{username}/{age}.action")
public String one(
@PathVariable("username")
String username,
@PathVariable("age")
int age){
System.out.println(username+" "+age);
return "main";
}
}
-
3.执行结果:
-
4.说明:
前端在URI:req.action之间通过 /值 的方式键入值,后端通过 /{} 接收值,并通过 @PathVariable 注解将前端传来的数据注入到参数中。
四、 @RequestParam请求参数名称与形参名称不一致时:
- 1.前端:
<form method="post" action="${pageContext.request.contextPath}/req.action">
<label>姓名:</label><input type="text" name="username">
<label>年龄:</label><input type="text" name="age">
<input type="submit" value="提交">
</form>
- 2.后端:
package com.user.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
public class DataSubmitAction {
@RequestMapping("/req.action")
public String one(
@RequestParam("username")
String uname,
@RequestParam("age")
int uage){
System.out.println(uname+" "+uage);
return "main";
}
}
-
3.执行结果:
-
4.说明:
使用 @RequestParam 注解将前端传来的数据注入到参数中。
五、HttpServletRequest手动注入:
- 1.前端:
<form method="post" action="${pageContext.request.contextPath}/req.action">
<label>姓名:</label><input type="text" name="username">
<label>年龄:</label><input type="text" name="age">
<input type="submit" value="提交">
</form>
- 2.后端:
package com.user.controller;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class DataSubmitAction {
@RequestMapping("/req.action")
public String one(HttpServletRequest req){
String username = req.getParameter("username");
String age = req.getParameter("age");//方法返回值是String类型
System.out.println(username+" "+age);
return "main";
}
}
-
3.执行结果:
-
4.说明:
javaweb原始获取数据的方式,在方法参数中声明一个request对象,该request对象就是发送http请求的对象,使用request的getParameter()获取前端提交的数据,但是这样得到的数据需要手动进行数据类型的转换。