• SpringMVC实现接收前端的数据(从一个网页输入数据,然后将数据提交到另外一个网页,并进行输出)


    恰巧此时,两手空空才无限拥有。

    7dee448613164395abba513560cf185a.jpg

    实现简单数据的传递

    实现网页数据的提交从一个网页输出数据,将输入的数据提交到另外的一个网页

    注意:SpringMVC项目在实现之前都必须进行环境的搭建

    SpringMVC项目环境的基础搭配

    一:创建提交书单页面

    1. <%--
    2. Created by IntelliJ IDEA.
    3. User: lenovo
    4. Date: 2022/11/5
    5. Time: 14:54
    6. To change this template use File | Settings | File Templates.
    7. --%>
    8. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    9. <html>
    10. <head>
    11. <title>Booktitle>
    12. head>
    13. <body>
    14. <h1>图书h1>
    15. <form action="/book2" method="post">
    16. <table>
    17. <tr>
    18. <td>样书td>
    19. <td><input type="text" name="name">td>
    20. tr>
    21. <tr>
    22. <td>作者td>
    23. <td><input type="text" name="author">td>
    24. tr>
    25. <tr>
    26. <td>价格td>
    27. <td><input type="text" name="price">td>
    28. tr>
    29. <tr>
    30. <td><input type="submit"value="提交">td>
    31. tr>
    32. table>
    33. form>
    34. body>
    35. html>

    二:获取第一步提交的数据,并打印在一个新的网页上

    1. import org.springframework.stereotype.Controller;
    2. import org.springframework.web.bind.annotation.*;
    3. @Controller
    4. public class controller_book1 {
    5. @GetMapping("/book")
    6. public String book(){
    7. return "book";
    8. }
    9. @RequestMapping(value = "/book2",method = RequestMethod.POST,produces = "text/html;charset=utf-8") //produces参数:设置字符格式UTF-8
    10. @ResponseBody
    11. public String play(String name,String author,double price){
    12. return name +"----"+author+"----"+price; //打印获取的数据
    13. }
    14. }

    三:因为我们在网页输入的数据如果没有进行配置的话,肯定会显示乱码如下面情况

    08fa16e740b147c683982f427f827373.png

     正常情况下,英文 数字都可以进行输出,但是汉字却无法进行正常的输出,对于这种情况我们要对web.xml进行配置

    1. "1.0" encoding="UTF-8"?>
    2. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
    5. version="4.0">
    6. <servlet>
    7. <servlet-name>springmvcservlet-name>
    8. <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
    9. <init-param>
    10. <param-name>contextConfigLocationparam-name>
    11. <param-value>classpath:springmvc_demo1.xmlparam-value>
    12. init-param>
    13. servlet>
    14. <servlet-mapping>
    15. <servlet-name>springmvcservlet-name>
    16. <url-pattern>/url-pattern>
    17. servlet-mapping>
    18. <filter>
    19. <filter-name>encodingfilter-name>
    20. <filter-class>org.springframework.web.filter.CharacterEncodingFilterfilter-class>
    21. <init-param>
    22. <param-name>encodingparam-name>
    23. <param-value>UTF-8param-value>
    24. init-param>
    25. <init-param>
    26. <param-name>forceRequestEncodingparam-name>
    27. <param-value>trueparam-value>
    28. init-param>
    29. <init-param>
    30. <param-name>forceResponseEncodingparam-name>
    31. <param-value>trueparam-value>
    32. init-param>
    33. filter>
    34. <filter-mapping>
    35. <filter-name>encodingfilter-name>
    36. <url-pattern>/*url-pattern>
    37. filter-mapping>
    38. web-app>

    结果演示:

    执行项目

    d0fdac736cbc4d64bc740078d4283510.png

     输入内容点击提交

    网页跳转

    e733a252df2a4fe68122bf16bc4f4a38.png

    实现对象数据的传递

    上面主要介绍了简单数据的传递,接下来介绍实体类的数据进行传递

    创建book.jsp通过form将数据传递到控制器中

    1. <%--
    2. Created by IntelliJ IDEA.
    3. User: lenovo
    4. Date: 2022/11/5
    5. Time: 14:54
    6. To change this template use File | Settings | File Templates.
    7. --%>
    8. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    9. <html>
    10. <head>
    11. <title>Booktitle>
    12. head>
    13. <body>
    14. <h1>图书h1>
    15. <form action="/play3" method="post">
    16. <table>
    17. <tr>
    18. <td>样书td>
    19. <td><input type="text" name="name">td>
    20. tr>
    21. <tr>
    22. <td>价格td>
    23. <td><input type="text" name="price">td>
    24. tr>
    25. <tr>
    26. <td><input type="submit"value="提交">td>
    27. tr>
    28. table>
    29. form>
    30. body>
    31. html>

    在控制器接受数据,上面的方法是通过定义字符串来接受前端传入的数据。在这里将通过一种新的方法来接受数据,就是创一个实体类,将接受的数据传入的实体类,然后在进行打印输出

    创建接受数据的实体类

    1. package controller;
    2. //将前端传入的数据全都保存在这个类,然后进行输出
    3. import javax.xml.crypto.Data;
    4. import java.util.Date;
    5. public class book {
    6. private String name;
    7. private String author;
    8. private double price;
    9. @Override
    10. public String toString() {
    11. return "book{" +
    12. "name='" + name + '\'' +
    13. ", author=" + author +
    14. ", price=" + price +
    15. '}';
    16. }
    17. public String getAuthor() {
    18. return author;
    19. }
    20. public void setAuthor(String author) {
    21. this.author = author;
    22. }
    23. public String getName() {
    24. return name;
    25. }
    26. public void setName(String name) {
    27. this.name = name;
    28. }
    29. public double getPrice() {
    30. return price;
    31. }
    32. public void setPrice(double price) {
    33. this.price = price;
    34. }
    35. }

    在控制器中接收数据,并将接收的数据传递到创建的对象里,然后进行打印输出

    1. @RequestMapping(value = "/play3",produces = "text/html;charset=utf-8")
    2. @ResponseBody
    3. public String play3(book1 book){
    4. return book.toString();
    5. }

    执行项目:

     点击提交:将前端传入的数据进行打印

    自定义参数

    在前端上传的数据,并不是全部都能够识别的,我们需要自定义参数的识别类能够识别前端传来的数据,上面所讲述的前端上传的数据类型都是系统自动转换的,但是还有一部分数据是系统无法自动转换的,这时候我们需要将前端传来的数据转换成能够识别的系统。

    以时间为例:

    配置网页:

    1. <%--
    2. Created by IntelliJ IDEA.
    3. User: lenovo
    4. Date: 2022/11/5
    5. Time: 14:54
    6. To change this template use File | Settings | File Templates.
    7. --%>
    8. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    9. <html>
    10. <head>
    11. <title>Booktitle>
    12. head>
    13. <body>
    14. <h1>图书h1>
    15. <form action="/play3" method="post">
    16. <table>
    17. <tr>
    18. <td>出版时间td>
    19. <td><input type="date" name="time">td>
    20. tr>
    21. <tr>
    22. <td>样书td>
    23. <td><input type="text" name="name">td>
    24. tr>
    25. <tr>
    26. <td>样书td>
    27. <td><input type="text" name="author">td>
    28. tr>
    29. <tr>
    30. <td>作者td>
    31. <td><input type="text" name="author.name">td>
    32. tr>
    33. <tr>
    34. <td>年龄td>
    35. <td><input type="text" name="author.age">td>
    36. tr>
    37. <tr>
    38. <td>价格td>
    39. <td><input type="text" name="price">td>
    40. tr>
    41. <tr>
    42. <td><input type="submit"value="提交">td>
    43. tr>
    44. table>
    45. form>
    46. body>
    47. html>

    结果:

     如果按照上面的配置内容点击提交,会出现下面错误,所以我们要通过自定义参数配置使系统来接收前端传来的数据

     配置自定义参数类:

    1. package controller;
    2. //参数接收并不是全部都能进行输出的,,但是我们可以自定参数类型
    3. import org.springframework.core.convert.converter.Converter;
    4. import org.springframework.stereotype.Controller;
    5. import java.text.ParseException;
    6. import java.text.SimpleDateFormat;
    7. import java.util.Date;
    8. @Controller
    9. public class custom implements Converter { //实现Converter接口并将Date类型转换成String类型的数据
    10. SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); //配置显示时间样式
    11. @Override
    12. public Date convert(String source) {
    13. System.out.println("kankan");
    14. try {
    15. return format.parse(source);
    16. } catch (ParseException e) {
    17. e.printStackTrace();
    18. }
    19. return null;
    20. }
    21. }

    创建接口数据对象类:

    1. package controller;
    2. //将前端传入的数据全都保存在这个类,然后进行输出
    3. import javax.xml.crypto.Data;
    4. import java.util.Date;
    5. public class book {
    6. private String name;
    7. private String author;
    8. private double price;
    9. private Date time;
    10. public Date getTime() {
    11. return time;
    12. }
    13. public void setTime(Date time) {
    14. this.time = time;
    15. }
    16. @Override
    17. public String toString() {
    18. return "book{" +
    19. "name='" + name + '\'' +
    20. ", author='" + author + '\'' +
    21. ", price=" + price +
    22. ", time=" + time +
    23. '}';
    24. }
    25. public String getAuthor() {
    26. return author;
    27. }
    28. public void setAuthor(String author) {
    29. this.author = author;
    30. }
    31. public String getName() {
    32. return name;
    33. }
    34. public void setName(String name) {
    35. this.name = name;
    36. }
    37. public double getPrice() {
    38. return price;
    39. }
    40. public void setPrice(double price) {
    41. this.price = price;
    42. }
    43. }

    前面我们配置了自定义参数类,我们需要让框架加载我们创建自定义参数类

    在配置文件进行配置:

    1. "1.0" encoding="UTF-8"?>
    2. <beans xmlns="http://www.springframework.org/schema/beans"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xmlns:context="http://www.springframework.org/schema/context"
    5. xmlns:mvc="http://www.springframework.org/schema/mvc"
    6. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
    7. <context:component-scan base-package="controller">context:component-scan>
    8. <mvc:annotation-driven conversion-service="factoryBean"/>
    9. <bean class="org.springframework.context.support.ConversionServiceFactoryBean" id="factoryBean">
    10. <property name="converters">
    11. <set>
    12. <ref bean="custom">ref>
    13. set>
    14. property>
    15. bean>
    16. <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="modelAndView">
    17. <property name="prefix" value="/jsp/">property>
    18. <property name="suffix" value=".jsp">property>
    19. bean>
    20. beans>

     控制器配置:

    1. @RequestMapping(value = "/play3",produces = "text/html;charset=utf-8")
    2. @ResponseBody
    3. public String play3(book book){
    4. return book.toString();
    5. }

    效果展示:

     内容输出:

    通过数组来实现接收前端传入数据

    配置前端,使数据能够按照各种方法传递给后端

    1. <%--
    2. Created by IntelliJ IDEA.
    3. User: lenovo
    4. Date: 2022/11/5
    5. Time: 14:54
    6. To change this template use File | Settings | File Templates.
    7. --%>
    8. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    9. <html>
    10. <head>
    11. <title>Booktitle>
    12. head>
    13. <body>
    14. <h1>图书h1>
    15. <form action="/play3" method="post">
    16. <table>
    17. <tr>
    18. <td>出版时间td>
    19. <td><input type="date" name="time">td>
    20. tr>
    21. <tr>
    22. <td>样书td>
    23. <td><input type="text" name="name">td>
    24. tr>
    25. <tr>
    26. <td>样书td>
    27. <td><input type="text" name="author">td>
    28. tr>
    29. <tr>
    30. <td>td>
    31. <td><input type="text" name="map['zuo']">td>
    32. tr>
    33. <tr>
    34. <td>td>
    35. <td><input type="text" name="map['zhe']">td>
    36. tr>
    37. <tr>
    38. <td>爱好td>
    39. <td>
    40. <input type="checkbox" name="favo" value="lan"> lan
    41. <input type="checkbox" name="favo" value="qiu"> qiu
    42. <input type="checkbox" name="favo" value="ni"> ni
    43. <input type="checkbox" name="favo" value="mm"> mm
    44. td>
    45. tr>
    46. <tr>
    47. <td>listdemotd>
    48. <td>
    49. <input type="checkbox" value="不想" name="book2[0].name">不想
    50. <input type="hidden" value="0" name="book2[0].id">
    51. <input type="checkbox" value="睡醒" name="book2[1].name">不想
    52. <input type="hidden" value="1" name="book2[1].id">
    53. <input type="checkbox" value="不想" name="book2[2].name">不想
    54. <input type="hidden" value="2" name="book2[2].id">
    55. td>
    56. tr>
    57. <tr>
    58. <td>年龄td>
    59. <td><input type="text" name="author.age">td>
    60. tr>
    61. <tr>
    62. <td>价格td>
    63. <td><input type="text" name="price">td>
    64. tr>
    65. <tr>
    66. <td><input type="submit"value="提交">td>
    67. tr>
    68. table>
    69. form>
    70. body>
    71. html>

    后端创建类来储存前端传来的数据‘

    1. package controller;
    2. //将前端传入的数据全都保存在这个类,然后进行输出
    3. import javax.xml.crypto.Data;
    4. import java.util.Date;
    5. import java.util.List;
    6. import java.util.Map;
    7. public class book {
    8. private String name;
    9. private String author;
    10. private double price;
    11. private Date time;
    12. private List favo;
    13. private List book2;
    14. private Map map;
    15. @Override
    16. public String toString() {
    17. return "book{" +
    18. "name='" + name + '\'' +
    19. ", author='" + author + '\'' +
    20. ", price=" + price +
    21. ", time=" + time +
    22. ", favo=" + favo +
    23. ", book2=" + book2 +
    24. ", map=" + map +
    25. '}';
    26. }
    27. public Map getMap() {
    28. return map;
    29. }
    30. public void setMap(Map map) {
    31. this.map = map;
    32. }
    33. public List getBook2() {
    34. return book2;
    35. }
    36. public void setBook2(List book2) {
    37. this.book2 = book2;
    38. }
    39. public List getFavo() {
    40. return favo;
    41. }
    42. public void setFavo(List favo) {
    43. this.favo = favo;
    44. }
    45. public Date getTime() {
    46. return time;
    47. }
    48. public void setTime(Date time) {
    49. this.time = time;
    50. }
    51. public String getAuthor() {
    52. return author;
    53. }
    54. public void setAuthor(String author) {
    55. this.author = author;
    56. }
    57. public String getName() {
    58. return name;
    59. }
    60. public void setName(String name) {
    61. this.name = name;
    62. }
    63. public double getPrice() {
    64. return price;
    65. }
    66. public void setPrice(double price) {
    67. this.price = price;
    68. }
    69. }
    70. class book2{
    71. private String name;
    72. private Integer id;
    73. public String getName() {
    74. return name;
    75. }
    76. public void setName(String name) {
    77. this.name = name;
    78. }
    79. public Integer getId() {
    80. return id;
    81. }
    82. public void setId(Integer id) {
    83. this.id = id;
    84. }
    85. @Override
    86. public String toString() {
    87. return "book2{" +
    88. "name='" + name + '\'' +
    89. ", id=" + id +
    90. '}';
    91. }
    92. }

    执行项目:

     点击提交,获取前端所传来的数据

     上面网页所显示的内容就是通过各种方法去获取前端所传来的数据内容,但是比如像集合和数组等那些方法在实际开发基本上不大会使用,基本上都是通过对象来获取数据。

  • 相关阅读:
    【剑指offer系列】62. 和为S的两个数字
    如何退出或卸载奇安信天擎软件
    微信小程序控制元素显示隐藏
    pip 安装dgl的问题
    Libuv源码解析 - uv_loop整个初始化模块
    软件设计思想
    代码随想录算法训练营第二十九天| LeetCode491. 递增子序列、LeetCode46. 全排列、LeetCode47. 全排列 II
    排序算法:快速排序(三种排序方式、递归和非递归)
    【VBA】获取指定目录下的Excel文件,并合并所有excel中的内容。
    Android 1.2.1 使用Eclipse + ADT + SDK开发Android APP
  • 原文地址:https://blog.csdn.net/m0_52479012/article/details/127719143