之前折腾了下CKEditor和CKFinder实现上传功能,今想来把这个文本编辑器应用到一个自己在做的练手项目中,实现与Struts2的整合,整合的过程so easy.但图片死活上传不上去.那个整合啊,那个蛋疼啊.
经过不懈的努力问题发现了,原来是被struts2搞了.此问题的原因就是struts2的拦截器,在web.xml中,可以清楚的看到:
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
上面的配置,struts2会拦截所有以"/"开头的URL.
在CKEditor的配置中,CKEditor是使用servlet来实现的,它也是通过拦截URL的机制进行工作的,CKeditor的部分servlet配置如下:
<servlet-mapping>
<servlet-name>ConnectorServlet</servlet-name>
<url-pattern>/ckfinder/core/connector/java/connector.java</url-pattern>
</servlet-mapping>
现在就很明了了,struts2拦截器会拦截所有以"/"开头的URL,CKEd的servlet拦截器拦截所有以"
/ckfinder/core/connector/java/connector.java"开头的URL.当时CKEditor上传图片的时候,URL中包含有"/"(指网站根目录),优先被struts2的拦截器拦截,这样上传的URL请求就不会转发到CKEditor的servlet中,所有上传图片也就不会成功.
问题所在找到了,那这个问题就好解决了,最简单的办法是将struts2的拦截器"/*"改成"#.action"或者"*.do"
第二个办法是:
自己来定义一个CKeditor的过滤器,让它来继承Struts2的过滤器FilterDispatcher,其完整代码是
/**
* @Title: FCKFilter.java
* @Package: cn.itcast.utils
* @Description: TODO(用一句话描述该文件做什么)
* @author: 何枫
* @date: 2011-11-1 下午08:49:10
* @version: V1.0
*/
package cn.itcast.utils;
import java.io.IOException;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.dispatcher.FilterDispatcher;
/**
* @Title: FCKFilter.java
* @Package: cn.itcast.utils
* @Description: TODO(用一句话描述该文件做什么)
* @author: 何枫
* @date: 2011-11-1 下午08:49:10
* @version: V1.0
*/
@SuppressWarnings("deprecation")
public class FCKFilter extends FilterDispatcher {
public void doFilter(ServletRequest req,ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
String URI = request.getRequestURI();
String[] uriArray = URI.split("/ckfinder/core/connector/java/*/");
int arrayLen = uriArray.length;
if (arrayLen >= 2) {
chain.doFilter(req, res);
}else {
super.doFilter(req, res, chain);
}
}
}
上面的方法重写了struts2的过滤器FilterDispatcher中的doFilter方法,执行原理为:获得完整的http url的地址,然后判断URL地址中是否包含CKEditor的servlet拦截规则"/ckfinder/core/connector/java/*/",若包含,struts2就不拦截该URL请求,而直接转发,交友CKEditor的servlet来处理;若不包含,ze拦截器拦截该URL请求,由struts2来处理
自定义的过滤器写完之后,要在web.xml中更改struts2的拦截器类,不能再使用struts2的默认拦截器类 FilterDispatcher 。但是请放心,自定义的过滤器FCKFilter继承了 FilterDispatcher 里的所有的方法,因此项目依然照常运行。
<!-- struts2配置文件 -->
<filter>
<filter-name>struts2</filter-name>
<!--
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
-->
<filter-class>cn.itcast.utils.FCKFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
有图有真相
- 大小: 103 KB
分享到:
相关推荐
经过两天的努力,终于将Ckeditor和Ckfinder整合到Struts2中。里面有Struts2+Ckeditor说明.txt。你可以参照里面的说明一步一步做。比网上所得简单多了!!!
struts2整合CKEditor 解决了图片上传问题
CKEditor实现图片上传使用Struts2 博文参考地址:http://blog.csdn.net/itmyhome1990/article/details/17264627
ckeditor编辑器在struts2中的使用 上传图片 flash 都已经实现
自己实现的ckeditor文件上传,上网找了各种资料,对代码做了极大的删减,通俗易懂,可作为CMS项目的参考,对浏览器的兼容性很好,支持已上传图片的缩略图展示效果,使用eclipse做出来的,很值得学习和参考!
使用ckeditor插件 实现图片上传。
ckeditor和struts2实现图片上传和编辑器上浏览!
JAVA工程项目整合ckeditor+ckfinder实现图片上传、文件上传功能。
http://blog.csdn.net/mamba10/article/details/8543219 讲解博客的地址. 2中上传处理方式,一种jsp 一种struts2的action 代码没多大区别
NULL 博文链接:https://mazilaidaige.iteye.com/blog/1441150
CKEditor实现本地视频和图片的上传功能,不用kfinal
ckeditor3.6.5+ckfinder2.1+struts2的整合,破解方法,有源码,ckfinder.js已经被破解了, 可以直接用。ckfinder和struts2的整合在文档最后。 最新版本的ckfinder我没有找到破解方法, 所以用的2.1版本。 希望可以帮...
NULL 博文链接:https://chouyi.iteye.com/blog/1573397
maven管理的Servlet整合ckeditor文件上传的功能
近日要用到CKEditor实现图片上传,网上找了好多代码,要么跑不起来,要么不全,比如不知道如何返回值。跳了不少坑,现在彻底搞定。 目前上传用的是ASP.NET,可以随便切换成PHP、JAVA或其它的语言 只需要把ckeditor...
可以实现网络上传功能但是从官网上下载的没有上传图标,只能写地址,很不方便,这里增加了js代码来实现上传功能
Ckeditor上传图片!本身Ckeditor不具备上传图片功能的!前两天在一个博客园的一个博主那里讨了点Ckeditor上传图片的方法,现在共享给大家!博主的博客地址和实现方式我压缩在文件中了!大家支持正版哈!
最后配置视频上传路径的URL路径,也就是POST上传文件的地址:config.filebrowserFlvPlayerUploadUrl = '/ckeditor/upload_json.ashx?dir=media',注意一定要是filebrowserFlvPlayerUploadUrl,这里要对应flvPlayer...