Posted on 2006-03-01 10:44
shaofan 閱讀(2054)
評(píng)論(5) 編輯 收藏 所屬分類:
Java
今天試著把大蝦寫的系統(tǒng)登錄模塊加到我們現(xiàn)有的模塊里來,他寫的時(shí)候因?yàn)橛行┰囼?yàn)的成分,所以沒有按照我們項(xiàng)目的配置來寫,也沒有按照我們的模塊來劃分配置,加過來以后重新配置了模塊信息,結(jié)果居然無法正常運(yùn)行。顯示錯(cuò)誤:“cannot retrieve action mapping 。廢了九牛二虎之力,都無法解決。web.xml、struts-config、模塊配置,一切看起來都無比的正常,但就是運(yùn)行不了。真搞不清楚是哪里出了問題。還以為搞不定,晚上要加班了,誰知道,踏破鐵鞋無覓處,柳暗花明又一村,在google上搜索關(guān)鍵字"action mapping 找不到",第一個(gè)鏈接居然就是問題的答案?。ㄟ€從來沒有只點(diǎn)一次就可以找到問題答案的經(jīng)驗(yàn),所以興奮無比^O^)
總的來說,問題的原因就在于,struts是在第一次收到對(duì)action的請(qǐng)求(注意:不包括jsp的請(qǐng)求)時(shí),提取這個(gè)請(qǐng)求的url的路徑信息,把相應(yīng)模塊的mapping信息設(shè)置到請(qǐng)求中去。如果在進(jìn)入一個(gè)模塊時(shí),第一次訪問的是一個(gè)jsp頁面,而在這個(gè)jsp頁面中提交到該模塊的一個(gè)action,就會(huì)出現(xiàn)找不到action mapping的情況。這就是因?yàn)椋谶M(jìn)到這個(gè)模塊時(shí),訪問的是jsp,這個(gè)模塊的任何一個(gè)action都沒有被訪問到,所以struts的ActionServlet還沒有來得及把這個(gè)模塊的mapping設(shè)置到請(qǐng)求中,自然找不到該模塊的action。
因此,這就引出一個(gè)約定,就是系統(tǒng)中盡量避免對(duì)Jsp的直接訪問,如果要訪問也要通過action來forward。雖然看起來麻煩一點(diǎn),但是安全性、健壯性都會(huì)有所提高。
關(guān)于以上提到的模塊mapping的設(shè)置原理,具體的文章在這里(不長),值得收藏:
原文鏈接:http://202.100.72.44/news/itschool/pro/pro44134.htm