三种方式--JS/JSP/EL 解决在JSP中获取cookie中文乱码的问题
2017-12-26 21:51
731 查看
cookie接收中文乱码的原因:默认的使用IOS-8859-1的编码存储数据,不支持中文,存储中文时报错:Control character in cookie value or attribute
乱码的原因要么编码不支持,要么就是存储端解码和接收端编码使用的编码集不一样.
第一步:先解决cookie存入时不支持中文的乱码报错问题
cookie(String name,URLEncode("String value","UTF-8"));存储前先使用UTF-8解码
第二步解决接收端的乱码问题:保证存储和接收编码集一致
URLDecoder.decode(cookies[i].getValue(), "UTF-8"),接收的数据用UTF-8编码
//上述两步可以用于解决过滤器中的自动登录问题,将用户名和密码存储到cookie中,通过过滤器接收判断实现自动 登录
如果在JSP中接收cookie的值如何解码(可以用于记录用户名的问题)
提供两种方式:
1.使用java代码实现
<%
Cookie[] cookies = request.getCookies();
String value="";
for(int i=0;cookies!=null&&i<cookies.length;i++){
if("remname".equals(cookies[i].getName())){
value=URLDecoder.decode(cookies[i].getValue(), "UTF-8");
}
}
%>
2.使用JS代码实现
window.onload=function(){
var remember = document.getElementById("remember");//获取对象
var username = decodeURIComponent("${cookie.remname.value}");//如果为空,使用解码后为空字符串
if(!username.length==0){
remember.value=username;
}
};
3.使用自定义的EL方法进行解码
①自定义一个工具类,实现需要的功能
package mytag;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
public class ElTag {
public static String urlDecode(String value){
try {
value= URLDecoder.decode(value, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return value;
}
}
②创建一个对应的标签文件TDL文件,放在WEB-INF下
<?xml version="1.0" encoding="GBK"?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
<!-- 定义函数版本 -->
<tlib-version>1.0</tlib-version>
<!-- 定义函数名称 这个是随意的,但是最好和调用函数时定义一致-->
<short-name>el</short-name>
<!-- 定义第一个函数 -->
<!-- 上面基本是固定的格式,下面也是通用格式,根据自己需求更改内容-->
<function>
<!-- 定义第一个函数:reverse -->
<name>urlDecode</name>
<!-- 定义函数处理类 写类的全路径 -->
<function-class>mytag.ElTag</function-class>
<!-- 定义函数的对应方法 -->
<function-signature>
java.lang.String urlDecode(java.lang.String)
</function-signature>
</function>
</taglib>
③.在web.xml中配置该TDL的导入路径
<jsp-config>
<taglib>
<!-- 配置标签的引用地址 JSP页面中引用时使用-->
<taglib-uri>/eltag</taglib-uri>
<!-- 配置标签的TLD文件地址 -->
<taglib-location>/WEB-INF/ElTag.tld</taglib-location>
</taglib>
</jsp-config>
引入方式: <%@ taglib uri="/eltag" prefix="el" %>
调用方式: ${el:urlDecode(cookie.username.value)}
乱码的原因要么编码不支持,要么就是存储端解码和接收端编码使用的编码集不一样.
第一步:先解决cookie存入时不支持中文的乱码报错问题
cookie(String name,URLEncode("String value","UTF-8"));存储前先使用UTF-8解码
第二步解决接收端的乱码问题:保证存储和接收编码集一致
URLDecoder.decode(cookies[i].getValue(), "UTF-8"),接收的数据用UTF-8编码
//上述两步可以用于解决过滤器中的自动登录问题,将用户名和密码存储到cookie中,通过过滤器接收判断实现自动 登录
如果在JSP中接收cookie的值如何解码(可以用于记录用户名的问题)
提供两种方式:
1.使用java代码实现
<%
Cookie[] cookies = request.getCookies();
String value="";
for(int i=0;cookies!=null&&i<cookies.length;i++){
if("remname".equals(cookies[i].getName())){
value=URLDecoder.decode(cookies[i].getValue(), "UTF-8");
}
}
%>
2.使用JS代码实现
window.onload=function(){
var remember = document.getElementById("remember");//获取对象
var username = decodeURIComponent("${cookie.remname.value}");//如果为空,使用解码后为空字符串
if(!username.length==0){
remember.value=username;
}
};
3.使用自定义的EL方法进行解码
①自定义一个工具类,实现需要的功能
package mytag;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
public class ElTag {
public static String urlDecode(String value){
try {
value= URLDecoder.decode(value, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return value;
}
}
②创建一个对应的标签文件TDL文件,放在WEB-INF下
<?xml version="1.0" encoding="GBK"?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
<!-- 定义函数版本 -->
<tlib-version>1.0</tlib-version>
<!-- 定义函数名称 这个是随意的,但是最好和调用函数时定义一致-->
<short-name>el</short-name>
<!-- 定义第一个函数 -->
<!-- 上面基本是固定的格式,下面也是通用格式,根据自己需求更改内容-->
<function>
<!-- 定义第一个函数:reverse -->
<name>urlDecode</name>
<!-- 定义函数处理类 写类的全路径 -->
<function-class>mytag.ElTag</function-class>
<!-- 定义函数的对应方法 -->
<function-signature>
java.lang.String urlDecode(java.lang.String)
</function-signature>
</function>
</taglib>
③.在web.xml中配置该TDL的导入路径
<jsp-config>
<taglib>
<!-- 配置标签的引用地址 JSP页面中引用时使用-->
<taglib-uri>/eltag</taglib-uri>
<!-- 配置标签的TLD文件地址 -->
<taglib-location>/WEB-INF/ElTag.tld</taglib-location>
</taglib>
</jsp-config>
引入方式: <%@ taglib uri="/eltag" prefix="el" %>
调用方式: ${el:urlDecode(cookie.username.value)}
相关文章推荐
- php、asp.net关于后台设置的cookie前台JS获取时出现中文乱码问题解决
- jsp获取JavaScript生成的中文cookie出现乱码问题解决方法
- js传中文参数controller里获取参数乱码问题解决方法
- 解决js存储中文cookie乱码问题
- jsp get方式请求参数中包含中文乱码问题解决
- js生成的cookie由asp.net读取的时候中文乱码问题的解决
- JSP中,AJAX使用POST方式提交中文乱码问题解决
- 解决jsp中获取url传参中文乱码问题
- http协议4---GET方式和POST方式获取表单数据举例3(统一方式获取,解决中文乱码问题)
- JSP中,AJAX使用POST方式提交中文乱码问题解决
- java中解决从JSP页面获取中文乱码的问题
- 在jsp中,获取页面中中文输入的值乱码问题解决。修改tomcat的编码问题
- JS通过get、post向jsp传递中文出现乱码的问题的解决
- js读写cookie方式以及中文乱码问题
- 解决js向jsp传中文出现乱码的问题(对弹出窗体也有效)
- 解决以GET方式获取中文时乱码问题
- 彻底解决jsp中文乱码问题(eclips 添加中文编码方式gb2312).
- js中,怎么解决cookie里面中文乱码问题
- 解决jsp中存入中文值cookie乱码问题
- js获取cookie乱码问题的解决办法……