JSP中使用cookie存储中文
今天看J2EE的时候,看见书上讲到使用cookie保存信息的时,看到书上举得例子都是英文的键值对,我就想中文是不是一样呢?试了一下果然不一样。废话不多说,直接上代码:
比如说有addCookie.jsp代码如下:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>增加cookie</title>
</head>
<body>
<%
String name = request.getParameter("name");
Cookie c = new Cookie("username",name);
c.setMaxAge(3600);
response.addCookie(c);//添加cookie
%>
</body>
</html>
在地址栏中输入localhost:8080/webDemo/addCookie.jsp?name=测试名字即可完成cookie添加。
下面就该是取出cookie了,getCookie.jsp代码如下:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>增加cookie</title>
</head>
<body>
<%
Cookie[] cookies = request.getCookies();//取出cookie
for(Cookie cc:cookies)//遍历找到对应的cookie
{
if(cc.getName().equals("username"))
{
out.println(cc.getValue());
}
}
%>
</body>
</html>
但是当在地址栏中输入localhost:8080/webDemo/getCookie.jsp时发现如下报错:
之所以造成这种情况,是因为编码原因根据RFC 2109中的规定,在Cookie中只能包含ASCII的编码。
那么就只能在设置cookie时,将中文编码一下就行了。改进代码如下:
<%
String name = request.getParameter("name");
byte[] rawName = name.getBytes("ISO-8859-1");
String strName = new String(rawName,"GB2312");//得到参数的中文字符串形式
Cookie c = new Cookie("username",URLEncoder.encode(strName,"UTF-8"));
c.setMaxAge(3600);
response.addCookie(c);
%>
<%
Cookie[] cookies = request.getCookies();
for(Cookie cc:cookies)
{
if(cc.getName().equals("username"))
{
String str = URLDecoder.decode(cc.getValue(),"UTF-8");//解码
out.println(str);
}
}
%>
其他地方问题不大,就是在下面这段代码中,有人做的不一样。
byte[] rawName = name.getBytes("ISO-8859-1");
String strName = new String(rawName,"GB2312");//得到参数的中文字符串形式
Cookie c = new Cookie("username",URLEncoder.encode(strName,"UTF-8"));
我搜了很多资料,都只有一段代码,形如:Cookie c = new Cookie("username",URLEncoder.encode("孙悟空","UTF-8"));
把中文直接放在encode方法的参数位置,看起来可以直接在name=request.getParameter("name");后就调用上面的Cookie c = new Cookie("username",URLEncoder.encode(name,"UTF-8"));代码段,看起来好像没有错,但是我实践中发现会产生乱码,我用的是火狐浏览器,然后我就加了两段代码,就是:byte[] rawName = name.getBytes("ISO-8859-1");
String strName = new String(rawName,"GB2312");才没有产生乱码,具体为什么会产生这样的原因,我尚不知道,不知哪位大神可以解释一下。
JSP中使用cookie存储中文的更多相关文章
- 3、JSP中的Cookie 用于存储 web 页面的用户信息。
cookie 在平时生活中的运用 存储用户在网页上的登陆信息,包括账号和密码. 有的网站,登陆的时候,会出现一个选项,问你是否要一周内或者一个月内保持登陆状态.如果你选了,那么一周之内,都不需要再输入 ...
- Cookie存储中文报错:java.lang.IllegalArgumentException: Control character in cookie value or attribute.(转)
项目中做自动登录和保存密码时,Cookie报错Java.lang.IllegalArgumentException,上google查了下 在http://hi.baidu.com/xtxycy/blo ...
- JSP中的Cookie
如何创建Cookie 先引包: import="javax.servlet.http.Cookie" JSP是使用如下的语法格式来创建cookie的: Cookie cookie_ ...
- JSP中取COOKIE中指定值得方法【转载】
Cookie cookies[]=request.getCookies(); //读出用户硬盘上的Cookie,并将所有的Cookie放到一个cookie对象数组里面 Cookie sCookie=n ...
- cookie存储中文
写cookie Cookie chineseCookie = new Cookie( "chineseCookie ", URLEncoder. ...
- 如何在JSP中获得Cookie对象
Cookie cookies[]=request.getCookies(); //读出用户硬盘上的Cookie,并将所有的Cookie放到一个cookie对象数组里面 Cookie sCookie=n ...
- Web jsp开发学习——终极解决jsp中request和response中文乱码的问题(加个过滤器)
中文乱码真的很烦人的.而且每次都要写,可麻烦了,而且有时候写了还不一定管用,所以我们可以试试过滤器 1.每个jsp头上当然要写上utf8啦 <%@ page language="jav ...
- ie浏览器 jsp中链接参数为中文的处理
在js中,使用 encodeURIComponent(encodeURIComponent("警情抽查"))来处理参数,例如: mini.get("khxmdm" ...
- 利用JSP中的过滤器解决中文乱码问题
首先我们创建过过滤器: package com.gbx; import java.io.IOException; import javax.servlet.Filter; import javax.s ...
随机推荐
- Webform中Repeater控件--绑定嵌入C#代码四种方式
网页里面嵌入C#代码用的是<% %>,嵌入php代码<?php ?> 绑定数据的四种方式: 1.直接绑定 <%#Eval("Code") %> ...
- springdata+redis配置详解
springdata设计初衷是位简化数据类型和数据的持久化存储,它并不局限是关系型数据库还是nosql数据库,都提供了简化的数据库连接,让数据获取变得更加的简单.所有这些的实现有统一的api提供. 本 ...
- BZOJ 1856: [Scoi2010]字符串( 组合数 )
求(0,0)->(n,m)且在直线y=x下方(可以在y=x上)的方案数...同 http://www.cnblogs.com/JSZX11556/p/4908648.html --------- ...
- Qt 5.2.0 和 VS 2012集成
下载两个安装包,后面一个add-in是必需的 Qt 5.2.0 for Windows 64-bit (VS 2012, 590 MB) (Info) Visual Studio Add-in 1.2 ...
- .NET参数化Oracle查询参数
最近在做数据库移植工作(SqlServer 2008 -> Oracle 11g),遇到一些不兼容的问题,以下是一个参数化方面的区别,资料来自其他网友,在此整理了一下. public stati ...
- Microsoft Jet 数据库引擎找不到对象'Sheet1$_'。请确定对象是否存在,并正确地写出它的名称和路径
We have a CRM add-on for Importing Price Lists into CRM. For this tool, we expect the details to be ...
- QT VS检测内存泄漏
测试程序:http://download.csdn.net/detail/ajaxhe/4085447 vld-2.2.3: http://vld.codeplex.com/releases/view ...
- QStringLiteral的两篇外文解释(编译期转换成QString)
http://blog.qt.io/blog/2014/06/13/qt-weekly-13-qstringliteral/ https://woboq.com/blog/qstringliteral ...
- 转:C++中引用传递与指针传递区别
从概念上讲.指针从本质上讲就是存放变量地址的一个变量,在逻辑上是独立的,它可以被改变,包括其所指向的地址的改变和其指向的地址中所存放的数据的改变. 而引用是一个别名,它在逻辑上不是独立的,它的存在具有 ...
- poj 3295 Tautology(栈)
题目链接:http://poj.org/problem?id=3295 思路分析:判断逻辑表达式是否为永真式问题.根据该表达式的特点,逻辑词在逻辑变量前,类似于后缀表达式求值问题. 算法中使用两个栈, ...