学习学习笔记关于前端与后端通信的一些说明
白鹤忘机关于前端与后端通信的一些说明
前端与后端通信
前端与后端通信,通常使用HTTP协议,通过请求和响应的方式实现数据的交换。前端发送请求到后端,后端处理请求并返回响应,前端根据响应的数据进行相应的处理。
前端发送请求的方式
在 Java Web 开发中,前端通过多种方式连接到后端服务器,以实现前后端数据交互。Java Web 应用可以通过传统的 JSP (Java Server Pages) 或基于现代前端框架(如 Vue.js、React)与 Java 后端 (Spring Boot、Servlet 等) 进行连接。以下是几种常见的连接方式及其实现步骤:
1. 通过表单提交连接后端
这是最基本的方式,前端使用 HTML 表单将数据提交到后端。
实现步骤:
<form action="/login" method="post"> <label for="username">Username:</label>
<input type="text" id="username" name="username"> <br> <label for="password">Password:</label>
<input type="password" id="password" name="password"> <br> <input type="submit" value="Login"> </form>
|
@WebServlet("/login") public class LoginServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username = request.getParameter("username"); String password = request.getParameter("password"); if ("admin".equals(username) && "123".equals(password)) { response.getWriter().write("Login successful!"); } else { response.getWriter().write("Invalid username or password."); } } }
|
- 工作原理:前端表单使用
POST
方法提交到 /login
,然后由后端的 Servlet 处理逻辑。表单提交可以用于处理简单的登录、注册、表单提交等。
2. 通过 AJAX 连接后端
现代 Java Web 应用通常使用 AJAX 技术,前端无需刷新页面即可与后端进行交互。AJAX 可以通过 XMLHttpRequest
或 Fetch API
来实现。
实现步骤:
<script> function login() { const username = document.getElementById("username").value; const password = document.getElementById("password").value;
fetch('/login', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ username, password }) }) .then(response => response.text()) .then(data => alert(data)); } </script>
<form onsubmit="login(); return false;"> <label for="username">Username:</label>
<input type="text" id="username" name="username"> <br> <label for="password">Password:</label>
<input type="password" id="password" name="password"> <br> <input type="submit" value="Login"> </form>
|
- 后端:Spring Boot 处理 AJAX 请求
@RestController public class LoginController { @PostMapping("/login") public String login(@RequestBody Map<String, String> credentials) { String username = credentials.get("username"); String password = credentials.get("password");
if ("admin".equals(username) && "123".equals(password)) { return "Login successful!"; } else { return "Invalid username or password."; } } }
|
- 工作原理:前端使用
fetch()
方法通过 POST
请求向后端发送数据(username
和 password
)。后端接收 JSON 数据并进行处理,返回响应给前端。
3. 通过 RESTful API 连接后端
RESTful API 是现代 Web 应用前后端分离中常用的通信方式。后端提供一组 API 供前端调用,并使用 JSON 格式在前后端之间传递数据。
实现步骤:
<script> function fetchData() { fetch('/api/users') .then(response => response.json()) .then(data => console.log(data)); } </script>
<button onclick="fetchData()">Get Users</button>
|
- 后端:Spring Boot 提供 REST API
@RestController @RequestMapping("/api") public class UserController {
@GetMapping("/users") public List<String> getUsers() { return Arrays.asList("User1", "User2", "User3"); } }
|
- 工作原理:前端使用 AJAX
fetch()
方法请求后端的 REST API /api/users
,后端返回用户列表作为 JSON 数据,前端接收并处理。
4. 通过 Vue.js/React 前端框架连接后端
如果你在项目中使用了 Vue.js 或 React 等现代前端框架,通常会使用 axios
或 fetch()
来连接后端。
实现步骤(Vue.js + Spring Boot):
<template> <div> <button @click="getData">Get Users</button>
<ul> <li v-for="user in users" :key="user">{{ user }}</li>
</ul>
</div>
</template>
<script> import axios from 'axios';
export default { data() { return { users: [] }; }, methods: { getData() { axios.get('/api/users') .then(response => { this.users = response.data; }) .catch(error => { console.error(error); }); } } }; </script>
|
@RestController @RequestMapping("/api") public class UserController {
@GetMapping("/users") public List<String> getUsers() { return Arrays.asList("User1", "User2", "User3"); } }
|
- 工作原理:Vue.js 通过
axios.get()
向 Spring Boot 后端发起 GET 请求,后端返回 JSON 格式的用户列表,Vue.js 将数据绑定到页面上进行渲染。
5. 使用 WebSocket 连接后端
对于实时应用,例如聊天系统或股票行情推送,前端可以通过 WebSocket 实现与后端的双向通信。
实现步骤:
<script> let socket = new WebSocket("ws://localhost:8080/chat");
socket.onmessage = function(event) { console.log("Message from server: ", event.data); };
socket.onopen = function(event) { socket.send("Hello Server!"); }; </script>
|
@Configuration @EnableWebSocket public class WebSocketConfig implements WebSocketConfigurer {
@Override public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { registry.addHandler(new ChatHandler(), "/chat"); } }
@Component public class ChatHandler extends TextWebSocketHandler { @Override public void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception { session.sendMessage(new TextMessage("Hello Client!")); } }
|
- 工作原理:前端使用 WebSocket 向后端
/chat
端点发起连接,双方可以通过 WebSocket 进行实时双向通信。此方式特别适合需要频繁数据更新的场景。
总结
连接前端和后端的方式有多种,具体使用哪种方式取决于你的应用场景:
- 传统表单提交:适合简单的表单提交场景,但会导致页面刷新。
- AJAX/FETCH:适合单页面应用,能够异步无刷新地与后端交互。
- RESTful API:适合前后端分离,通常使用 JSON 作为数据格式。
- 现代前端框架:Vue.js/React 等框架通过 AJAX 库如
axios
实现与后端的高效通信。
- WebSocket:适合实时数据通信,如聊天或在线游戏。
这些方式为前后端通信提供了灵活性和可扩展性。
关于代码的细节部分请转https://www.yuque.com/baihewangji-hwmlm/eu7kkx/ddgve620ysg0vagz?singleDoc# 《Springboot–Vue3框架学习》
查找目录,
白鹤忘机
观看和感受正在经历的事物本相,而不是其名称。 ---艾伦·瓦兹-
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 白鹤忘机!