天天看點

面試疑難點解析:開發工具及架構(九)

Struts問題彙總

所有的開源架構裡面必然包含有各個公司自己的一些程式代碼,或者是與其它一些開發架構整合的程式代碼,對于這些代碼,如果要是有時間,可以直接通過官網下載下傳源代碼目錄,這個目錄一般情況下都比較小(10M左右),如果沒有源代碼,那麼最簡單的做法就是直接利用Maven進行下載下傳。

1.如果要去研究源代碼,或者看某個程式的具體實作,簡單的依靠一個開發包根本不可能,除非下載下傳源代碼程式包,裡面許多程式類的關系大部分都不需要處理,要處理的隻是需要開發的部分。例如:開發的是攔截器、Action、轉換器等等,在Struts裡對于這些操作提供有一系列的支援,像自動進行參數指派就屬于攔截器的範疇。在整個課程裡針對開發架構,尤其是MVC開發架構已經給出了反射的分析過程,隻需要掌握DispatcherServlet程式類,那麼所有的MVC基本核心原理就明确了:線程處理、請求參數自動指派(攔截器)、自動轉換。所有的開發架構的本質就是反射處理操作。

2.Struts攔截器,在攔截器裡可以設定屬性,還需要在struts.xml之中進行配置,在進行Struts配置檔案編寫時還需要使用一個繼承關系(繼承一些公共的配置項);

3.Struts2.x上傳使用的是FileUpload處理操作,而這個處理在JavaWEB開發實戰經典中講解過,其核心的特點是可以接受原始的檔案名稱以及操作類型,對于接收操作來講,官方文檔已經給出了其接收的類型,這個是由官方定義好的,如果有一天你自己開發的架構可以盛行,你這些規則由你自己來定,如果你學習過反射機制,深入了解了DispatcherServlet設計,那就可以了解為什麼有這樣的要求;

4.Struts2.x最大的敗筆在于:大量的setter、getter以及對象的執行個體化處理機制,而這個問題之是以會要求編寫主要也是在DispatcherServlet程式類中已經給了明确的說明,依然是基于反射的處理操作;

5.Struts2.x裡的轉換處理操作本身是有Bug存在的,如果在預設情況下接受的資料類型是Int,但是傳遞了String,這個時候肯定無法正常接受,因為會産生NumberFormatException異常,原因在講解DispatcherServlet的時候已經分析過了,因為它的原理是根據所有的參數名稱以及對應的屬性名稱;

6.Struts2.x裡預設支援EL,在Struts2.x最初的時代是沒有EL的,它提供了一種與EL類似的解決方案:OGNL(很麻煩,一般不建議再使用,需要追溯到2005年左右);

7.對于數組的接受處理操作本質上是利用了request.getParameterValues(),這個處理操作在進行接收的時候可以将接收到的資料以數組的形式出現或者以List集合的形式出現,因為有參數名稱,而且參數名稱和屬性名稱又是一樣的,那麼就可以根據參數名稱擷取屬性類型,如果發現屬性類型是一個數組,則根據數組的形式來進行接收處理,依然采用了反射機制,DispatcherServlet也已經有了明确的說明;

8.國際化的本質在于ResourceBundle,它需要一個資源名稱,例如:Messages.properties、Message_zh_CN.properties,這裡面Message就屬于資源名稱,而後面那些國際化标記是通過local實作的指派。裡面設定的占位符是通過MessageFormat類完成處理的,它是按照“{0}”、“{1}”這樣的順序進行設定;

對于Struts而言需要掌握的部分在Java基礎、MVC設計思想、反射應用的結合體上。

更多專業知識,面試技巧就在面試一點通,持續更新中……

感謝浏覽~

本内容來源于

阿裡雲大學-Java面試技巧