Accept-Charset,Accept-Encoding,pageEncoding,charset区别与联系

本文解析了HTTP请求头中的Accept-Charset与Accept-Encoding的作用,以及JSP中的pageEncoding与charset属性的区别。详细介绍了这些编码如何影响客户端与服务器之间的数据交互。

常见有关编码的设定方式:

Accept-Charset,Accept-Encoding,pageEncoding,charset


Accept-Charset:是请求端在发送请求时的头部信息,这个标识的是当前客户端可以接受的字符编码(所谓字符编码就是对于可见或者不可见字符的编码方式,如utf-8,GBK等)。


Accept_Encoding:也是请求端在发送请求的时候头部的信息,这个表示的是当前客户端可以接受的页面编码,这个编码与字符编码不是一个该概念,(我们经常会用到压缩文件,将正常文件进行压缩就是一种利用文件的底层编码进行的再编码,比如有一个文件的数据转化成二进制以后有很多的相同结构的连续编码,此时就可以用一个比较短的编码表示这个长的编码,比如对 0000001000000这个二进制串用1110表示,这就是压缩,然后再解压缩的时候再反过来将编码还原,这就是解码)服务器在发个客户端数据的时候会将数据先根据请求数据中的Accept-Charset进行编码,然后对数据进行压缩,也就是说通过Accept-Encoding中可以接受的压缩算法进行压缩,这会有效减小网络压力,同时也减小了对客户端的延时,因为段数据在服务器进行压缩所用的时间与在网络上传输的时间相比还是比较理想的。

JSP中经常能见到这两行代码,在实际应用中默认的编码是ISO-8859-1,如果不设置就是默认的编码,如果改变其中任何一个两一个也跟着改变,但是我对这个的理解是 pageEncoding:表示的是页面编码完成以后在发送数据的时候的编码方式,这里可以是压缩格式,比如ZIP,但是目前还没有见过。


charset: 才是表示页面的编码,表示的是页面字符的编码,不能使用例如ZIP格式。请求的Accept-Charset与服务器的charset对应,请求的Accept-Encoding与JSP的pageEncoding对应。

这只是当前的暂时理解,可能有误。。。有待后期验证和探索。。。。

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ page contentType="text/html;charset=utf-8"%>

代码运行效果预期不一致: package com.example.goodbook.controller; import com.example.goodbook.entity.Cart; import com.example.goodbook.service.CartService; import com.example.goodbook.service.impl.CartServiceImpl; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; import java.util.List; @Controller @RequestMapping("/cart") public class CartController { // 注入服务 private final CartService service = new CartServiceImpl(); // 查询用户购物车 @GetMapping("/{userId}") @ResponseBody public List<Cart> list(@PathVariable("userId") int userId) { return service.listByUser(userId); } // 添加购物车 @PostMapping("/add") @ResponseBody public String add(Cart cart) { service.addToCart(cart); return "添加成功"; } // 更新数量 @PostMapping("/update") @ResponseBody public String update(Cart cart) { service.updateCart(cart); return "更新成功"; } // 删除购物车项 @DeleteMapping("/{id}") @ResponseBody public String delete(@PathVariable("id") int id) { service.removeFromCart(id); return "删除成功"; } // 跳转到添加页面 @GetMapping("/addPage") public String addPage() { return "cart/cart-add"; } // 我的购物车页面 @GetMapping("/my") public String myCart(@RequestParam int userId, Model model) { model.addAttribute("cartList", service.listByUser(userId)); return "cart/cart-list"; } } http://localhost:8080/goodbook_war/cart/addPage 输入数据后,提交成功,跳转页面显示???? 前端代码如下: <%@ page contentType="text/html;charset=UTF-8" %> <html> <head><title>添加到购物车</title></head> <body> <h2>添加到购物车</h2> <form method="post" action="${pageContext.request.contextPath}/cart/add" accept-charset="UTF-8"> 用户ID:<input type="text" name="userId" required><br/> 图书ID:<input type="text" name="bookId" required><br/> 数量:<input type="number" name="quantity" value="1" min="1"><br/> <button type="submit">添加</button> </form> <a href="${pageContext.request.contextPath}/cart/my?userId=1">查看我的购物车</a> </body> </html>
最新发布
09-19
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值