Struts 2并未提供自己的請求解析器,也就是說,Struts 2不會自己去處理multipart/form-data的請求,它需要調用其他上傳架構來解析二進制請求資料。但Struts 2在原有的上傳解析器基礎上做了進一步封裝,更進一步簡化了檔案上傳。
在Struts 2的struts.properties配置檔案中,我們看到了下面的配置代碼,它們主要用于配置Struts 2上傳檔案時的上傳解析器。
# 指定使用COS的檔案上傳解析器
# struts.multipart.parser=cos
# 指定使用Pell的檔案上傳解析器
# struts.multipart.parser=pell
# Struts 2預設使用Jakarta的Common-FileUpload的檔案上傳解析器
struts.multipart.parser=jakarta
Struts 2的封裝隔離了底層檔案上傳元件的差別,開發者隻要在此處配置檔案上傳所使用的解析器,就可以輕松地在不同的檔案上傳架構之間切換。
Struts 2預設使用的是Jakarta的Common-FileUpload的檔案上傳架構,是以,如果需要使用Struts 2的檔案上傳功能,則需要在Web應用中增加兩個JAR檔案,即commons-io-1.3.2.jar和commons-fileupload-1.2.1.jar,将Struts 2項目lib下的這兩個檔案複制到Web應用的WEB-INF\lib路徑下即可。
Struts 2預設使用Jakarta的Common-FileUpload的檔案上傳,那是因為它們同是Apache組織下的項目,但并不意味着隻能使用Jakarta的Common-FileUpload檔案上傳,我們一樣可以在Web應用中使用COS、Pell的檔案上傳支援。對于開發者而言,使用哪種檔案上傳支援,幾乎沒有任何差別——隻需要修改struts.multipart.parser常量,并在Web應用中增加相應上傳項目的類庫即可。
Struts 2的檔案上傳支援在原有的檔案上傳項目上做了進一步封裝,簡化了檔案上傳的代碼實作,取消了不同上傳項目上的程式設計差異。
下面将以Struts 2預設的檔案上傳支援為例,詳細介紹Struts 2檔案上傳相關方面的知識。