在Cookie中name的值不能使用中文,Value是可以的。但是在Servlet4.0版本之前Cookie中的Value也是不支持中文存储的,如果存储的数据中含有中文,代码会直接出现异常。我们可以通过对含有中文的数据重新进行编码来解决该问题。在Servlet4.0中的Cookie的Value开始支持中文存储。

    URLEncoder.encode(“content”,”code”)
    将内容按照指定的编码方式做URL编码处理。

    URLDecoder.decode(“content”,”code”)
    将内容按照指定的编码方式做URL解码处理。

    1. import javax.servlet.ServletException;
    2. import javax.servlet.http.Cookie;
    3. import javax.servlet.http.HttpServlet;
    4. import javax.servlet.http.HttpServletRequest;
    5. import javax.servlet.http.HttpServletResponse;
    6. import java.io.IOException;
    7. import java.io.PrintWriter;
    8. import java.net.URLEncoder;
    9. public class CreatCookieServlet extends HttpServlet {
    10. @Override
    11. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    12. this.doPost(req, resp);
    13. }
    14. @Override
    15. protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    16. //创建cookie对象
    17. // Cookie cookie = new Cookie("key","我想回家了");
    18. Cookie cookie = new Cookie(URLEncoder.encode("老家","utf-8"), URLEncoder.encode("安庆","utf-8"));
    19. //将cookie写回客户端
    20. resp.addCookie(cookie);
    21. PrintWriter printWriter = resp.getWriter();
    22. printWriter.println("creat cookie success");
    23. printWriter.flush();
    24. printWriter.close();
    25. }
    26. }
    1. import javax.servlet.ServletException;
    2. import javax.servlet.http.Cookie;
    3. import javax.servlet.http.HttpServlet;
    4. import javax.servlet.http.HttpServletRequest;
    5. import javax.servlet.http.HttpServletResponse;
    6. import java.io.IOException;
    7. import java.io.PrintWriter;
    8. import java.net.URLDecoder;
    9. import java.net.URLEncoder;
    10. public class GetCookieDataServlet extends HttpServlet {
    11. @Override
    12. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    13. this.doPost(req, resp);
    14. }
    15. @Override
    16. protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    17. //获取cookie对象
    18. Cookie[] cookies = req.getCookies();
    19. resp.setContentType("text/plain;charset=utf-8");
    20. //获取cookie中的数据
    21. PrintWriter printWriter = resp.getWriter();
    22. for(int i = 0;i<cookies.length;i++){
    23. Cookie cookie = cookies[i];
    24. String name = cookie.getName();
    25. String value = cookie.getValue();
    26. printWriter.println(URLDecoder.decode(name,"utf-8") +" "+URLDecoder.decode(value,"utf-8"));
    27. }
    28. printWriter.flush();
    29. printWriter.close();
    30. }
    31. }

    image.png