更新時間:2023-05-16 來源:黑馬程序員 瀏覽量:
Cookie不能存儲中文,但是如果有這方面的需求,這個時候該如何解決呢?
這個時候,我們可以使用之前學過的一個知識點叫URL編碼,所以如果需要存儲中文,就需要進行轉碼,具體的實現思路為:
1.在AServlet中對中文進行URL編碼,采用URLEncoder.encode(),將編碼后的值存入Cookie中
2.在BServlet中獲取Cookie中的值,獲取的值為URL編碼后的值
3.將獲取的值在進行URL解碼,采用URLDecoder.decode(),就可以獲取到對應的中文值
(1)在AServlet中對中文進行URL編碼
@WebServlet("/aServlet") public class AServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse sponse) throws ServletException, IOException { //發送Cookie String value = "張三"; //對中文進行URL編碼 value = URLEncoder.encode(value, "UTF-8"); System.out.println("存儲數據:" + value); //將編碼后的值存入Cookie中 Cookie cookie = new Cookie("username", value); //設置存活時間 ,1周 7天 cookie.setMaxAge(60 * 60 * 24 * 7); //2. 發送Cookie,response response.addCookie(cookie); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse ponse) throws ServletException, IOException { this.doGet(request, response); } }(2)在BServlet中獲取值,并對值進行解碼。
@WebServlet("/bServlet") public class BServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse sponse) throws ServletException, IOException { //獲取Cookie //1. 獲取Cookie數組 Cookie[] cookies = request.getCookies(); //2. 遍歷數組 for (Cookie cookie : cookies) { //3. 獲取數據 String name = cookie.getName(); if("username".equals(name)){ String value = cookie.getValue();//獲取的是URL編碼后的值 %BC%A0%E4%B8%89 //URL解碼 value = URLDecoder.decode(value,"UTF-8"); System.out.println(name+":"+value);//value解碼后為 張三 break; } } } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); } }至此,我們就可以將中文存入Cookie中進行使用。