openfire插件开发中,servlet路径请求无响应的问题
2013-03-20 15:20
561 查看
ok,最近在做openfire的项目,项目要求模仿userservice做一个管理用户和代理发送信息的插件,然后我就直接改userservice的代码了。。。结构和配置如下:
web-custom.xml配置如下
可是我使用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路径都转换为小写
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路径都转换为小写
相关文章推荐
- sp&Servlet 重定向、请求转发与绝对路径的问题
- Servlet之重定向、配置访问路径、处理多个请求、生命周期、config和context、层次结构、线程安全问题
- openfire_插件开发-jsp/servlet
- openfire servlet插件开发
- Jsp&Servlet 重定向、请求转发与绝对路径的问题
- openfire插件 servlet开发
- Servlet开发-线程安全,路径问题,利用类装载器获取资源,大文件搬运,I/O流,servlet的转发
- 微信开发学习日记(八):7步看懂weiphp插件机制,核心目标是响应微信请求
- servlet响应多个请求——servlet采用单实例多线程模式开发的
- 微信开发学习日记(八):7步看懂weiphp插件机制,核心目标是响应微信请求
- Servlet请求路径的问题:
- HttpServletResponse响应头与HttpServletRequest请求头及编码问题
- iOS开发网络篇 一一 请求路径(URL)中文转码问题
- Openfire 自定义Servlet插件访问Url登录拦截问题(源码方式)
- 微信开发学习日记(八):7步看懂weiphp插件机制,核心目标是响应微信请求
- openfire开发(三)自定义servlet无法访问的问题
- openfire插件开发-Servlet插件
- servlet中的请求转发和重定向的路径问题
- iOS开发工具-如何使用网络封包分析工具Charles,通过配置proxy对http、https、tcp、udp 等协议的请求响应过程交互信息进行分析、判断、解决我们移动开发中的遇到的各种实际问题。
- openfire中开发带servlet的插件并实现免认证访问