【Jsp精品源码栏目提醒】:文章导读:在新的一年中,各位网友都进入紧张的学习或是工作阶段。
网学会员整理了Jsp精品源码-跟我一步一步开发自己的Openfire插件 - 其它资料的相关内容供大家参考,祝大家在新的一年里工作和学习顺利!
一、准备
工作1、 下载相关 jar 包和 openfire
源码Openfire
源码下载:http://www.igniterealtime.org/downloads/download-landing.jspfileopenfire/openfire_src_3_8_0.tar.gz其他的 jar 包你可以去 tomcat 中的 lib 目录找到或者其他的地方也有(在下面的步骤会提到),这里就赘述了。
2、 新建一个自己的 java project 工程,添加的 jar 包如下:将 jasper-compiler.jar、jasper-runtime.jar、servlet.jar 添加到新建的工程中。
如果没有 jar 先不要急,看下面的步骤: d下载后的 openfire
源码目录是这样的 re te is eg如果你有 ant 工具可以用 dos 命令行的方式,直接运行 build 目录中的 ant 脚本,运行脚本后,你会发现有一个 target 的目录。
该目录如下: nR U在 lib 目录中可以找到我们需要的 jar 文件了,将 openfire.jar 也添加到你的工程中。
如 果你没有安装 ant 你可以用 MyEclipse,将 openfire
源码中的 build、documentation、resources 目录复制到一个 Java Project 中,然后在 MyEclipse中运行 src 中的 build.xml ant 脚本就会出现和上面一样的文件目录。
建议将你的 MyEclipse 中的 openfire
源码工程目录设置成这样的 d re其 中,src/plugins/tree 是我自己写的插件,现在暂时可以无视。
而 target te就是我们需要的,里面存放了 openfire 的配置和需要的 jar 包。
Work 是工作目录,是一个完整的 openfire 服务器。
如果你还没有下载 openfire 服务器的话, is可以用这个服务器。
eg3、 了解 openfire
源码中的插件我们找一个插件目录看看,主要看看里面的结构,目录结构很重要。
因为我们将写好的插件打成 jar 包后,打包的 jar 的目录有一定规范结构,不能随便建立其 nR他目录。
U d re这 是一个 user
service 的插件,在 src/java 中是我们的插件
源代码;web 目录 te中则是前端的页面,其中 web-custom.xml 是配置当 前插件 UserServiceServlet配置;changelog.html 是修改日志;logo_small.gif 是插件图 标;plugin.xml is是我们配置插件的文件,这个很重要(在这里先提示下); eg二、开发简单插件工程现在的目录机构如下 nR U1、 建立自己的插件类,SamplePlugin.java,里面简单的写点内容。
package com.hoo.server.pluginimport java.io.Fileimport org.jivesoftware.openfire.XMPPServerimport org.jivesoftware.openfire.container.Pluginimport org.jivesoftware.openfire.container.PluginManager/ ltbgtfunction:lt/bgt openfire server plugin sample author hoojo createDate 2013-2-28 下午 05:48:22 file SamplePlugin.java package com.hoo.server.plugin project OpenfirePlugin blog http://blog.csdn.net/IBM_hoojo email hoojo_126.com version 1.0 d/public class SamplePlugin implements Plugin private XMPPServer server re te Override public void initializePluginPluginManager manager File ispluginDirectory server XMPPServer.getInstance eg System.out.printlnquot初始化…… 安装插件!quot System.out.printlnserver.getServerInfo nR Override public void destroyPlugin System.out.printlnquot服务器停止,销毁插件!quot U 比较简单,如果你将插件安装在 openfire 服务器上的时候,启动服务器一个可以看到初始化的内容,关闭服务器可以看到销毁的内容。
2、 配置插件ltxml versionquot1.0quot encodingquotUTF-8quotgtltplugingtlt-- Main plugin class 这里是最重要滴,就是你的插件的全路径--gtltclassgtcom.hoo.server.plugin.SamplePluginlt/classgtlt-- Plugin meta-data --gtltnamegtSimplePluginlt/namegtltdescriptiongtThis is the my sample plugin.lt/descriptiongtltauthorgthoojolt/authorgtltversiongt1.0lt/versiongtltdategt28/02/2013lt/dategtlturlgthttp://localhost:9090/openfire/plugins.jsplt/urlgtltminServerVersiongt3.4.1lt/minServerVersiongtltlicenseTypegtgpllt/licenseTypegtltadminconsolegt lt/adminconsolegtlt/plugingt注意上面的 class 的配置,那个配置是最为重要的,配置的是插件的全路径;name d是插件的名称,安装后的插件名称; author 是插件作者;lincenseType 是协议;adminconsole 是配置插件关联的页面的;稍后再讲!3、 可部署的插件包 jar 的目录结构 re te这个很重要,目录结构将决定你插件 发布的成败。
is在编写命令之前,我们可以看看 openfire 服务器中已经安装的插件的 jar 包的目录结构,到时候我们也要打包成那样的结构才行的。
必须打包成这样的目录结 eg构,否则哼哼……后果很严重的!声明!在我机器中的 openfire 服务器中,插件目录在 C:ProgramFilesopenfireplugins,里面有一个 search.jar 插件。
提示:当你将一个可 nR以安装的 jar 安装在 openfire 后,会被 openfire 解压成目录结构。
就向 JavaEE中的 war 包发布的应用服务器中的效果一样的。
打成可部署的插件 jar 包 的 (相当于发布的应用服务器的目录结构) search.jar U目录结构如下: d re te is首先看看文件命名,search.jar 就是我们打包的插件的名称,而国际化的配置 eg文件就是以插件名称开头 _118n.properties 或插件名称开头_118n_language.properties;而 lib 目录中的是插件的 src 目录的 class 打成的 jar 包;带有-jspc.jar 是 web 目录下的
jsp 编译成 servlet 后的 class 打 nR成的包文件,都是以插件名称开头;WEB- INF/web.xml 配置的是-jspc.jar 中的 class 文件;web/images 是图片文件,需要用到的图片都放置在这个目录即 可;plugin.xml 文件名固定的,里面是配置插件的 xml 内容。
U其中,118n 国际化文件,它主要是我们在插件中的
jsp 和
Java 程序中的国际化配置。
Web 目录存放
jsp、图片、web.xml 内容;lib 目录是存放插件的 src 目录的 java 代码编译后打包的 jar,以及
jsp 编译成 servlet 的 class 打包后的 jar;其他的文件都是根目录的;对照上面插件包的 jar,我们看看实际开发中的目录结构: d re te is eg稍提醒下,如果你的插件中包含 servlet,那你需要将它配置在 web 目录下的WEB-INF/web-custom.xml 目录中;这个在以后会经常用到的,比如你提供一个 nR接口给外部
程序调用的情况下。
目录结构参考: U d reUserServiceServlet 配置在 web-custom.xml 目录中。
te4、 编写 ant 命令,打可部署 jar 包。
如果你不懂 ant 命令也没关系,你总知道java 的基本
常用的 dos 命令。
只不过 ant 就是将 dos 转换成一个可重复多次调 is用的命令行。
eg在工程的根目录中新建一个 build 目录,新建build.
xml nRltproject namequotWebapp Precompilationquot defaultquotopenfire-pluginsquotbasedirquot.quotgt ltproperty filequotbuild.propertiesquot /gt U lt-- java servlet 相关文件编译 jar 存放位置 --gt ltproperty namequotjava.jar.dirquot valuequotwebapp.path/java-distquot/gt lt--
jsp servlet 编译后 jar 存放位置 --gt ltproperty namequotjsp.jar.dirquot valuequotwebapp.path/
jsp-dist/libquot/gt lt-- 定义 java servlet 和
jsp servlet 的 jar 包名称 --gt ltproperty namequotjava.jarquotvaluequotjava.jar.dir/plugin-plugin.name.jarquot/gt ltproperty namequotjsp.jarquotvaluequotjsp.jar.dir/plugin-plugin.name-
jsp.jarquot/gt lt--
jsp servlet 配置到 web.xml 中 --gt ltproperty namequotplugin.web.xmlquotvaluequotwebapp.path/
jsp-dist/web.xmlquot/gt lt-- 编译
jsp 并生成相关 jar、xml 文件 --gt lttarget namequotjspcquotgt lttaskdef classnamequotorg.apache.jasper.JspCquot namequotjasper2quotgt ltclasspath idquotjspc.classpathquotgt ltpathelement locationquotjava.home/../lib/tools.jarquot /gt ltfileset dirquottomcat.home/binquotgt ltinclude namequot.jarquot /gt lt/filesetgt ltfileset dirquottomcat.home/server/libquotgt ltinclude namequot.jarquot /gt lt/filesetgt d ltfileset dirquottomcat.home/common/libquotgt ltinclude namequot.jarquot /gt re lt/filesetgt lt-- te ltfileset dirquotD:/Workspace/openfire/build/libquotgt ltinclude namequot/.jarquot /gt lt/fileset--gt is lt/classpathgt lt/taskdefgt eg lt-- 编译
jsp-gtservlet class --gt ltjasper2 javaEncodingquotUTF-8quot validateXmlquotfalsequot nR urirootquotplugin.path/webquot outputDirquotwebapp.path/
jsp-dist/srcquot packagequotcom.hoo.openfire.plugin.plugin.namequot /gt U lt-- 编译后的 servlet class 配置到 web.xml 文件中 --gt ltjasper2 validateXmlquotfalsequot urirootquotplugin.path/webquot outputDirquotwebapp.path/
jsp-dist/srcquot packagequotcom.hoo.openfire.plugin.plugin.namequot webXmlquotplugin.web.xmlquot/gt lt/targetgt lt-- 编译
jsp 并将其打 jar 包 --gt lttarget namequotcompilequotgt ltmkdir dirquotwebapp.path/
jsp-dist/classesquot /gt ltmkdir dirquotwebapp.path/
jsp-dist/libquot /gt ltmkdir dirquotwebapp.path/
jsp-dist/srcquot /gt ltjavac destdirquotwebapp.path/
jsp-dist/classesquot optimizequotoffquot encodingquotUTF-8quot debugquotonquot failonerrorquotfalsequot srcdirquotwebapp.path/
jsp-dist/srcquot excludesquot/.smapquotgt ltclasspathgt ltpathelement locationquotwebapp.path/
jsp-dist/classesquot/gt ltfileset dirquotwebapp.path/
jsp-dist/libquotgt ltinclude namequot.jarquot /gt lt/filesetgt ltpathelement locationquottomcat.home/common/classesquot /gt ltfileset dirquottomcat.home/common/libquotgt ltinclude namequot.jarquot /gt d lt/filesetgt ltpathelement locationquottomcat.home/shared/classesquot /gt re ltfileset dirquottomcat.home/shared/libquotgt ltinclude namequot.jarquot /gt lt/filesetgt te ltfileset dirquottomcat.home/binquotgt ltinclude namequot.jarquot /gt is lt/filesetgt lt/classpathgt eg ltinclude namequotquot /gt ltexclude namequottags/quot /gt lt/javacgt nR ltjar jarfilequotjsp.jarquotbasedirquotwebapp.path/
jsp-dist/classesquot /gt lt/targetgt U lt-- 将 java servlet 打包成 jar --gt lttarget namequotjava-jarquotgt ltmkdir dirquotjava.jar.dirquot/gt ltjar jarfilequotjava.jarquotgt ltfileset dirquotwebapp.path/binquot includesquot/.classquot/gt lt/jargt lt/targetgt lt-- 生成可部署的插件包 --gt lttarget namequotplug-jarquotgt lt-- 插件插件包相关 lib、
web 目录 --gt ltmkdir dirquotwebapp.path/plugin.name/libquot/gt ltmkdir dirquotwebapp.path/plugin.name/web/WEB-INFquot/gt lt-- 复制
jsp servlet 的 jar 和 java servlet 的相关 jar 包到插件包的 lib目录下 --gt ltcopy filequotjava.jarquottodirquotwebapp.path/plugin.name/libquot/gt ltcopy filequotjsp.jarquottodirquotwebapp.path/plugin.name/libquot/gt lt-- 将相关的图片、帮助
文档、修改日志等文件复制到插件目录下 --gt ltcopy todirquotwebapp.path/plugin.namequotgt ltfileset dirquotplugin.pathquot includesquot.quot/gt lt/copygt ltcopy todirquotwebapp.path/plugin.name/webquotgt ltfileset dirquotplugin.path/webquotgt d ltinclude namequotquot/gt ltinclude namequot/.quot/gt re ltexclude namequot/.xmlquot/gt ltexclude namequot/.jspquot/gt lt/filesetgt te lt/copygt lt--
jsp servlet 的 web 复制到插件目录下 --gt is ltcopy filequotplugin.web.xmlquottodirquotwebapp.path/plugin.name/web/WEB-INFquot/gt eg ltcopy todirquotwebapp.path/plugin.name/webquotgt ltfileset dirquotplugin.path/webquot includesquot/.xmlquot/gt lt/copygt nR lt-- 将国际化相关资源文件复制到插件目录下 ltcopy filequotwebapp.path/bin/i18nquottodirquotwebapp.path/plugin.namequot/gt --gt U lt-- 产生可部署插件包 --gt ltjar jarfilequotwebapp.path/plugin.name.jarquotgt ltfileset dirquotwebapp.path/plugin.namequotincludesquot/quot/gt lt/jargt lt/targetgt lt-- 生成没有 Web 资源的可部署插件包 --gt lttarget namequotjava-plug-jarquotgt lt-- 插件插件包相关 lib、 web 目录 --gt ltmkdir dirquotwebapp.path/plugin.name/libquot/gt lt-- 复制 java servlet 的相关 jar 包到插件包的 lib 目录下 --gt ltcopy filequotjava.jarquottodirquotwebapp.path/plugin.name/libquot/gt lt-- 将相关的图片、帮助
文档、修改日志等文件复制到插件目录下 --gt ltcopy todirquotwebapp.path/plugin.namequotgt ltfileset dirquotplugin.pathquot includesquot.quot/gt lt/copygt lt-- 产生可部署插件包 --gt ltjar jarfilequotwebapp.path/plugin.name.jarquotgt ltfileset dirquotwebapp.path/plugin.namequotincludesquot/quot/gt lt/jargt lt/targetgt d lt-- 清理生成的文件 --gt lttarget namequotcleanquotgt re ltdelete filequotwebapp.path/plugin.name.jarquot/gt ltdelete dirquotwebapp.path/plugin.namequot/gt te ltdelete dirquotwebapp.path/
jsp-distquot/gt ltdelete dirquotwebapp.path/java-distquot/gt lt/targetgt is lttarget namequotallquot dependsquotcleanjspccompilequot/gt eg lttarget namequotopenfire-pluginquot dependsquotjspcjava-jarquot/gt nR lttarget namequotopenfire-pluginsquot dependsquotalljava-jarplug-jarquot/gt lttarget namequotopenfire-plugin-javaquotdependsquotcleanjava-jarjava-plug-jarquot/gt Ult/projectgtbuild.properties 文件内容tomcat hometomcat.homeD:/tomcat-5.0.28/tomcat-5.0.28webapp.pathD:/Workspace/OpenfirePluginplugin.namesampleplugin.pathD:/Workspace/OpenfirePlugin/src/plugins/sample注意:这里我没有编写编译 java 代码到 class 的步骤,我是直接使用 MyEclipse自动编译的 bin/class 的。
如果你没有用 MyEclipse 或 Eclipse,那么你需要将src 中的 Java 代码编译 class。
这里需要配置 tomcat 的目录,我这里是 5.0.28 的版本。
我用 tomcat6 有些
问题,这里主要是用 tomcat 中的 lib 库,帮助 我们编译
jsp。
还需要配置你当前工程的所在目录,也就是工程在 Eclipse 中的目录位置。
最后你需要配置插件的名称和插件在工程中的所在目录, 这个是 在打包的时候, 需要将其他的 html、image、xml 等资源导入的 jar 内。
所以我们执行 clean、因为这里的插件是不带
jsp 的, java-jar、java-plugin-jar。
也就是 openfire-plugin-java 这个命令即可。
执行命令后,你可以看到工作空间的工程目录下多了目录和文件。
见图: d re te isjava-dist 目录里面的就是 src/plugin/sample 目录中的 java 代码打成的 jar包。
具体你可以用 zip 打开看看。
egsample 就是我们的插件目录,和 sample.jar 中的内容是一模一样的。
sample.jar 就是将 sample 目录打成 jar 包。
nR5、 发布插件发布插件有 2 种方式 U第一种:直接将插件放置在 openfire 服务器的 plugins 目录下。
我的是在:C:Program Filesopenfireplugins 目录。
重起 openfire 后你可以看到控制台输出我们插件中输出的内容,并且在 C:Program Filesopenfireplugins目录中可以看到该目.