SpringMVC映射请求数据
- 💞获取参数值
- 说明
- 应用实例
- 💞获取http请求消息头
- 💞获取JavaBean对象
- 使用场景说明
- 应用实例
- 注意事项和细节
- 💞获取servlet api
- 说明
- 应用实例
- 注意事项和细节
上一讲, 我们学习的是SpringMVC系列四: Rest-优雅的url请求风格
现在打开springmvc项目
💞获取参数值
说明
开发中, 如何获取到http://ip:port/url?
参数名=参数值&
参数名=参数值
应用实例
1.com.zzw.web.requestParam
新建VoteHandler
@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
<%@ 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
@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
<h2>获取到消息头</h2>
<a href="vote/vote02">获取到Http消息头信息</a>
3.Postman
测试
💞获取JavaBean对象
使用场景说明
开发中, 如何获取到javabean
对象, 就是以前的entity/pojo
对象数据
应用实例
1.com.zzw.web.requestParam.entity
包下新建Pet
类
public class Pet {private Integer id;private String name;//setter, getter, toString方法
}
2.同包下新建Master
类
public class Master {private Integer id;private String name;private Pet pet;//对象的属性是另外一个对象[涉及到属性级联]//setter, getter, toString方法
}
3.修改VoteHandler.java
, 增加方法 test03
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
<%--解读
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
@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
<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()
获取, 效果一样, 推荐使用参数形式传入, 更加简单明了
@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系列六: 视图和视图解析器