在Cookie中name的值不能使用中文,Value是可以的。但是在Servlet4.0版本之前Cookie中的Value也是不支持中文存储的,如果存储的数据中含有中文,代码会直接出现异常。我们可以通过对含有中文的数据重新进行编码来解决该问题。在Servlet4.0中的Cookie的Value开始支持中文存储。
URLEncoder.encode(“content”,”code”)
将内容按照指定的编码方式做URL编码处理。
URLDecoder.decode(“content”,”code”)
将内容按照指定的编码方式做URL解码处理。
import javax.servlet.ServletException;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;import java.io.PrintWriter;import java.net.URLEncoder;public class CreatCookieServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {this.doPost(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//创建cookie对象// Cookie cookie = new Cookie("key","我想回家了");Cookie cookie = new Cookie(URLEncoder.encode("老家","utf-8"), URLEncoder.encode("安庆","utf-8"));//将cookie写回客户端resp.addCookie(cookie);PrintWriter printWriter = resp.getWriter();printWriter.println("creat cookie success");printWriter.flush();printWriter.close();}}
import javax.servlet.ServletException;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;import java.io.PrintWriter;import java.net.URLDecoder;import java.net.URLEncoder;public class GetCookieDataServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {this.doPost(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//获取cookie对象Cookie[] cookies = req.getCookies();resp.setContentType("text/plain;charset=utf-8");//获取cookie中的数据PrintWriter printWriter = resp.getWriter();for(int i = 0;i<cookies.length;i++){Cookie cookie = cookies[i];String name = cookie.getName();String value = cookie.getValue();printWriter.println(URLDecoder.decode(name,"utf-8") +" "+URLDecoder.decode(value,"utf-8"));}printWriter.flush();printWriter.close();}}

