当前位置:   article > 正文

JavaEE企业级应用开发教程实验十 Spring MVC数据绑定和响应_jave ee 默认类型的数据绑定

jave ee 默认类型的数据绑定

实验十: Spring MVC数据绑定和响应

一、实验目的

1.熟悉简单数据类型的绑定

2.熟悉复杂数据类型的绑定

3.掌握Spring MVC数据绑定的使用

4.掌握Spring MVC的数据响应

5.掌握不同类型返回值的页面跳转

二、实验内容

1.实现默认类型数据绑定、简单数据类型绑定、POJO绑定、自定义类型转换器

2.实现数组绑定、集合绑定、复杂POJO绑定—属性为对象类型的数据绑定

3.JSON数据格式应用

三、实验步骤

1.实现默认类型数据绑定、简单数据类型绑定、POJO绑定、自定义类型转换器

(1)实现默认类型数据绑定

① 在IDEA中创建项目,在pom.xml中引入相关依赖,并在SpringMVC的配置文件spring-mvc.xml中完成相关配置

② 创建处理器类

在src\main\java文件夹中创建com\sun\controller文件夹,在文件夹中创建UserController类

  1. package com.sun.controller;
  2. import org.springframework.stereotype.Controller;
  3. import org.springframework.web.bind.annotation.RequestMapping;
  4. import javax.servlet.http.HttpServletRequest;
  5. @Controller
  6. public class UserController {
  7. @RequestMapping("/getUserId")
  8. public void getUserId(HttpServletRequest request){
  9. String userid=request.getParameter("userid");
  10. System.out.println("userid="+userid);
  11. }
  12. }

运行结果:

启动项目后在浏览器输入http://localhost:8090/sy_ch10/getUserId?userid=1

(2)简单数据类型绑定

修改文件UserController.java,新增getUserNameAndId方法

  1. @RequestMapping("/getUserNameAndId")
  2. public void getUserNameAndId(String username,Integer id){
  3. System.out.println("username"+username+",id"+id);
  4. }

运行结果:

启动项目后在浏览器输入

http://localhost:8090/sy_ch10/getUserNameAndId?username=Spring&id=1

(3)POJO绑定

①创建User类

在src\main\java文件夹中创建com\sun\pojo文件夹,在文件夹中创建User类

  1. package com.sun.pojo;
  2. public class User {
  3. public String getUsername() {
  4. return username;
  5. }
  6. public void setUsername(String username) {
  7. this.username = username;
  8. }
  9. public String getPassword() {
  10. return password;
  11. }
  12. public void setPassword(String password) {
  13. this.password = password;
  14. }
  15. private String username;
  16. private String password;
  17. }

②定义registerUser方法

修改文件UserController.java,新增registerUser方法

  1. @RequestMapping("/registerUser")
  2. public void registerUser(User user){
  3. String username=user.getUsername();
  4. String password=user.getPassword();
  5. System.out.println("username="+username+",password="+password);
  6. }

③创建register.jsp文件

在src\main\webapp下创建register.jsp文件

  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  2. <html>
  3. <head>
  4. <title>注册</title>
  5. </head>
  6. <body>
  7. <form action="${pageContext.request.contextPath}/registerUser" method="post">
  8. 用户名<input type="text" name="username"/><br>
  9. 密 码<input type="password" name="password"/><br>
  10. <input type="submit" value="注册">
  11. </form>
  12. </body>
  13. </html>

运行结果:

启动项目后在浏览器输入http://localhost:8090/sy_ch10/register.jsp

(4)自定义类型转换器

① 创建日期转换类

在src\main\java\com\sun\controller文件夹中创建UserController类

  1. package com.sun.convert;
  2. import org.springframework.core.convert.converter.Converter;
  3. import java.text.SimpleDateFormat;
  4. import java.util.Date;
  5. public class DateConverter implements Converter<String, Date> {
  6. private String datePattern = "yyy-MM-dd";
  7. @Override
  8. public Date convert(String source) {
  9. SimpleDateFormat sdf = new SimpleDateFormat(datePattern);
  10. try {
  11. return sdf.parse(source);
  12. } catch (Exception e) {
  13. throw new IllegalArgumentException("无效的日期格式,请使用这种格式:" + datePattern);
  14. }
  15. }
  16. }

② 配置spring-mvc.xml文件

