您的位置:首页 > 运维架构

openfire插件开发中,servlet路径请求无响应的问题

2013-03-20 15:20 561 查看
ok,最近在做openfire的项目,项目要求模仿userservice做一个管理用户和代理发送信息的插件,然后我就直接改userservice的代码了。。。结构和配置如下:

web-custom.xml配置如下

<?xml version='1.0' encoding='ISO-8859-1'?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<!-- Servlets -->
<servlet>
<servlet-name>userServiceServlet</servlet-name>
<servlet-class>com.kingray.plugin.servlet.UserServiceServlet</servlet-class>
</servlet>
<!--
-->
<servlet>
<servlet-name>messageServiceServlet</servlet-name>
<servlet-class>com.kingray.plugin.servlet.MessageServiceServlet</servlet-class>
</servlet>
<!-- Servlet mappings -->
<servlet-mapping>
<servlet-name>userServiceServlet</servlet-name>
<url-pattern>/userService</url-pattern>
</servlet-mapping>
<!--
-->
<servlet-mapping>
<servlet-name>messageServiceServlet</servlet-name>
<url-pattern>/messageService</url-pattern>
</servlet-mapping>
</web-app>


可是我使用http://127.0.0.1:9090/plugins/kingrayplugin/messageService来访问却提示我无响应!我直接无语了啊,明明是按照官方的插件改的为何会错呢!好吧,我只能一个一个文件的比对了,可是,各种情况都试过了啊!

在网上找了各种方法,都不适用,最后没办法了,只能通过调试openfire来找原因了。

在openfire的src/web/WEB-INF/web.xml文件内找到该类,看字面就知道是插件servlet的处理

好吧,跟进去看看,PluginServlet.java中找到一个service方法,应该就是这个方法来处理servlet类型的,打印试试~

然后第二个if写着判断servlet请求,我们再跟进去看看

然后再编译openfire并测试,再看看输出~

仔细看看2038~2040行,明显可以看到keyset中是按照custom-web.xml中的配置添加的(区分大小写),可是我们访问的路径都被转换成了小写!!没想到openfire的开发人员竟然这么不细心啊~ok,解决方案就出来了:

1. 通过修改registerServlets方法中的 servlets.put(pluginName + url, (GenericServlet)instance);  修改为  servlets.put((pluginName + url).toLowerCase(), (GenericServlet)instance);

2. 给自己插件的custom-web.xml的每个servlet路径都转换为小写
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