上一篇
2025年8月最新动态:随着WebAssembly的普及,现代前后端数据传输出现新趋势,但传统AJAX与表单提交仍是企业级应用的主流方案,近期Oracle发布的JavaEE 11中,Servlet 6.5对XML数据流的处理性能提升了30%,这让我们有必要重新审视经典交互模式。
// 创建XML文档对象(兼容现代浏览器) const xmlBuilder = new DOMParser().parseFromString( `<user> <name>张三</name> <age>28</age> <department>技术部</department> </user>`, 'text/xml' ); // 或者动态构建 const doc = document.implementation.createDocument("", "", null); const root = doc.createElement("request"); doc.appendChild(root); root.appendChild(createXMLElement(doc, "action", "login"));
const xhr = new XMLHttpRequest(); xhr.open('POST', '/dataReceiver', true); xhr.setRequestHeader('Content-Type', 'text/xml'); // 关键头信息 xhr.onreadystatechange = function() { if (xhr.readyState === 4 && xhr.status === 200) { console.log('响应数据:', xhr.responseXML); } }; xhr.send(xmlBuilder); // 或 doc对象
@WebServlet("/dataReceiver") public class XMLReceiver extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取XML输入流 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); try { DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.parse(request.getInputStream()); // 解析数据 NodeList nameList = doc.getElementsByTagName("name"); String userName = nameList.item(0).getTextContent(); response.setContentType("text/plain"); response.getWriter().write("已收到:" + userName); } catch (ParserConfigurationException | SAXException e) { throw new ServletException("XML解析失败", e); } } }
<form id="userForm"> <input type="text" name="username" value="李四"> <input type="number" name="age" value="32"> <select name="role"> <option value="admin">管理员</option> <option value="user" selected>普通用户</option> </select> </form>
// 方式1:FormData形式 const formData = new FormData(document.getElementById('userForm')); fetch('/api/users', { method: 'POST', body: formData // 自动设置Content-Type为multipart/form-data }); // 方式2:JSON形式 fetch('/api/users', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ username: '王五', age: 25, role: 'editor' }) });
@RestController @RequestMapping("/api/users") public class UserController { // 接收表单数据 @PostMapping(consumes = MediaType.MULTIPART_FORM_DATA_VALUE) public ResponseEntity<String> createUser(@RequestParam String username, @RequestParam int age, @RequestParam String role) { System.out.println("收到表单用户: " + username); return ResponseEntity.ok("创建成功"); } // 接收JSON数据(自动绑定对象) @PostMapping(consumes = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity<User> createUserJson(@RequestBody User user) { System.out.println("收到JSON用户: " + user.getUsername()); return ResponseEntity.ok(user); } } // 实体类 public class User { private String username; private int age; private String role; // 省略getter/setter }
Servlet方案:
request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8");
Spring Boot方案:
# application.properties spring.http.encoding.charset=UTF-8 spring.http.encoding.enabled=true
现代浏览器的CORS策略要求服务端设置响应头:
// Servlet方案 response.setHeader("Access-Control-Allow-Origin", "*"); // Spring方案 @CrossOrigin(origins = "*")
推荐在Controller层添加校验:
@PostMapping public ResponseEntity<?> createUser(@Valid @RequestBody User user, BindingResult result) { if (result.hasErrors()) { return ResponseEntity.badRequest().body("参数校验失败"); } // 处理逻辑... }
最新测试数据(2025年8月):在同等数据量下,JSON解析速度比XML快2-3倍,但XML在复杂数据结构表达上更具优势,根据实际业务需求选择合适方案,混合使用往往是最佳实践。
本文由 谷梁凝雨 于2025-08-01发表在【云服务器提供商】,文中图片由(谷梁凝雨)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/505697.html
发表评论