struts2整合CKEditor和CKFinder实现上传
[html]
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
上面的配置,struts2会拦截所有以"/"开头的URL.
在CKEditor的配置中,CKEditor是使用servlet来实现的,它也是通过拦截URL的机制进行工作的,CKeditor的部分servlet配置如下:
[html]
<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",可以这样改:
[html]
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
第二个办法是:
自己来定义一个CKeditor的过滤器,让它来继承Struts2的过滤器FilterDispatcher,其完整代码是
[java]
package cn.edu.csu.software.filters;
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;
@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 里的所有的方法,因此项目依然照常运行。www.2cto.com
<!-- struts2配置文件 -->
[html]
<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>
下一篇: 新手报到,php怎么学呀
推荐阅读
-
struts2整合CKEditor和CKFinder实现上传
-
实例详解Ajax 之FileUpload和Struts2实现多文件上传功能
-
为何小弟我整合ckeditor和ckfinder后,上传图片成功但无法在另一个页面显示
-
用ckeditor和ckfinder在本地测试上传图片,localhost相应好长时间,就没有然后了
-
CKEditor和CKFinder结合,可以上传图片
-
整合ckeditor+ckfinder,解决上传文件路径问题
-
用ckeditor和ckfinder在本地测试上传图片,localhost相应好长时间,就没有然后了
-
为何小弟我整合ckeditor和ckfinder后,上传图片成功但无法在另一个页面显示
-
CKEditor整合ckfinder实现图片上传
-
ckeditor+ckfinder 如何添加上传按钮并实现上传普通文件