gzyueqian
13352868059

怎么学习Java Web?先了解Java Web学习中Cookie存储中文问题

更新时间: 2018-12-19 14:10:20来源: 粤嵌教育浏览量:4327

  怎么学习Java Web?今天粤嵌要为大家讲的是有关Cookie存储中文问题。很多人在学习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.这样写了过后再去访问就不再会报错了,问题成功解决!!

  以上就是有关怎么学习Java Web中的一个小问题。当前Java应用范围越来越广,Java工程师需要提高自身技术能力,从而为自己赢得更多的机会。因此进行专业化的Java学习极为重要,粤嵌培训机构在JAVA领域有十多年的教学经验,课程体系结合真实大型项目,让学员在实战中掌握JAVA干货技能。


免费预约试听课