java 板


LINE

※ 引述《JeremyJoung (J.J.)》之铭言: : 状况描述 : 於JSP中 以<%! %> 宣告CLASS Cart : 相同页面内运作正常也可以删改 : 但是 当我以session+HashMap 保存Cart并於其他页面载入Cart时发生 : java.lang.ClassCastException: : org.apache.jsp.login_jsp$Cart cannot be cast to org.apache.jsp.index_jsp$Cart : 问题码是 : Cart c=cartL2.get(pdt); : 从map中叫出来时就出错了 : cartL2 是LinkedHashMap<String, Cart>(); : 状况看起来是 login_jsp$Cart 不可以在index中使用 : 就算是使用(Cart)强转也无效 : 请问 为什麽会有这样的状况? 我尽量长话短说。 1. 可以的话,请不要在JSP里宣告class。 2. 如果你在JSP里宣告class,请记得这个class(注意,是class,不是instance)只能在 该JSP当中使用。 3. 更正确的讲法,甚至下一次request进到同一页,你从session里把东西取出来,是 不是还能用都不保证。 4. 以上,最保险的in JSP class用法,就是只在那个request的当下,在那页里面用, 或是不要用。 原因: JSP会被JSP Compiler(如果你用Tomcat,那个Jasper Engine就是了。) compile 成 Servlet,然後跑在Container上,你在<% %>里宣告的class会成为一个inner class。 好,现在有几个问题: 1. 请问JSP是什麽时间点被Compile 成Servlet? 答案是: 看设定、看Container,有时是启动时会Compile,有时是request来才Compile 2. 请问Container如果突然觉得JSP应该重新Compile 一次,我们能保证他Compile 出 来的『新的』JspServlet,仍然跟旧的名称一样、记忆体结构一样吗? 答案是: 不能保证,JSP Engine高兴做啥就做啥,有些高级Java Web Server,为了支援线上 动态编辑JSP,然後直接动态挂载执行,会把改过的JSP Compile 成不同的servlet Name但是吃同样的servlet path,这是因为在多绪执行环境里,可能某些User 已经在存取使用该JSP前一版的servlet class instance了,所以不可以直接下线 ,得要先把新版的准备好,把流量导过去後才把旧的版本从classLoader里卸载。 那如果你在前一版的时候create 了一个Cart存Session,然後好死不死,user前脚 刚刚结束一个request,Container就把第二版给上了,结果user再发一个request 的时候连到的是第二版JSP,className都不一样了。 而你的程式码这时想从session里把Cart拿出来,想要cast成Cart...糗了。 my_JspServlet.Cart跟my_JspServlet2.Cart可是不同的class。 事实上,你Session里的cart物件,很有可能再也找不到正确的class可以处理了。 (如果session是被Serialize到disc再被load回来,那此时会喷error,甚至根本就 serialize 不出去) : 是JSP间禁止引用不同页面间所宣告的物件吗? : 这问题该如何回避? : 感谢解答. ...好,我的废话还是太多了,Anyway,如果上面的有任何地方你看不懂,你就没有资格 在JSP里宣告class,你用了会动,很可能只是运气好没碰上而已。 你不懂却用了但没事,只是沙滩上的城堡碰上退潮而已,该来的还是会来的。 请乖乖的宣告一个Cart.java在你的project src里,compile它,然後用它。 -- 生命起源於简单的化学反应,灵魂是脑神经上头的火花。 掌纹没有含意,不过是具有止滑功用的纹路。 而神不存在,死去的人们只是等待细菌分解的腐肉而已。 --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 123.193.164.59
1F:推 PsMonkey:长话短说是违反版规的 [指] [完全误] 08/29 12:08







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Soft_Job站内搜寻

TOP