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

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路径都转换为小写

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值