SpringMVC映射请求数据
- 💞获取参数值
- 💞获取http请求消息头
- 💞获取JavaBean对象
- [💞获取servlet api](#💞获取servlet api)
上一讲, 我们学习的是SpringMVC系列四: Rest-优雅的url请求风格
现在打开springmvc项目
💞获取参数值
说明
开发中, 如何获取到http://ip:port/url?
参数名=参数值&
参数名=参数值
应用实例
1.com.zzw.web.requestParam
新建VoteHandler
java
@RequestMapping("/vote")
@Controller
public class VoteHandler {
/**
* 解读
* 1.获取到超链接传递的数据 请求 http://localhost:8080/springmvc/vote/vote01?name=xx
* 2.@RequestParam 表示会接收提交的参数
* 3,value="name" 表示提交的参数名是name
* 4.required=false 表示该参数可以没有; 默认是true, 表示必须有这个参数
* 5.当我们使用了 @RequestParam(value="name", required=false)后 请求的参数名和方法的形参名可以不一致
*/
@RequestMapping(value = "/vote01")
public String test01(@RequestParam(value = "name", required = false) String username) {
System.out.println("得到username=" + username);
return "success";
}
}
2.web路径
下新建request_parameter.jsp
html
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>测试 request parameter</title>
</head>
<body>
<h2>获取到超链接参数值</h2>
<hr>
<a href="vote/vote01?name=zzw">获取超链接的参数</a>
</body>
</html>
3.Postman测试
get方式
提交
post方式
提交
💞获取http请求消息头
●说明
1.在开发中, 如何获取到http
请求的消息头信息
2.使用较少
案例
1.修改VoteHandler.java
, 增加方法 test02
java
@RequestMapping("/vote")
@Controller
public class VoteHandler {
/**
* 需求: 获取http请求头信息, 获取到Accept-Encoding 和 Host
* [涉及到知识点 http协议]
* @param a1
* @param a2
* @return
*/
@RequestMapping(value = "/vote02")
public String test02(@RequestHeader("Accept-Encoding") String a1, @RequestHeader("Host") String a2) {
System.out.println("Accept-Encoding=" + a1);
System.out.println("Host=" + a2);
//返回一个结果
return "success";
}
}
2.修改request_parameter.jsp
html
<h2>获取到消息头</h2>
<a href="vote/vote02">获取到Http消息头信息</a>
3.Postman
测试
💞获取JavaBean对象
使用场景说明
开发中, 如何获取到javabean
对象, 就是以前的entity/pojo
对象数据
应用实例
1.com.zzw.web.requestParam.entity
包下新建Pet
类
java
public class Pet {
private Integer id;
private String name;
//setter, getter, toString方法
}
2.同包下新建Master
类
java
public class Master {
private Integer id;
private String name;
private Pet pet;//对象的属性是另外一个对象[涉及到属性级联]
//setter, getter, toString方法
}
3.修改VoteHandler.java
, 增加方法 test03
java
public class VoteHandler {
/**
* 演示如何获取到提交数据->封装成java对象
* 说明
* 1.方法的形参用对应的类型来指定即可, SpringMVC会自动的进行封装
* 2.如果要自动地完成封装, 要求提交的数据, 参数名和对象的字段名保持一致
* 3.如果属性是对象, 这里仍然是通过 字段名.字段名 比如Master [pet]
* , 即提交的数据 参数名 是 pet.id pet.name, 这就是级联操作
* 4.如果提交的数据 的参数名和对象的字段名不匹配, 则对象的属性值就是null
* @return
*/
@RequestMapping(value = "/vote03")
public String test03(Master master) {
System.out.println("master=" + master);
//返回结果
return "success";
}
}
4.修改request_parameter.jsp
html
<%--解读
1.这是一个表单, 表单的数据对应Master对象
2.提交的数据参数名和对象的字段名一致即可
--%>
<h1>添加主人信息</h1>
<form action="vote/vote03" method="post">
主人:<input type="text" name="id"/><br/>
主人:<input type="text" name="name"/><br/>
宠物名:<input type="text" name="pet.id"/><br/>
宠物名:<input type="text" name="pet.name"/><br/>
<input type="submit" value="添加主人和动物"/>
</form>
5.Postman
测试
get方式
提交
post方式
提交
注意事项和细节
1.支持级联数据获取
2.表单的控件名称name
需要和javabean
对象名称呼应, 否则就是null
💞获取servlet api
说明
1.开发中, 我们可以需要使用到原生的servlet api
2.使用servlet api
, 需要引入tomcat/lib
下的servlet-api.jar
应用实例
1.修改VoteHandler.java
, 增加方法 test04
java
@RequestMapping("/vote")
@Controller
public class VoteHandler {
/**
* 使用servlet api, 来获取提交的数据
* @param request
* @param response
* @return
*/
@RequestMapping(value = "/vote04")
public String test04(HttpServletRequest request,
HttpServletResponse response) {
String username = request.getParameter("username");
String password = request.getParameter("password");
System.out.println("username=" + username);
System.out.println("password=" + password);
//返回结果
return "success";
}
}
2.修改request_parameter.jsp
html
<h1>演示 servlet api的使用</h1>
<form action="vote/vote04" method="post">
用户名:<input type="text" name="username"/><br/>
密 码:<input type="password" name="password"/><br/>
<input type="submit" value="提交"/>
</form>
3.Postman
测试
post方式
提交
注意事项和细节
1.除了HttpServletRequest, HttpServletResponse
其它对象还可以以这样的方式获取
2.HttpSession, java.security.Principal, InputStream, OutputStream, Reader, Writer
3.其中一些对象也可以通过 HttpServletRequest / HttpServletResponse
对象获取, 比如Session
对象, 既可以通过参数传入, 也可以通过request.getSession()
获取, 效果一样, 推荐使用参数形式传入, 更加简单明了
java
@RequestMapping("/vote")
@Controller
public class VoteHandler {
/**
* 使用servlet api, 来获取提交的数据
* @param request
* @param response
* @return
*/
@RequestMapping(value = "/vote04")
public String test04(HttpServletRequest request,
HttpServletResponse response,
HttpSession session2) {
//获取到session
//servlet的原生的方式
HttpSession session = request.getSession();
System.out.println("session=" + session);
//注意: 通过参数传入的 session2 和 通过request.getSession()得到的 session对象是同一个
System.out.println("session2=" + session2);
//返回结果
return "success";
}
}
下一讲, 我们学习 SpringMVC系列六: 视图和视图解析器