roller扩展开发经验小结之xmlrpc
去年10月为了满足一个客户的需求,让我开发一个教学博客系统出来,当时考虑节约成本就使用了一个比较优秀的开源博客平台来做二次开发。这个开源平台就是 roller,是apache的一个项目,能收录在apache下面说明还是有两把刷子的,matrix的部落隔就是直接使用的roller,而且看到确切消息说网易的博客平台也是基于roller进行开发的。
roller地址:http://roller.apache.org/
现在教学博客平台已近开发完成投入使用了,而在这个过程中发现了roller确实有很多地方值得一个jee开发人员借鉴的地方,所以今天开始打算把学到的这些经验进行一下总结了。好久没写blog了,前段时间确实太忙了,事情太多了。现在打算每天挤点时间把这些经验都记录下来,不然我怕日子久了我都忘记了。
首先先讲的是xmlrpc,rpc的全称是Remote Procedure Call,实际上就是为了让客户端可以轻松的对服务端的一些方法啊,过程进行调用。xmlrpc其实是一个使用xml来实现rpc的规范,使用的传输协议还是我们最熟悉的http,不同的是传输的格式是使用xml的格式来封装数据的,而不是使用html了。基于这个规范呢其实是有多种实现的,由php的,有Python的。在这里我要介绍的是roller中所使用的一个实现,依然是apache下的一个项目Apache XML-RPC:http://ws.apache.org/xmlrpc/。
在roller中使用的是xmlrpc的服务段,所以下面我先介绍服务端和客户端的设置以及调用方法
1、当然是把Apache XML-RPC的包引入到服务端和客户段
客户端引入:xmlrpc-common.jar xmlrpc-client.jar
服务端引入:xmlrpc-common.jar xmlrpc-server.jar
2、使用java的实现当然要有一个servlet了,
先介绍客户端:遵循http协议,客户端针对一个url发送请求
下面是相关代码
import org.apache.xmlrpc.XmlRpcException;
import org.apache.xmlrpc.client.XmlRpcClient;
import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;
public class RpcClient {
public static void main(String[] args) throws Exception {
XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();
XmlRpcClient client = new XmlRpcClient();
try {
config.setServerURL(new URL("http://127.0.0.1:8088/roller-services/xmlrpc"));
} catch (MalformedURLException e) {
e.printStackTrace();
}
config.setBasicUserName("user");
config.setBasicPassword("pwd");
config.setEnabledForExtensions(true);
config.setConnectionTimeout(60 * 1000);
config.setReplyTimeout(60 * 1000);
// set configuration
client.setConfig(config);
}
}
再介绍服务端:服务端自然要有一个servlet来接受这个请求了
在web.xml中配置servlet
<!--XmlRpc servlet-->
<servlet>
<servlet-name>XmlRpcServlet</servlet-name>
<servlet-class>org.apache.xmlrpc.webserver.XmlRpcServlet</servlet-class>
<init-param>
<param-name>enabledForExtensions</param-name>
<param-value>true</param-value>
<description>Sets, whether the servlet supports vendor extensions for XML-RPC.</description>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>XmlRpcServlet</servlet-name>
<url-pattern>/roller-services/xmlrpc</url-pattern>
</servlet-mapping>
这里的配置我使用的是默认的servlet,当然你也可以使用自己定义的servlet了,我的需求比较简单,所以就没有再另外定义servlet
3、下面就是客户端根据需求发送自己特定的rpc请求了,比如我需要获取服务端所有的blogList
客户端的调用代码如下:
try {
Object[] result = (Object[]) client.execute("blogger.getAllblogList",
params);
} catch (Exception e) {
e.printStackTrace();
}
那么服务段又是如何处理这个请求的呢?上面那个servlet会把请求根据不同rpc请求转发给不同的处理器,不过由于servlet我使用的是默认的,所以分发这个动作是使用配置properties文件来实现的,这里有个不好的地方要说明的是配置文件必须在项目的/org/apache/xmlrpc /webserver/XmlRpcServlet.properties路径下,这个是Apache XML-RPC做得不好的一个地方。配置文件内容如下
blogger=org.apache.roller.webservices.xmlrpc.BloggerAPIHandler
metaWeblog=org.apache.roller.webservices.xmlrpc.MetaWeblogAPIHandler
当服务端接受到上面客户端的请求之后,就会根据blogger到BloggerAPIHandler去调用getAllblogList这个方法。
4 最后一步就是给客户端回传数据了
这里需要注意的是服务端一般使用的是Hashtable来对多个数据进行封装,比如:
Hashtable result = new Hashtable();
result.put("nickname", user.getUserName());
result.put("userid", user.getUserName());
result.put("email", "");
result.put("lastname", lastname);
result.put("firstname", firstname);
return result;
但是客户端在解析的时候取出来的也是一个Hashtable,然后从中取出自己需要的数据了。
HashMap table = (HashMap) obj;
this.nickname = table.get("nickname").toString();
this.userid = table.get("userid").toString();
当然,最好是做一个专门的解析类来对数据进行解析了。
这里需要补充说明的是,Apache XML-RPC传输的数据类型是一些预先定义好的数据类型,但是同时它也支持用户自定义的数据类型,
具体可以参见:http://ws.apache.org/xmlrpc/advanced.html
分享到:
相关推荐
总结来说,"roller"涉及到的知识点包括: - Apache Roller的架构和使用 - Java编程语言和Servlet/JSP技术 - 数据库连接与MySQL驱动 - 配置文件解析,特别是`.properties`和`.xml`格式 - Spring框架的依赖注入和配置...
3DMAX是一款强大的三维建模、动画和渲染软件,广泛应用于游戏开发、影视特效和建筑设计等领域。在3DMAX中,卷曲修改器是实现复杂动态效果的重要工具,而Roller正是这样一款专为卷曲效果设计的插件。这款插件能够帮助...
《roller安装指南——深入探索源码与工具应用》 在IT行业中,经常需要处理各种开源项目,以便定制、学习或优化。...通过这个过程,开发者可以提升自己的技术水平,为后续的项目开发积累宝贵经验。
6. **源码调试与开发**:对于开发者而言,可能会对博主如何使用IDE(如Eclipse或IntelliJ IDEA)进行源码调试,以及如何为Roller编写自定义插件或扩展感兴趣。这部分内容可以帮助开发者快速上手Roller的二次开发。 ...
"Laravel开发-roller"项目涉及了Laravel的核心功能和扩展组件,包括角色和权限管理、资源操作、中间件使用以及数据库迁移。通过理解这些概念和技术,开发者可以构建出一个安全、高效且易于维护的Web应用。
在本项目中,我们关注的是"Laravel开发-roller .zip"这一压缩包文件,它显然与使用Laravel框架进行Web应用程序开发有关。Laravel是一款基于PHP的开源框架,旨在简化和加速Web应用的构建过程,提供了优雅的工具和功能...
同时,Roller 5提供了大量的可扩展点,允许用户根据需求开发自定义的插件,增强博客的功能性和个性化。 对于博客内容管理,Roller 5提供了完善的后台工具。管理员可以轻松管理用户、分类、标签,还能对评论进行审核...
Apache Roller是一款功能强大的开源博客系统,...通过深入学习和分析Apache Roller的源代码,Java开发者不仅可以提升自己的编程技巧,还能了解到大型Web应用程序的架构设计和最佳实践,为今后的项目开发积累宝贵经验。
Roller 是一个全功能的多用户博客平台,于2002年首发,采用Java语言开发,设计精巧,源代码是很好的学习资料。它支持weblogging应有的特性如:评论功能,所见即所得HTML编辑,TrackBack,提供页面模板,RSS ...
Roller Weblogger(简称Roller)是基于Java开发的一个开源博客系统,可作为Web应用程序运行。它利用了Java EE的技术栈,支持XML,能够与MySQL数据库配合,实现博客内容的存储和管理。 2. **搭建环境**: - ...
Apache Roller是一个全功能,多用户和组博客服务器,适合大型和小型博客网站。它运行一个Java Web应用程序应该能够运行在任何Java EE服务器和关系数据库。目前,Apache Roller能很好的支持Tomcat和MySQL。 本人用...
此外,对于想要开发完整博客功能的开发者来说,Roller 提供了丰富的 API 和扩展点,使其成为一个理想的学习和开发平台。 三、书籍内容概览 本书是一本详尽的指南,通过逐步指导的方式教授如何设置、定制和推广使用 ...
Apache Roller是著名的开源博客系统,主要用于创建、管理和发布Web日志。这个压缩包"apache-roller-4.0.1"包含了Apache Roller的第4.0.1版本,这是一个基于Java技术构建的Web应用程序。接下来,我们将深入探讨Apache...
垂直辊磨机是水泥生产过程中研磨作业的关键设备之一,其运行效率直接影响到整体生产线的工作性能。在实际应用中发现,衬板在达到设计寿命之前出现了断裂现象,这引发了对衬板材料和结构设计的深入研究。 #### 衬板...
《Roller Weblogger 5.0.0 源代码解析与开发指南》 Roller Weblogger是一款开源的、功能强大的博客系统,其5.0.0版本的源代码是开发者深入理解Weblogger工作原理、进行二次开发或自定义功能的理想资源。在本文中,...
### Apache Roller 安装指南详解 #### 概览 本文档详细介绍了如何安装 Apache Roller Weblogger 软件。它涵盖了安装前需要准备的内容、如何下载 Roller、如何配置 Roller 以及如何将其安装到现有的 Java 应用...
apache-roller-srapaapache-roller-srcche-roller-srccapache-rolaapache-roller-srcpache-roller-srcler-srcapapache-roller-srcache-roller-srcapache-roller-src