前后端数据交互,跳转

本文介绍了前端与后端交互的过程,包括同步和异步交互方式,讲解了HTTP协议的重要性,以及如何处理缓存问题。同时,讨论了前端交互类的封装,后端Controller的参数接收,以及处理404错误时的路径检查。强调了contentType在数据传输中的作用,提供了相关资源链接以深入理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

作为一枚菜鸟,前后端交互可是大问题,经常数据交互失败,不知道怎么跳转。在这分享一下交互的小心得。

我们不妨先大概了解一下整个访问流程:

用户从输入网址按下回车,交互就已经开始了。

浏览器会将请求按照http协议(或者其他https,ftp等)将请求数据封装包从电脑的端口发出 -> 路由器 -> 运营商(域名解析之类的)-> 目标服务器(可能会有代理,负载均衡等等)

最终从服务器开放的端口,进入到服务器(TCP三次握手和四次挥手,Tomcat之类的,会根据协议的内容进行解析)-> web项目进行具体的逻辑处理 -> 返回数据 -> 浏览器接收数据(根据协议内容进行解析

整个过程,协议很重要,因为客户端和服务器都是通过协议来解析和发送信息的,最常见的http协议,协议头部的参数常用的哪几个,有什么影响。

Http协议的简介,说的很有意思:https://blog.youkuaiyun.com/u010256388/article/details/68491509/

还有缓存问题(cookie、session、localstorage、cashe-controller等),不仅提高效率,而且有时候你更改了代码测试却没变化的重要原因https://www.jianshu.com/p/9ed3e8759ce3

相应的后台tomcat的缓存处理:http://www.360doc.com/content/17/0721/17/41344223_673116604.shtml(了解即可)

 

具体到使用分为:前端交互,分为同步和异步。

同步交互

常见的from表单提交(post方式带参数),URL直接访问(get方式,有参数在地址栏可见,特殊符号需要转义,不安全)。

异步交互

关键是XMLHttpRequest对象,平时说的ajax只是一种交互模式,并不是什么新技术,其原理就是对XMLHttpRequest的封装。所以对XMLHttpRequest深入全面的了解可以帮助我们更好的掌握异步交互。

可以看这篇精品文章了解:https://www.jianshu.com/p/b037f71af548,里面涉及到了在传送过程中各个参数的用法,会触发的事件,返回值等等很实用的知识。(虽然能设置同步交互,但不推荐)

其中传输类型 contentType就非常重要,这个值设置决定了后台怎么去解析http协议。

json交互 

  • 上图所示,如果格式前后端发送和接收对不上,那是获取不了数据。如图的最后一步返回,如果想页面跳转,则不需要@ResponseBody,改为返回ModelAndView
  • @RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的);GET方式无请求体,所以使用@RequestBody接收数据时,前端不能使用GET方式提交数据,而是用POST方式进行提交。
  • @RequestParam接收的是key-value里面的参数,所以GET方式的数据和表单提交,可以接收。
  • @RequestBody和@RequestParma的使用知识,更轻松的全面掌握:https://blog.youkuaiyun.com/justry_deng/article/details/80972817

前端交互类

前端我创建了两个工具类,来负责交互。

异步交互类

我把jQuery的ajax进行了封装,主要是获取和计算信息,代码如下:

  1 /*
  2  * 以下为程序错误码
  3  */
  4 //通用的请求失败,包括未知原因
  5 var EXPECTATION_FAILED = 417;
  6 var EXPECTATION_QUERY = 404;
  7 
  8 /**
  9  * 访问后台的对象,为ajax封装
 10  * @constructor
 11  */
 12 var Query = function (url, param, callback, contentType) {
 13     this.url = url;
 14 
 15     //先确认参数存在,如果不存在则创建空map
 16     if (!param) {
 17         param = new Map();
 18     }
 19     //注意,要根据不同的传输格式来确定传输的值的类型
 20     if (contentType == Query.NOMAL_TYPE) {
 21         this.param = JSON.parse(this._convertParam(param));
 22     } else {
 23         this.param = this._convertParam(param);
 24     }
 25 
 26 
 27</
### Java前后端数据交互的实现方式 Java前后端数据交互可以通过多种技术和框架完成,常见的有基于MVC模式、Servlet/JSP组合、AJAX+JSON等方式。以下是几种主要的技术方案及其特点: #### 1. **基于MVC架构的数据交互** MVC(Model-View-Controller)是一种经典的软件设计模式,在Web开发中广泛应用于前后端数据交互。在这种模式下,控制器负责接收用户的输入并调用模型和视图去完成用户的需求[^2]。 ```java // 控制器部分示例代码 @WebServlet("/login") public class LoginController extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username = request.getParameter("username"); String password = request.getParameter("password"); UserService userService = new UserService(); User user = userService.login(username, password); if (user != null) { RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/dataList.jsp"); dispatcher.forward(request, response); } else { response.getWriter().println("<script>alert('登录失败');</script>"); } } } ``` 上述代码展示了如何通过Servlet处理前端传来的用户名和密码,并根据验证结果决定跳转页面或返回错误提示。 --- #### 2. **使用AJAX+JSON进行异步数据交互** 现代Web应用通常采用AJAX技术实现无刷新的数据加载效果。后端可以将数据封装成JSON格式传递给前端,而前端则解析这些数据用于动态更新界面[^3]。 ```javascript function login() { let xhr = new XMLHttpRequest(); // 创建XMLHttpRequest对象 xhr.open("POST", "/api/login", true); // 配置请求参数 xhr.setRequestHeader("Content-Type", "application/json;charset=UTF-8"); // 设置头部信息 let data = JSON.stringify({ username: document.getElementById("username").value, password: document.getElementById("password").value }); xhr.onreadystatechange = function () { if (xhr.readyState === 4 && xhr.status === 200) { const result = JSON.parse(xhr.responseText); if (result.success) { window.location.href = "/dataList.html"; } else { alert(result.message || "登录失败"); } } }; xhr.send(data); // 发送请求体 } ``` 以上脚本实现了向服务器发送登录请求的功能,同时支持异步操作以提升用户体验。 --- #### 3. **利用Spring Boot简化开发过程** 对于更复杂的场景,推荐使用Spring Boot框架快速搭建应用程序。它内置了许多工具库来帮助开发者轻松管理依赖关系和服务配置文件[^1]。 ```yaml # application.properties 文件片段 spring.datasource.url=jdbc:mysql://localhost:3306/testdb?useSSL=false&serverTimezone=UTC spring.datasource.username=root spring.datasource.password=password ``` 配合Thymeleaf模板引擎或者RESTful API风格的服务接口定义,能够进一步增强系统的灵活性与可维护性。 --- #### 4. **其他注意事项** 当`option.data`是一个普通的JavaScript对象而非数组时,需对其进行特殊判断以便正确序列化为查询字符串形式提交给服务端[^5]。 ```javascript if (typeof option.data === 'object' && !Array.isArray(option.data)) { console.log('这是一个标准的对象'); } else { console.error('非法的数据结构'); } ``` 这种逻辑可用于防止潜在的安全隐患比如SQL注入攻击等问题发生。 --- ### 总结 综上所述,无论是传统的Servlet/JSP还是现代化的AJAX+JSON乃至更加先进的微服务体系架构,都可以满足不同层次需求下的Java Web项目的构建工作。选择合适自己的技术栈至关重要!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值