你的位置:
问答吧
-> JSP
-> 问题详情
若若地问一句:jsp中session的编码方式是什么?其实是因为乱码问题才问的
最近使用session跨页面传值,可是当我这样用的时候session.setAttribute("nickname",nkname),注:nkname是汉字。然后跳转到另外一个页面取它出来的时候,就是session.getAttribute("nkname").toString(),它就会乱码成为一个个???。试过了csdn里面好多办法都不行的情况下,用了这样一个方法:Strng getFromSession=new String((String)session.getAttribute( "sessionName ").getBytes( "GBK "), "ISO-8859-1 "); 所以我怀疑,session中的编码方式是不是ISO-8859-1?还是其他的? 还请各位朋友不吝赐教哦,恕我愚钝哈........
作者: tiamoming
发布时间: 2010-09-06
实在不行建议写个过滤器
package com.filter;
import java.io.IOException;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class Filter implements javax.servlet.Filter {
public void destroy() {
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest newRequest=(HttpServletRequest)request;
String pathString=newRequest.getRequestURI(); //获取路径
if (pathString.lastIndexOf(".")>0) {
String path=pathString.substring(pathString.lastIndexOf("."),pathString.length());
if (path.equals(".css")||path.equals(".js")) { //判断是否是js或css文件
chain.doFilter(request, response);
}
else {
request.setCharacterEncoding("gbk");
response.setCharacterEncoding("gbk");
chain.doFilter(request, response);
}
}
else {
request.setCharacterEncoding("gbk");
response.setCharacterEncoding("gbk");
chain.doFilter(request, response);
}
}
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
配置webxml.txt
filter
com.filter.Filter
filter
/*
作者: HWmsdn
发布时间: 2010-09-06
我觉得应该是setAttribute的时候nkname已经是乱码了吧,因为再getAttribute应该不存在编码问题的。
作者: ChDw
发布时间: 2010-09-06
引用 2 楼 chdw 的回复:我觉得应该是setAttribute的时候nkname已经是乱码了吧,因为再getAttribute应该不存在编码问题的。
我可以确定,存进去的时候是正确的,的确是中文。因为,我试着存进去之后,在不跳转的情况下,本页又取出来,结果是正确的。问题就存在于跨页面取就出现问题。用我题目描述的方法可以解决,所以我很好奇的问了下,session的编码方式。
作者: tiamoming
发布时间: 2010-09-06
老问题,如果你用的是tomcat,设置一下配置文件,如果用的别的容器,请举一反三。
server.xml文件
HTML code
注意红色字体部分,编码根据你自己情况更改一下,比如GBK....
作者: netsgo
发布时间: 2010-09-06
晕上面的代码不能加样式
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="UTF-8" />
作者: netsgo
发布时间: 2010-09-06
我觉得应该是你另外地方setAttribute的,Session就是内存持有的对象而已,已经不会再做编码转换的
你可以写一个HttpSessionAttributeListener看看是什么地方放进去了。
作者: ChDw
发布时间: 2010-09-06
引用楼主 tiamoming 的回复:
最近使用session跨页面传值,可是当我这样用的时候session.setAttribute("nickname",nkname),注:nkname是汉字。然后跳转到另外一个页面取它出来的时候,就是session.getAttribute("nkname").toString(),它就会乱码成为一个个???。试过了csdn里面好多办法都不行的情况下,用了这样一个方法:Strng getFromS……
你用的那个Strng getFromSession=new String((String)session.getAttribute( "sessionName ").getBytes( "GBK "), "ISO-8859-1 "); 方法的原理是在网页转发时,session会把你原来页面的格式转化成字节码,你这个方法是把你转化成字节码格式的字符再从新编译成ISO的形式显示
作者: yousigai
发布时间: 2010-09-06
首先 你统一编码 在转换 就OL 那那么麻烦 乱码 问题一个原因 编码不统一 最烦的就是这问题
作者: falconkabu
发布时间: 2010-09-06