在src\main\resources文件夹中创建spring-mvc.xml文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:context="http://www.springframework.org/schema/context"
  4. xmlns:mvc="http://www.springframework.org/schema/mvc"
  5. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  6. xsi:schemaLocation="http://www.springframework.org/schema/beans
  7. http://www.springframework.org/schema/beans/spring-beans.xsd
  8. http://www.springframework.org/schema/mvc
  9. http://www.springframework.org/schema/mvc/spring-mvc.xsd
  10. http://www.springframework.org/schema/context
  11. http://www.springframework.org/schema/context/spring-context.xsd">
  12. <context:component-scan base-package="com.sun.controller"/>
  13. <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  14. <property name="prefix" value="/WEB-INF/pages/"/>
  15. <property name="suffix" value=".jsp"/>
  16. </bean>
  17. <mvc:annotation-driven/>
  18. </beans>

③ 定义方法

修改文件UserController.java,新增getBirthday方法

  1. @RequestMapping("/getBirthday")
  2. public void getBirthday(@DateTimeFormat(pattern = "yyyy-MM-dd") Date birthday){
  3. System.out.println("birthday="+birthday);
  4. }

运行结果:

启动项目后在浏览器输入http://localhost:8090/sy_ch10/getBirthday?birthday=2001-08-30

2.实现数组绑定、集合绑定、复杂POJO绑定—属性为对象类型的数据绑定

(1)实现数组绑定

① 创建实体类

在src\main\java\com\sun\pojo文件夹中创建Product类

  1. package com.sun.pojo;
  2. public class Product {
  3. public String getProId() {
  4. return proId;
  5. }
  6. public void setProId(String proId) {
  7. this.proId = proId;
  8. }
  9. public String getProName() {
  10. return proName;
  11. }
  12. public void setProName(String proName) {
  13. this.proName = proName;
  14. }
  15. private String proId;
  16. private String proName;
  17. }

② 创建jsp页面

在src\main\webapp下创建products.jsp文件

  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  2. <html>
  3. <head>
  4. <title>提交商品</title>
  5. </head>
  6. <body>
  7. <form action="${pageContext.request.contextPath}/getProducts" method="post">
  8. <table width="220px" border="1">
  9. <tr>
  10. <td>选择</td>
  11. <td>商品名称</td>
  12. </tr>
  13. <tr>
  14. <td>
  15. <input type="checkbox" name="proIds" value="1"/>
  16. </td>
  17. <td>Java基础教程</td>
  18. </tr>
  19. <tr>
  20. <td>
  21. <input type="checkbox" name="proIds" value="2"/>
  22. </td>
  23. <td>JavaWeb案例</td>
  24. </tr>
  25. <tr>
  26. <td>
  27. <input type="checkbox" name="proIds" value="3"/>
  28. </td>
  29. <td>SSM框架实战</td>
  30. </tr>
  31. </table>
  32. <input type="submit" value="提交商品">
  33. </form>
  34. </body>
  35. </html>

③ 创建商品处理类

在src\main\java\com\sun\controller文件夹中创建ProductController类

  1. package com.sun.controller;
  2. import org.springframework.stereotype.Controller;
  3. import org.springframework.web.bind.annotation.RequestMapping;
  4. @Controller
  5. public class ProductController {
  6. @RequestMapping("/getProducts")
  7. public void getProducts(String[] proIds){
  8. for (String proId:proIds){
  9. System.out.println("获取到了ID为"+proId+"的商品");
  10. }
  11. }
  12. }

运行结果:

启动项目后在浏览器输入http://localhost:8090/sy_ch10/products.jsp

点击多选框后点击提交:

(2)集合绑定

修改ProductController类的getProducts()方法
   

  1. @RequestMapping("/getProducts")
  2. public void getProducts(@RequestParam("proIds")List<String> proIds){
  3. for (String proId:proIds){
  4. System.out.println("获取到了ID为"+proId+"的商品");
  5. }
  6. }

运行结果:

启动项目后在浏览器输入http://localhost:8090/sy_ch10/products.jsp

(3)复杂POJO绑定—属性为对象类型的数据绑定

① 创建订单实体类

在src\main\java\com\sun\pojo文件夹中创建Order类

  1. package com.sun.pojo;
  2. public class Order {
  3. public String getOrderId() {
  4. return orderId;
  5. }
  6. public void setOrderId(String orderId) {
  7. this.orderId = orderId;
  8. }
  9. private String orderId;
  10. }

② 修改User类

在User.java中添加

  1. public Order getOrder() {
  2. return order;
  3. }
  4. public void setOrder(Order order) {
  5. this.order = order;
  6. }
  7. private Order order;

③ 添加方法

在UserController类中定义方法

  1. @RequestMapping("/findOrderWithUser")
  2. public void findOrderWithUser(User user){
  3. String username=user.getUsername();
  4. String orderId=user.getOrder().getOrderId();
  5. System.out.println("username="+username+",orderId="+orderId);
  6. }

④ 创建jsp页面

