当前位置: 技术问答>java相关
一个比较复杂,巨难的问题
来源: 互联网 发布时间:2015-02-16
本文导语: 环境:tomcat 问题描述:Servlet //先自定义一个类FileHolder //在Servlet中得到Session HttpSession hsession = req.getSession(true); //定义Hashtable Hashtable Files=new Hashtable(); if (hsession.getAttribute("Attach")==null) { }else{ Files=(Ha...
环境:tomcat
问题描述:Servlet
//先自定义一个类FileHolder
//在Servlet中得到Session
HttpSession hsession = req.getSession(true);
//定义Hashtable
Hashtable Files=new Hashtable();
if (hsession.getAttribute("Attach")==null) {
}else{
Files=(Hashtable)hsession.getAttribute("Attach") ;
}
//将一个FileHolder对象放入Hashtable
FileHolder file=new FileHolder();
Files.put("path",file);
//将Files放入Session
hsession.setAttribute("AAA",Files);
情况1
在本页
Hashtable File=new Hashtable();
File=(Hashtable) hsession.getAttribute("Attach") ;
Enumeration UpFile=File.keys() ;
while(UpFile.hasMoreElements())
{String str=(String)UpFile.nextElement();
FileHolder t=(FileHolder)File.get(str) ;
}
正常
情况2
在其他页面
Hashtable File=new Hashtable();
File=(Hashtable) hsession.getAttribute("Attach") ;
Enumeration UpFile=File.keys() ;
while(UpFile.hasMoreElements())
{String str=(String)UpFile.nextElement();
FileHolder t=(FileHolder)File.get(str) ;//抛出异常java.lang.ClassCastException: FileHolder
}
Hashtable当中的对象确实存在,可是我无法将他强制转换,而在统一页面就不存在这个问题
那位高手能够分析并解决?
问题描述:Servlet
//先自定义一个类FileHolder
//在Servlet中得到Session
HttpSession hsession = req.getSession(true);
//定义Hashtable
Hashtable Files=new Hashtable();
if (hsession.getAttribute("Attach")==null) {
}else{
Files=(Hashtable)hsession.getAttribute("Attach") ;
}
//将一个FileHolder对象放入Hashtable
FileHolder file=new FileHolder();
Files.put("path",file);
//将Files放入Session
hsession.setAttribute("AAA",Files);
情况1
在本页
Hashtable File=new Hashtable();
File=(Hashtable) hsession.getAttribute("Attach") ;
Enumeration UpFile=File.keys() ;
while(UpFile.hasMoreElements())
{String str=(String)UpFile.nextElement();
FileHolder t=(FileHolder)File.get(str) ;
}
正常
情况2
在其他页面
Hashtable File=new Hashtable();
File=(Hashtable) hsession.getAttribute("Attach") ;
Enumeration UpFile=File.keys() ;
while(UpFile.hasMoreElements())
{String str=(String)UpFile.nextElement();
FileHolder t=(FileHolder)File.get(str) ;//抛出异常java.lang.ClassCastException: FileHolder
}
Hashtable当中的对象确实存在,可是我无法将他强制转换,而在统一页面就不存在这个问题
那位高手能够分析并解决?
|
你是不是import fileholder
|
File.get(str).getClass().getName()看看是什么对象
|
是否可能是ClaaaLoader(CL)的问题?(只是猜测)是否同一个.class被不同的CL
装入了?
类似的问题在Servlet讨论组上讨论过:当时的情况是:放进hashTable
的FileHolder Class Object,和取出时用来cast那个FileHolder Class Object,
是被不同的CL装入的,即使在同一个JVM内,被不同的CL装入的Class被认为是
不同的Class(即使他们是来自同一个”静态.class文件")...好象是这样。。。
建议试一下。。。
建议用getClass().getClassLoader().hashCode()看看,是不是一样?
装入了?
类似的问题在Servlet讨论组上讨论过:当时的情况是:放进hashTable
的FileHolder Class Object,和取出时用来cast那个FileHolder Class Object,
是被不同的CL装入的,即使在同一个JVM内,被不同的CL装入的Class被认为是
不同的Class(即使他们是来自同一个”静态.class文件")...好象是这样。。。
建议试一下。。。
建议用getClass().getClassLoader().hashCode()看看,是不是一样?
|
本页和其他页面?
概念不清!
概念不清!
|
你是不是在两处定义了FileHolder类?
|
检查一下两处是否使用同一个 FileHolder 类