在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 {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req, resp);
}
@Override
protected 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 {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req, resp);
}
@Override
protected 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();
}
}