7.1.1 自定義DispatcherServlet配置
例如搔耕,在本章稍后的內(nèi)容中(7.2節(jié))隙袁,我們將會(huì)看到如何在Spring MVC中處理multipart請(qǐng)求和文件上傳。
如果計(jì)劃使用Servlet 3.0對(duì)multipart配置的支持弃榨,那么需要使用DispatcherServlet的registration來(lái)啟用multipart請(qǐng)求藤乙。
我們可以重載customizeRegistration()方法來(lái)設(shè)置MultipartConfigElement,如下所示:
-
使用customizeRegistration()方法中的ServletRegistration.Dynamic完成多項(xiàng)任務(wù)惭墓。
方法 功能
在前 面的樣例中坛梁,我們?cè)O(shè)置了對(duì)multipart的支持,將上傳文件的臨時(shí)存儲(chǔ) 目錄設(shè)置在“/tmp/spittr/uploads”中腊凶。
7.1.2 添加其他的Servlet和Filter
按照AbstractAnnotationConfigDispatcherServletInitializer的定義划咐,它會(huì)創(chuàng)建DispatcherServlet和ContextLoaderListener。但是钧萍,如果你想注冊(cè)其他的Servlet褐缠、Filter或Listener的話,那該怎么辦呢风瘦?
基于Java的初始化器(initializer)的一個(gè)好處就在于我們可以定義任意數(shù)量的初始化器類(lèi)队魏。因此,如果我們想往Web容器中注冊(cè)其他組件的話万搔,只需創(chuàng)建一個(gè)新的初始化器就可以了胡桨。最簡(jiǎn)單的方式就是實(shí)現(xiàn)Spring的WebApplicationInitializer接口。
例如瞬雹,如下的程序清單展現(xiàn)了如何創(chuàng)建WebApplicationInitializer實(shí)現(xiàn)并注冊(cè)一個(gè)Servlet:
如何使用WebApplicationInitializer接口來(lái)注冊(cè)其他的Servlet昧谊、Filter或Listener。您強(qiáng)調(diào)了可以創(chuàng)建任意數(shù)量的初始化器類(lèi)酗捌,并舉例說(shuō)明了如何創(chuàng)建一個(gè)新的初始化器來(lái)注冊(cè)一個(gè)Servlet呢诬。
程序清單7.1 通過(guò)實(shí)現(xiàn)WebApplicationInitializer來(lái)注冊(cè)Servlet
程序清單7. 1是相當(dāng)基礎(chǔ)的Servlet注冊(cè)初始化器類(lèi)。它注冊(cè)了一個(gè) Servlet并將其映射到一個(gè)路徑上胖缤。我們也可以通過(guò)這種方式來(lái)手動(dòng)注 冊(cè)DispatcherServlet尚镰。 (但這并沒(méi)有必要,因?yàn)锳bstractAnnotationConfigDispatcherServletInitiali 沒(méi)用太多代碼就將這項(xiàng)任務(wù)完成得很漂亮哪廓。)
類(lèi)似地狗唉,我們還可以創(chuàng)建新的WebApplicationInitializer實(shí)現(xiàn) 來(lái)注冊(cè)Listener和Filter 。例如撩独,如下的程序清單展現(xiàn)了如何注冊(cè)Filter敞曹。
程序清單7.2 注冊(cè)Filter的WebApplicationInitializer
- 使用WebApplicationInitializer在支持Servlet 3.0的容器中注冊(cè)Servlet账月、Filter和Listener。
- 在AbstractAnnotationConfigDispatcherServletInitializer中澳迫,有一種快捷方式可以只注冊(cè)Filter局齿,并且該Filter只會(huì)映射到DispatcherServlet上。
注冊(cè)Filter并將其映射到DispatcherServlet的方法橄登。
通過(guò)重載AbstractAnnotationConfigDispatcherServletInitializer的getServletFilters()方法實(shí)現(xiàn)注冊(cè)Filter的示例代碼抓歼。
AbstractAnnotationConfigDispatcherServletInitializer中注冊(cè)Filter并將其映射到DispatcherServlet。您強(qiáng)調(diào)了重載getServletFilters()方法拢锹,并舉例說(shuō)明了如何注冊(cè)一個(gè)CharacterEncodingFilter谣妻。
7.1.3 在web.xml中聲明DispatcherServlet
在典型的Spring MVC應(yīng)用中,我們會(huì)需要DispatcherServlet和 Context-Loader
Listener卒稳。
AbstractAnnotationConfigDispatcherServlet 會(huì)自動(dòng)注冊(cè)它們蹋半,但是如果需要在web.xml中注冊(cè)的話,那就需要我 們自己來(lái)完成這項(xiàng)任務(wù)了充坑。
如下是一個(gè)基本的web.xml文件减江,它按照傳統(tǒng)的方式搭建了 DispatcherServlet和ContextLoaderListener。
程序清單7.3 在web.xml中搭建Spring MVC
例如捻爷,如下的配置中辈灼,DispatcherServlet會(huì)從“/WEB-INF/spring/appServlet/servlet-context.xml”加載它的bean:
程序清單7.4 設(shè)置web.xml使用基于Java的配置
現(xiàn)在我們已經(jīng)看到了如何以多種不同的方式來(lái)搭建Spring MVC,那么 接下來(lái)我們會(huì)看一下如何使用Spring MVC來(lái)處理文件上傳也榄。
本文由博客一文多發(fā)平臺(tái) OpenWrite 發(fā)布巡莹!