• 基于restful页面数据交互(前端页面访问处理)


    做的功能如下所示:

     

    一、基于restful页面数据交互(后台接口开发)

    SpringMvcConfig:

    ServletContainersInitConfig:

     controller包下含有bean注解的对象:

    BookController:(REST风格

    1. package com.itheima.controller;
    2. import com.itheima.domain.Book;
    3. import org.springframework.web.bind.annotation.*;
    4. import java.util.ArrayList;
    5. import java.util.List;
    6. @RestController // 合二为一:@Controller和@ResponseBody注解
    7. @RequestMapping(value = "/books") // 简化的访问资源路径注解
    8. public class BookController {
    9. /**
    10. * 1、 保存数据功能
    11. *
    12. * 注1:保存成功后,响应给前端保存成功的提示(所以用String返回类型)
    13. * 注2:后端肯定要先接收到前端请求保存的数据信息才能保存(这里模拟:以Book对象进行接收前端请求保存的数据)
    14. */
    15. @PostMapping // Restful风格访问的路径简化method(忘记的话看前面笔记)
    16. public String save(@RequestBody Book book){ // @RequestBody: json数据的转换注解
    17. /**
    18. * 假设接收到前端保存的信息后,我们这里用的是假数据,
    19. * 因此用输出代替一些保存到数据库中的逻辑
    20. */
    21. System.out.println("book save ====>" +book);
    22. return "{'module':'book save success'}"; // 响应给前端的成功标识
    23. }
    24. /**
    25. * 2、查询所有的功能
    26. *
    27. * 注1:查询的数据过多,所有以封装在对象属性当中以集合形式封装展示
    28. */
    29. @GetMapping
    30. public List getAll(){
    31. /**
    32. * 注:假设这里模拟一些从数据库中查询出来的假的数据,然后存放到List集合当中传递展示给前端
    33. */
    34. Book book =new Book();
    35. book.setType("计算机");
    36. book.setName("SpringMvc入门课程");
    37. book.setDescription("小试牛刀");
    38. Book book1 = new Book();
    39. book1.setName("计算机");
    40. book1.setName("SpringMvc实践课程");
    41. book1.setDescription("一代宗师");
    42. // 把查询出来的数据封装到List集合中返回给前端
    43. List bookList = new ArrayList();
    44. bookList.add(book);
    45. bookList.add(book1);
    46. return bookList;
    47. }
    48. }

     前端访问后端保存功能路径如下所示:

     

    前端访问后端查询所有功能路径如下所示:

    二、基于restful页面数据交互(前端页面访问处理

     我们开启服务器进行访问前端页面的时候:思考会出现什么问题

     

     我们可以看出,当访问前端页面的时候,前端会404,并且后端会出现[WARNING]警告提示

    思考:为什么会出现这种情况呢?

    就是因为这个方法把客户端所有的请求都归属到springmvc管理了,而前端访问请求路径:

    我们知道这种请求是get方式的请求(在URL地址栏中明着写的都是get请求方式),所以当访问前端路径的时候,下面的这个方法就把该路径交给springmvc进行处理了,而springmvc认为这是一个简单的get请求路径,所以找不到路径就报404了

    因此解决方法如下所示:

    配置一个过滤对象(并注解成bean形式):

    1. /**
    2. * 用户访问地址过滤类 (看restful笔记处理前端访问的那里)
    3. */
    4. @Configuration
    5. public class SpringMvcSupport extends WebMvcConfigurationSupport {
    6. @Override
    7. protected void addResourceHandlers(ResourceHandlerRegistry registry){
    8. // 意思就是说:当客户端访问/pages/**下的路径资源时,从/pages/包下开始走,不走Springmvc管理
    9. registry.addResourceHandler("/pages/**").addResourceLocations("/pages/");
    10. registry.addResourceHandler("/js/**").addResourceLocations("/js/");
    11. registry.addResourceHandler("/css/**").addResourceLocations("/css/");
    12. registry.addResourceHandler("/plugins/**").addResourceLocations("/plugins/");
    13. }
    14. }

     

    我们开启服务器再次进行访问前端页面的时候:会发现能访问到前端页面了

    =========================================================================

    books.html:

    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <title>SpringMVC案例title>
    6. <link rel="stylesheet" href="../plugins/elementui/index.css">
    7. <link rel="stylesheet" href="../plugins/font-awesome/css/font-awesome.min.css">
    8. <link rel="stylesheet" href="../css/style.css">
    9. head>
    10. <body class="hold-transition">
    11. <div id="app">
    12. <div class="content-header">
    13. <h1>图书管理h1>
    14. div>
    15. <div class="app-container">
    16. <div class="box">
    17. <div class="filter-container">
    18. <el-input placeholder="图书名称" style="width: 200px;" class="filter-item">el-input>
    19. <el-button class="dalfBut">查询el-button>
    20. <el-button type="primary" class="butT" @click="openSave()">新建el-button>
    21. div>
    22. <el-table size="small" current-row-key="id" :data="dataList" stripe highlight-current-row>
    23. <el-table-column type="index" align="center" label="序号">el-table-column>
    24. <el-table-column prop="type" label="图书类别" align="center">el-table-column>
    25. <el-table-column prop="name" label="图书名称" align="center">el-table-column>
    26. <el-table-column prop="description" label="描述" align="center">el-table-column>
    27. <el-table-column label="操作" align="center">
    28. <template slot-scope="scope">
    29. <el-button type="primary" size="mini">编辑el-button>
    30. <el-button size="mini" type="danger">删除el-button>
    31. template>
    32. el-table-column>
    33. el-table>
    34. <div class="pagination-container">
    35. <el-pagination
    36. class="pagiantion"
    37. @current-change="handleCurrentChange"
    38. :current-page="pagination.currentPage"
    39. :page-size="pagination.pageSize"
    40. layout="total, prev, pager, next, jumper"
    41. :total="pagination.total">
    42. el-pagination>
    43. div>
    44. <div class="add-form">
    45. <el-dialog title="新增图书" :visible.sync="dialogFormVisible">
    46. <el-form ref="dataAddForm" :model="formData" :rules="rules" label-position="right" label-width="100px">
    47. <el-row>
    48. <el-col :span="12">
    49. <el-form-item label="图书类别" prop="type">
    50. <el-input v-model="formData.type"/>
    51. el-form-item>
    52. el-col>
    53. <el-col :span="12">
    54. <el-form-item label="图书名称" prop="name">
    55. <el-input v-model="formData.name"/>
    56. el-form-item>
    57. el-col>
    58. el-row>
    59. <el-row>
    60. <el-col :span="24">
    61. <el-form-item label="描述">
    62. <el-input v-model="formData.description" type="textarea">el-input>
    63. el-form-item>
    64. el-col>
    65. el-row>
    66. el-form>
    67. <div slot="footer" class="dialog-footer">
    68. <el-button @click="dialogFormVisible = false">取消el-button>
    69. <el-button type="primary" @click="saveBook()">确定el-button>
    70. div>
    71. el-dialog>
    72. div>
    73. div>
    74. div>
    75. div>
    76. body>
    77. <script src="../js/vue.js">script>
    78. <script src="../plugins/elementui/index.js">script>
    79. <script type="text/javascript" src="../js/jquery.min.js">script>
    80. <script src="../js/axios-0.18.0.js">script>
    81. <script>
    82. var vue = new Vue({
    83. el: '#app',
    84. data:{
    85. dataList: [],//当前页要展示的分页列表数据
    86. formData: {},//表单数据
    87. dialogFormVisible: false,//增加表单是否可见
    88. dialogFormVisible4Edit:false,//编辑表单是否可见
    89. pagination: {},//分页模型数据,暂时弃用
    90. },
    91. //钩子函数,VUE对象初始化完成后自动执行
    92. created() {
    93. this.getAll();
    94. },
    95. methods: {
    96. // 重置表单
    97. resetForm() {
    98. //清空输入框
    99. this.formData = {};
    100. },
    101. // 弹出添加窗口
    102. openSave() {
    103. this.dialogFormVisible = true;
    104. this.resetForm();
    105. },
    106. //添加 // 确定按钮 调用这个saveBook()
    107. saveBook () { // 添加数据的请求
    108. axios.post("/springmvc_07_rest_case/books",this.formData).then((res)=>{
    109. });
    110. },
    111. //主页列表查询(查询所有)
    112. getAll() {
    113. axios.get("/springmvc_07_rest_case/books").then((res)=>{ // get请求("/#") 访问资源路径
    114. this.dataList = res.data;
    115. });
    116. },
    117. }
    118. })
    119. script>
    120. html>

  • 相关阅读:
    HTML列表、表格、表单
    javaEE - 2(11000字详解多线程)
    nacos 拉取配置失败
    STM32自学☞DMA数据转运以及DMA+AD多通道案例
    关于JAVA中字节码文件版本号、产品版本号及开发版本号的关系
    网络安全——网络空间搜索引擎
    【九章斩题录】Leetcode:判定是否互为字符重排(C/C++)
    设计模式-单例模式
    Windows上部署springboot项目并挂载后台
    java解决 衣服尺码 Compare T-Shirt Sizes
  • 原文地址:https://blog.csdn.net/lwj_07/article/details/125997764