文档章节

openfire如何整合spring mvc

明舞
 明舞
发布于 2014/12/23 09:47
字数 730
阅读 1942
收藏 8

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=”/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的源代码。

 


© 著作权归作者所有

共有 人打赏支持
明舞
粉丝 227
博文 424
码字总数 516555
作品 0
程序员
私信 提问
加载中

评论(10)

m
mzloverrun9527
你好,请问ContextLoaderListener是怎么加载的呢,现在这个遇到困境,请问你有解决的思路吗?
m
mzloverrun9527

引用来自“mzloverrun9527”的评论

你好,我按照你的方法配置了一下,但是在ant 项目的时候 提示无法找到DispacherServlet 类。。这个如何解决。
这个jar包应该放在哪里?我放在了插件的lib包下

引用来自“明舞”的评论

DispacherServlet是spring mvc中的,你在启动脚本中加入
你好,我继续配置好了以后,但是if(instance instanceof GenericServlet) {}里面的代码并没有执行,而且启动还报出异常,WEB-INF下面没有找到plugin-servlet.xml,但是我配置的是web-custom.xml。没有配置异常报出的xml文件,而且我看你也没有配置这个XML,请问那个XML文件是做什么的。
明舞
明舞

引用来自“mzloverrun9527”的评论

你好,我按照你的方法配置了一下,但是在ant 项目的时候 提示无法找到DispacherServlet 类。。这个如何解决。
这个jar包应该放在哪里?我放在了插件的lib包下
DispacherServlet是spring mvc中的,你在启动脚本中加入
m
mzloverrun9527
你好,我按照你的方法配置了一下,但是在ant 项目的时候 提示无法找到DispacherServlet 类。。这个如何解决。
这个jar包应该放在哪里?我放在了插件的lib包下
灵动007
灵动007
发我QQ邮箱也可以啊,现在完全没上面头绪
灵动007
灵动007

引用来自“明舞”的评论

引用来自“灵动007”的评论

你好!能把工程发我一份不?可以联系吗,1141040275我QQ谢谢了,整合spring 需要该源码吗?

sorry啊,项目已经投入公司运营状态了,属于公司代码,没法公开
demo呢?技术文档、资料,思路也行,跪求,上面是我的联系方式
明舞
明舞

引用来自“灵动007”的评论

你好!能把工程发我一份不?可以联系吗,1141040275我QQ谢谢了,整合spring 需要该源码吗?

sorry啊,项目已经投入公司运营状态了,属于公司代码,没法公开
灵动007
灵动007
你好!能把工程发我一份不?可以联系吗,1141040275我QQ谢谢了,整合spring 需要该源码吗?
明舞
明舞

引用来自“最后的旋律”的评论

你好,请问能发一下demo工程吗?我按照这样配好之后,spring的拦截器一直没有生效,请求一直被jetty拦截处理了。这里还需要再设置些什么吗?或者留个qq交流一下好吗?
您好,demo工程被我干掉了。你那有报错吗?这个方案后来我们做了很多的修改的。这个是比较简单的,后续我们就没更新了。整个openfire的方案都被抛弃了
最后的旋律
你好,请问能发一下demo工程吗?我按照这样配好之后,spring的拦截器一直没有生效,请求一直被jetty拦截处理了。这里还需要再设置些什么吗?或者留个qq交流一下好吗?
openfire插件开发整合SpringMVC openfire mybatis开发问题

@明舞 你好,想跟你请教个问题: 最近由于公司要开发openfire的插件,整合springmvc openfire mybatis的插件,之前并没有接触过openfire,然后我找到了您以前的帖子: openfire如何整合sprin...

mzloverrun9527
2016/02/02
948
2
Spring Boot干货系列: (四)开发Web应用之Thymeleaf篇

        前言   Web开发是我们平时开发中至关重要的,这里就来介绍一下Spring Boot对Web开发的支持。   正文   Spring Boot提供了spring-boot-starter-web为Web开发予以支持,s...

后端编程嘟
2017/03/13
0
0
Spring MVC和Spring Boot的理解以及比较

Spring MVC和Spring Boot的理解以及比较 Spring MVC是什么? (1)Spring MVC是Spring提供的一个强大而灵活的模块式web框架。通过Dispatcher Servlet, ModelAndView 和 View Resolver,开发web...

DemonsI
09/13
0
0
spring boot 基础问题

https://www.oschina.net/question/24913332275473 Spring Boot是一套遵循的约定大于配置的体系,简化了很多组件的使用比如datasouce、JPA、SpringMVC等等,约定好自动化的配置,就可以使用功...

ka_ko
08/25
0
0
spring boot与spring mvc的区别是什么?

spring boot与spring mvc的区别是什么? 转载:https://blog.csdn.net/u014590757/article/details/79602309 spring boot只是一个配置工具,整合工具,辅助工具. springmvc是框架,项目中实际运...

Elsa晓冰
09/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

docker部署springboot项目

安装docker 菜鸟教程 springboot项目 maven依赖 <?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001......

yimingkeji
今天
10
0
ios多个target

1.建立3个target,分别为heroone,heroone test,heroone dev;分别为正式环境,test环境,dev环境 2.注意取消掉autocreate以防止名字不对,分别以Duplicate的方式建立另外两个scheme 3.创建...

HeroHY
今天
6
0
php获取客户端IP

php获取客户端IP 首先先阅读关于IP真实性安全的文章:如何正確的取得使用者 IP? 「任何從客戶端取得的資料都是不可信任的!」 HTTP_CLIENT_IP头是有的,但未成标准,不一定服务器都实现。 ...

DrChenXX
昨天
0
0
. The valid characters are defined in RFC 7230 and RFC 问题

通过这里的回答,我们可以知道: Tomcat在 7.0.73, 8.0.39, 8.5.7 版本后,添加了对于http头的验证。 具体来说,就是添加了些规则去限制HTTP头的规范性 参考这里 具体来说: org.apache.tom...

west_coast
昨天
1
0
刷leetcode第704题-二分查找

今天双十一买的算法书到货了,路上刷到有人说的这个题,借(chao)鉴(xi)一下别人的思路,这个是C++标准库里面的经典方法,思路精巧,优雅好品味 int search(int* nums, int numsSize, in...

锟斤拷烫烫烫
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部