FCkeditor和struts2结合使用解决不能上传图片的问题
就是上面这个配置,Struts会拦截所以以“/”开头的URL。
在FCKeditor的配置中,FCKeditor是使用servlet来实现的,它也是通过拦截URL的机制进行工作的,FCKeditor的部分servlet配置如下:
net.fckeditor.connector.ConnectorServlet
现在就很明了了,struts拦截所有以“/”开头的URL,FCKeditor的servlet拦截所有以“/js/fckEditor/editor/filemanager/connectors/”开头的URL,当你使用FCKeditor上传图片的时候,URL中包含有“/”(指网站根目录),优先被struts的拦截器拦截,这样上传图片的URL请求自然就不会转发到FCKeditor的servlet,所以我们上传图片也就不成功。
解决办法:自己定义了一个过滤器FCKFilter.java,让它继承Struts2的过滤器StrutsPrepareAndExecuteFilter,完整代码如下:
package com.ckms.filter;
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.ng.filter.StrutsPrepareAndExecuteFilter;
/**
* 类名称:FCKFilter
* 类描述:解决struts2 FCKeditor不能上传图片的问题
* 创建人:lyf
* 创建时间:2014-9-12 上午10:19:08
* 修改人:lyf
* 修改时间:2014-9-12 上午10:19:08
* 修改备注:
* @version 1.0
*
*/
public class FCKFilter extends StrutsPrepareAndExecuteFilter {
public void doFilter(ServletRequest req,ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
String URI = request.getRequestURI();
// 此处的值要和 web.xml 中fck配置的路径开头一致 –>
String[] uriArray = URI.split(“/js/fckEditor/editor/filemanager/connectors/”);
int arrayLen = uriArray.length;
if (arrayLen >= 2) {
chain.doFilter(req, res);
}else {
super.doFilter(req, res, chain);
}
}
}
上面的代码是重写了Struts2的过滤器StrutsPrepareAndExecuteFilter中的doFilter方法,执行的原理为:
获得完整的http url地址,然后判断url地址中是否包含有FCKeditor的servlet拦截规则“/js/fckEditor/editor/filemanager/connectors/”,若包含,struts就不拦截该url请求,而是直接转发,交由FCKeditor的servlet来处理;若不包含,则拦截该url请求,由struts来处理。
自定义的过滤器写完之后,要在web.xml中更改struts的拦截器类,不能再使用struts的默认拦截器类StrutsPrepareAndExecuteFilter。但是请放心,自定义的过滤器FCKFilter继承了StrutsPrepareAndExecuteFilter里的所有的方法,因此项目依然照常运行。
该方法巧妙的解决了struts2和FCKeditor整合后不能上传图片的问题,需要改动的系统配置非常少,只需自定义一个拦截器,然后改一下struts的拦截器类为自定义的拦截器类。
修改后的web.xml:
SSH2 struts2 FCKeditor在线编辑器实现 http://www.linuxidc.com/Linux/2013-04/82955.htm
Struts2的入门实例 http://www.linuxidc.com/Linux/2013-05/84618.htm
Struts2实现ModelDriven接口 http://www.linuxidc.com/Linux/2014-04/99466.htm
遇到的Struts2文件下载乱码问题 http://www.linuxidc.com/Linux/2014-03/98990.htm
Struts2整合Spring方法及原理 http://www.linuxidc.com/Linux/2013-12/93692.htm
Struts2 注解模式的几个知识点 http://www.linuxidc.com/Linux/2013-06/85830.htm