org.springframework.beans.factory.BeanDefinitionStoreException: Line 14 in XML document from ServletContext resource [/WEB-INF/springctx-datareport.xml] is invalid; nested exception is org.xml.sax.SAXParseException: Element type "bean" must be followed by either attribute specifications, ">" or "/>".
仔細查看了一下配置文件,原來是同組的組員在寫配置文件的時候在class="...."后面多了一個引號!
這個Listener Start的問題太隱蔽,如果沒有做錯誤日志估計一直很難發現了
不過這次有了教訓,以后也有方向了
而在其它的編輯器中,默認保存的內容都是GB2312或者GBK(NOTEPAD中對應ANSI).而根據前面所說的UTF-8和GBK,GB2312等的編碼值是不同的這一點,可以知道,如果文件使用了UTF-8,那么字符編碼就必須使用UTF-8,否則編碼值的不同就可能造成亂碼。而這也就是為什么那么多的人使用了UTF-8編碼后還會產生亂碼的根本原因。(JS和JSP都是這個道理)
3、JSP,STRUTS等的中文亂碼解決方案
?????其實解決的方法只有一個:
???方法只有一種,但處理方式就多種多樣了,初學者會在JSP頁面上直接使用,而有經驗的程序員會使用過濾器。而現在所要說的方法也是過濾器。這里以統一使用UTF-8作為編碼作為例子說明。具體過程就不多說了,網上有很多教程。偷懶一點的,到TOMCAT中復制就行了。在TOMCAT的目錄下的\webapps\jsp-examples\WEB-INF\classes\filters\找到SetCharacterEncodingFilter.java 這個類,放到你的程序中并配置好映射路徑。配置好后基本上你的亂碼問題就解決了。但要映射路徑中需要注意的就是不能使用 '*'
像上面這樣配置的話(可能也是網上大多教程的做法,想當年也是害苦了我),可能你只有JSP的亂碼解決了,要解決STRUTS的亂碼需要映射 *.do 或者 servletActionName。然后在初始化參數中設置encoding的值就行了。
當然,最重要的是要記得根據前面所說的方法,改變你所使用的編輯器保存文件的編碼要與使用的字符編碼一致。
而在JSP內容中,還是使用如網上教程所說的那種技倆,在所有頁面的頁首加入:
Soft References 應用實例
下面以在基于web的應用程序中使用soft references為例,來說明Java對象引用與JVM的內存管理器進行交互的原理。
當用戶打開某一web頁時,applet代碼獲得圖片并且得到顯示。如果在代碼中同時創建了該圖片對象的soft references,那么當用戶離開該web頁時,內存管理器對圖片所分配的內存是否回收做出選擇。當用戶返回該web頁時,在applet代碼中使用SoftReference.get方法就會得到圖片才內存中是否仍存在的消息。如果在內存管理器中未創建該圖片,在web頁上會很快得到顯示;否則,applet代碼就會重新獲取。
下面是Example.java的完整源代碼。
在上面的代碼中,對象image是一個圖片對象,傳遞給一個SoftReference對象sr。其中image對象是sr的指示對象,sr中的引用域是從次引用(soft reference)到 image。
Weak References分析
對于一個穩定的對象,比如說線程類對象,當需要獲取外部數據時,在程序中應用weak references是非常理想的。如果利用引用隊列創建了某一線程的weak reference,那么當線程不再具有強獲取能力時,應用程序得到通知,根據此通知,應用程序才能執行相關數據對象的清除工作。
當內存管理器未發現strong references 和 soft references 時,我們稱對象具有弱獲取能力,即在到達該對象的路徑中至少包含一個weak reference。程序中weak references被清除一段時間后,弱獲取對象被收尾器收集。由此也可以看出,soft reference和weak reference之間的區別在于,應用soft reference時,內存管理器利用算法決定是否創建弱獲取對象,而應用weak reference時,內存管理器必須創建次獲取對象。
引用對象鏈
當到達某一對象的路徑中含有多個引用對象時,就構成了引用對象鏈。內存管理器按照由強到弱的順序處理引用對象,具體處理步驟包括:Soft references、 Weak references、Finalization、Phantom references和創建對象五個部分。
當內存管理器未發現前三種對象引用時,我們稱對象具有虛獲取能力,即在到達該對象的路徑中至少包含一個phantom reference。虛引用對象直接被收尾器收集,而不被重新創建。當內存管理器發現只有phantom references時,對象就將處于等候phantom reference狀態,應用程序向引用隊列發出通知,然后對虛引用對象調用clear()方法,將其引用域設置為null,最后對不可獲取對象執行收集清除處理任務。
通常,對象所具有的獲取能力與引用對象集合直接路徑中的最弱連接者相同。據此可以看出:
圖2(a)中,虛引用對象具有強獲取能力,其它對象均具虛獲取能力;
(b)中虛引用對象和弱引用對象均具強獲取能力,故次引用對象和對象集合具有若獲取能力;
(c)中虛引用對象、弱引用對象和次引用對象均具強獲取能力,那么對象集合則具次獲取能力。
圖2 引用對象鏈
小結
● 引用對象API是Java2平臺中的特色之一。
● 在程序中使用引用對象API不但可以在一定程度上控制內存管理器,實現內存自動管理,還可以提高程序的穩定性和安全性。
● 引用對象鏈中各個對象的獲取能力與整個鏈相關。