首页 > 代码库 > openfire如何整合spring mvc

openfire如何整合spring mvc

Openfireweb服务器使用的是jettyjetty启动的类是AdminConsolePlugin,至于该类是何时调用的就不再赘述。

Openfire整合spring MVC的关键点在于你是在何时初始化DispatcherServlet。如果你要把spring mvc整合在openfire项目中那么直接配在openfireweb.xml就行了,但是如果你是想把它配置在一个插件中,那么下面的配置过程可能就会对你有那么一点帮助。所需要用的jar包在网上去下载。

 

1)创建openfire插件项目,网上有大把的例子。

技术分享

2)配置web-custom.xml,注意contextConfigLocation的路径地址,根据你自己路径更改。

技术分享

3)spring-actions.xml配置,需要扫描的包路径根据你自己的路径更改。

技术分享

4)Action类,spring mvcaction注解类怎么写就不啰嗦了,这里需要注意的一点就是,@RequestMapping(value=http://www.mamicode.com/”/eraplugins/”)这里一定要加上你的插件名路径,不然spring mvc找不到这个mapping

技术分享

 

5)到此插件这块就差不多配置好了,然后build出来先放一边,接下来修改openfire这边的一些东西。

6)找到PluginServlet类的registerServlets方法,添加参数PluginClassLoader pluginLoader,添加之后PluginManager类会报错,在报错的地方把pluginLoader丢进去。

技术分享

技术分享

7)回到PluginServlet类的registerServlets方法,找到Object instance=servletClass.nerInstance()这一步。

技术分享

添加这么一段代码

技术分享

此处的主要目的是,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的源代码。

 


openfire如何整合spring mvc