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燈, 水草

請輸入看板名稱,例如:iOS站內搜尋

TOP