最近在练习小项目,就想把ckeditor和ckfinder整进来。
至于如何使用ckeditor、ckfinder及他们的整合,这个很简单,网上教程一大推,官网上也有教程,这里就不细说了。
在把ckeditor跟ckfinder整合进项目的时候,访问有ckeditor编辑器的页面,点击图像工具栏后出现如下对话框,
再点击浏览服务器按钮,结果弹出错误框
提示从服务器读取XML数据出错,关键是后台没打印出错日志,用firebug查看也没看到js报错,这下纠结了。。。网上百度+google了一下,基本都是提问的多,回答的少,咋办啊。。。
这里简单介绍项目配置,项目上下文路径是 “/”,ckeditor与ckfinder位置如下:
其他的如config.xml是从ckfinder官方下载的war包中的示例程序中拷贝的,web.xml中也加入了相应的配置(直接拷贝的实例中web.xml中的配置),ckeditor与ckfinder整合的代码如下:
CKFinder.setupCKEditor( ckeditor,'/resources/js/ckfinder/' );
因为ckeditor、ckfinder是相互独立的应用,彼此不依赖,所以就直接访问了/resources/js/ckfinder/ckfinder.html这个示例中的页面,结果还是报一样的错,而这个在将官方示例war包部署到tomcat服务器上是能正常运行的,郁闷了。。。
这个路径是有点熟悉的,在web.xml中有相关配置:
<servlet> <servlet-name>ConnectorServlet</servlet-name> <servlet-class>com.ckfinder.connector.ConnectorServlet</servlet-class> <init-param> <param-name>XMLConfig</param-name> <param-value>/WEB-INF/config.xml</param-value> </init-param> <init-param> <param-name>debug</param-name> <param-value>false</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>ConnectorServlet</servlet-name> <url-pattern> /ckfinder/core/connector/java/connector.java </url-pattern> </servlet-mapping>但是这个路径是有问题的,由于项目上下文路径是“/”,所以访问这个servlet的url应该是
http://localhost:8080/ckfinder/core/connector/java/connector.java?command=Init为什么会多出 resources/js/这一段呢?于是想看看这个servlet是在哪调用的,全局搜索了一下,/ckfinder/core/connector/java/connector.java这段信息只在web.xml中出现,看来无法直接查看到在哪访问这个servlet的。于是从ckfinder.html入手,因为ckfinder没有集成时访问的是ckfinder.html,然后出错的。打开ckfinder.html,里面的dom元素很少
<div id="ckfinder"></div>然后是一段js,这段js的功能应该是调用ckfinder的方法生成html dom元素,然后放到<div id="ckfinder"></div>节点中,因此访问那个servlet应该是在这段js及页面引入的ckfinder.js中。打开ckfinder.js,根据错误信息去找。。。看了半天,里面的js代码错综复杂,完全没有头绪,看不下去了,还是无法定位到哪一行代码访问了那个servlet。。。
js能力有限啊。。。
唉,不想找了,猜了一下,出错的路径比正常的路径不就多了resources/js/这段嘛,是不是跟ckfinder目录所在的位置有关啊,看了下官方示例中的,它是与WEB-INF目录平级的,于是我也将ckfinder目录移出来,移到与WEB-INF平行,如下图:
修改页面一如ckfinder js的路径,重新部署了一下,这下成功了,没有从服务器读取XML数据出错这个错误了。。。
问题是解决了,但是还没搞清楚为什么会出现这种情况,留待以后搞明白了再来补充吧。。。