在src\main\webapp下创建order.jsp文件

  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  2. <html>
  3. <head>
  4. <title>订单</title>
  5. </head>
  6. <body>
  7. <form action="${pageContext.request.contextPath}/findOrderWithUser" method="post">
  8. 所属用户<input type="text" name="username"/><br>
  9. 订单编号<input type="text" name="order.orderId"><br>
  10. <input type="submit" value="查询">
  11. </form>
  12. </body>
  13. </html>

运行结果:

启动项目后在浏览器输入http://localhost:8090/sy_ch10/order.jsp

3.JSON数据格式应用

(1)添加依赖

在项目的pom.xml中导入Jackson的依赖

  1. <dependency>
  2. <groupId>com.fasterxml.jackson.core</groupId>
  3. <artifactId>jackson-core</artifactId>
  4. <version>2.9.2</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>com.fasterxml.jackson.core</groupId>
  8. <artifactId>jackson-databind</artifactId>
  9. <version>2.9.2</version>
  10. </dependency>
  11. <dependency>
  12. <groupId>com.fasterxml.jackson.core</groupId>
  13. <artifactId>jackson-annotations</artifactId>
  14. <version>2.9.0</version>
  15. </dependency>

(2)导入jQuery文件

在项目\webapp文件夹下创建名为js文件夹,将jQuery-3.6.0.js文件导入

(3)创建jsp页面

在src\main\webapp下创建product.jsp文件

  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  2. <html>
  3. <head>
  4. <title>异步提交商品</title>
  5. <script type="text/javascript" src="${pageContext.request.contextPath }/js/jquery-3.6.0.js"></script>
  6. </head>
  7. <body>
  8. <form id="products">
  9. <table border="1">
  10. <tr>
  11. <th>商品id</th>
  12. <th>商品名称</th>
  13. <th>提交</th>
  14. </tr>
  15. <tr>
  16. <td>
  17. <input name="proId" value="1" id="proId" type="text">
  18. </td>
  19. <td>
  20. <input name="proName" value="三文鱼" id="proName" type="text">
  21. </td>
  22. <td>
  23. <input type="button" value="提交单个商品" onclick="sumbmitProduct()">
  24. </td>
  25. </tr>
  26. <tr>
  27. <td>
  28. <input name="proId" value="2" id="proId2" type="text">
  29. </td>
  30. <td>
  31. <input name="proName" value="红牛" id="proName2" type="text">
  32. </td>
  33. <td>
  34. <input type="button" value="提交多个商品" onclick="submitProducts()">
  35. </td>
  36. </tr>
  37. </table>
  38. </form>
  39. <script type="text/javascript">
  40. function sumbmitProduct() {
  41. var proId = $("#proId").val();
  42. var proName = $("#proName").val();
  43. $.ajax({
  44. url: "${pageContext.request.contextPath }/getProduct",
  45. type: "post",
  46. data: JSON.stringify({proId: proId, proName: proName}),
  47. contentType: "application/json;charset=UTF-8",
  48. dataType: "json",
  49. success: function (response) {
  50. alert(response);
  51. }
  52. });
  53. }
  54. function submitProducts() {
  55. var pro1 = {proId: $("#proId").val(), proName: $("#proName").val()}
  56. var pro2 = {proId: $("#proId2").val(), proName: $("#proName2").val()}
  57. $.ajax({
  58. url: "${pageContext.request.contextPath }/getProductList",
  59. type: "post",
  60. data: JSON.stringify([pro1, pro2]),
  61. contentType: "application/json;charset=UTF-8",
  62. dataType: "json",
  63. success: function (response) {
  64. alert(response);
  65. }
  66. });
  67. }
  68. </script>
  69. </body>
  70. </html>

(4)修改ProductController类中方法

在ProductController类中新增getProduct()方法和getProductList()方法

  1. @RequestMapping("/getProduct")
  2. public void getProduct(@RequestBody Product product){
  3. String proId=product.getProId();
  4. String proName=product.getProName();
  5. System.out.println("获取到了Id为"+proId+"名称为"+proName+"的商品");
  6. }
  7. @RequestMapping("/getProductList")
  8. public void getProductList(@RequestBody List<Product> products){
  9. for (Product product:products){
  10. String proId=product.getProId();
  11. String proName=product.getProName();
  12. System.out.println("获取到了Id为"+proId+"名称为"+proName+"的商品");
  13. }
  14. }

(5)配置spring-mvc.xml文件

在spring-mvc.xml文件中添加

<mvc:resources mapping="/js/**" location="/js/"/>

运行结果:

启动项目后在浏览器输入http://localhost:8090/sy_ch10/product.jsp

点击“提交单个按钮”后

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/774183
推荐阅读
相关标签
  

闽ICP备14008679号