openfire如何整合spring mvc

Openfireweb服務器使用的是jettyjetty啓動的類是AdminConsolePlugin,至於該類是什麼時候調用的就再也不贅述。web

Openfire整合spring MVC的關鍵點在於你是在什麼時候初始化DispatcherServlet。若是你要把spring mvc整合在openfire項目中那麼直接配在openfireweb.xml就好了,可是若是你是想把它配置在一個插件中,那麼下面的配置過程可能就會對你有那麼一點幫助。所須要用的jar包在網上去下載。spring

 

1)建立openfire插件項目,網上有大把的例子。服務器

2)配置web-custom.xml,注意contextConfigLocation的路徑地址,根據你本身路徑更改。mvc

3)spring-actions.xml配置,須要掃描的包路徑根據你本身的路徑更改。app

4)Action類,spring mvcaction註解類怎麼寫就不囉嗦了,這裏須要注意的一點就是,@RequestMapping(value=」/eraplugins/」)這裏必定要加上你的插件名路徑,否則spring mvc找不到這個mappingui

 

5)到此插件這塊就差很少配置好了,而後build出來先放一邊,接下來修改openfire這邊的一些東西。spa

6)找到PluginServlet類的registerServlets方法,添加參數PluginClassLoader pluginLoader,添加以後PluginManager類會報錯,在報錯的地方把pluginLoader丟進去。hibernate

7)回到PluginServlet類的registerServlets方法,找到Object instance=servletClass.nerInstance()這一步。插件

添加這麼一段代碼server

此處的主要目的是,openfire註冊插件時自己沒有對<init-param>作解析,這裏本身添加,固然只針對DispatcherServlet

8)作完上面的步驟以後再向下走一行,找到if(instance instanceof GenericServlet) { 這一步。按照圖中的代碼添加一段代碼。

 

到此openfire插件+spring mvc的配置也就完成了,至於如何整合hibernatespring容器暫時只有個頭緒,尚未去驗證過。

 

Spring mvc的配置主要就是一個DispatcherServlet類,該類會掃描加載全部Controller,其餘的serviceentity等等則是由ContextLoaderListene操做的,因此若是想把hibernate或者spring容器等等配置進插件,大概就要在ContextLoaderListene上面作文章了。

 

再提點openfire上面的東西,openfire涉及到不少的動態加載,好比plugin,因此從我的感受上面來講openfire中有不少不一樣的classLoader,加載啓動openfire服務器的是Thread.currentThread().getContextClassLoader();這個ClassLoaderserverStarter中已經變成JiveClassLoader (openfier自定義的一個)

這個ClassLoader暫且咱們就當作一條主線的ClassLoader,而後pluginClassLoaderpluginLoader = new PluginClassLoader();加載jetty的時候new 一個,加載你寫的插件再new一個。而初始化DispatcherServlet的時候加載配置文件的ClassLoader獲取的是Thread.currentThread().getContextClassLoader();因此這裏就能夠看出上面改pluginServlet起到的做用了。至於具體的過程就再也不囉嗦了,能夠去看看openfiredPluginManagerPluginServlet 這兩個類,另外再去跟一跟DispatcherServlet的源代碼。

相關文章
相關標籤/搜索