您的位置:首页 > Web前端 > JavaScript

三种方式--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)}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  web 乱码 cookie