JavaWeb学习中Cookie存储中文问题

在JavaWeb学习中,Cookie通常用于存储非中文数据。本文探讨了直接使用Cookie存储中文导致的问题,如显示异常,并提供了将中文进行编码后再写入Cookie,读取时解码的方法,成功解决了存储中文的需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

很多人在学习JavaWeb过程中都会用到Cookie技术,但是在使用Cookie技术的时候,我们更多的是用来存储非中文的数据,在使用过程都不会遇到什么问题,但是你有没有试过Servlet Cookie用来直接存储中文会是什么样的效果呢?其实Cookie技术的value值是不支持直接存储中文的,那么如果在开发中确实有需求,要存储中文怎么办呢?下面就交大家的个方法,轻松解决这个问题:

  1. 问题所在,直接存储中文出现的结果会是

protected void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

// 创建一个Cookie对象,直接将value值设置为中文

Cookie cookie = new Cookie("username", "张三");

//设置cookie有效时间

cookie.setMaxAge(60);

//设置cookie路径

cookie.setPath("/GZ182135day04");

response.addCookie(cookie);

request.getRequestDispatcher("/CookieChinese2").forward(request, response);

}

 

       2.会出现以下异常

严重: Servlet.service() for servlet [cn.yueqian.zuoye.CookieChinese] in context with path [/GZ182135day04] threw exception

java.lang.IllegalArgumentException: Control character in cookie value or attribute.

at org.apache.tomcat.util.http.LegacyCookieProcessor.needsQuotes(LegacyCookieProcessor.java:412)

at org.apache.tomcat.util.http.LegacyCookieProcessor.generateHeader(LegacyCookieProcessor.java:284)

at org.apache.catalina.connector.Response.generateCookieString(Response.java:940)

at org.apache.catalina.connector.Response.addCookie(Response.java:888)

at org.apache.catalina.connector.ResponseFacade.addCookie(ResponseFacade.java:392)

at cn.yueqian.zuoye.CookieChinese.doGet(CookieChinese.java:39)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:622)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)

 

       3.解决思路,将中文先编码后再写入Cookie中,在取出Cookie的时候再解码操作,代码如下:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// TODO Auto-generated method stub

//解决Cookie存入中文:

//存入之前编码后再存入

//取出来,过后解码

Cookie cookie = new Cookie("username", URLEncoder.encode("张三", "UTF-8"));

cookie.setMaxAge(60);

cookie.setPath("/GZ182135day04");

response.addCookie(cookie);

request.getRequestDispatcher("/CookieChinese2").forward(request, response);

}

 

       4.完成解码操作:

protected void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

// 解决Cookie存入中文:

// 存入之前编码后再存入

// 取出来,过后解码

Cookie[] cookies = request.getCookies();

Cookie cookie = CookieUtil.getCookieByName(cookies, "username");

if (cookie != null) {

String cookieValue = cookie.getValue();

String value = URLDecoder.decode(cookieValue, "UTF-8");

System.out.println("username---》" + value);

}

}

5.这样写了过后再去访问就不再会报错了,问题成功解决!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值