Fckeditor和struts2结合使用解决不能上传图片的问题
2014-09-12 10:42
801 查看
前提是,FCKeditor已经整合到你的Web项目中,FCKeditor已经可以使用,但就是在上传图片的时候一直停住不动,如下图。如果FCKeditor单纯地在jsp页面上显示,不会存在这样的问题。但是如果FCKeditor与Struts整合,就会出现这样的问题。造成此问题的原因就是Struts的拦截器,在web.xml配置文件中,可以清楚的看到:
就是上面这个配置,Struts会拦截所以以“/”开头的URL。
在FCKeditor的配置中,FCKeditor是使用servlet来实现的,它也是通过拦截URL的机制进行工作的,FCKeditor的部分servlet配置如下:
现在就很明了了,struts拦截所有以“/”开头的URL,FCKeditor的servlet拦截所有以“/js/fckEditor/editor/filemanager/connectors/”开头的URL,当你使用FCKeditor上传图片的时候,URL中包含有“/”(指网站根目录),优先被struts的拦截器拦截,这样上传图片的URL请求自然就不会转发到FCKeditor的servlet,所以我们上传图片也就不成功。
解决办法:自己定义了一个过滤器FCKFilter.java,让它继承Struts2的过滤器StrutsPrepareAndExecuteFilter,完整代码如下:
上面的代码是重写了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:
<filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
就是上面这个配置,Struts会拦截所以以“/”开头的URL。
在FCKeditor的配置中,FCKeditor是使用servlet来实现的,它也是通过拦截URL的机制进行工作的,FCKeditor的部分servlet配置如下:
<!-- fckeditor 配置 by lyf 2014-09-12 start --> <servlet> <servlet-name>Connector</servlet-name> <servlet-class> net.fckeditor.connector.ConnectorServlet </servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Connector</servlet-name> <url-pattern>/js/fckEditor/editor/filemanager/connectors/*</url-pattern> </servlet-mapping> <!-- fckeditor 配置 by lyf 2014-09-12 end -->
现在就很明了了,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:
<filter> <filter-name>struts2</filter-name> <!-- 解决struts2 FCKeditor不能上传图片的问题 <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> --> <filter-class>com.ckms.filter.FCKFilter</filter-class> </filter>
相关文章推荐
- 转:struts2 FCKeditor不能上传图片的问题解决
- 使用FCKeditor_2.6.3版本有关上传图片问题解决
- struts2 和FCKEditor 整合 不能上传图片的问题
- html的img中使用SVG图片做SRC在本地测试可用但是上传服务器后不能显示问题解决 标签: SVGMIME TYPE不显示服务器设置 2016-05-21 13:49 2517人阅读 评论(0)
- html的img中使用SVG图片做SRC在本地测试可用但是上传服务器后不能显示问题解决
- JSF(JSP)中使用FCKeditor上传图片问题的解决
- 使用FCKeditor_2.6.3版本有关上传图片问题解决
- fckedirot使用 及与struts2整合图片上传问题的解决办法
- FckEditor使用时遇到的两个问题,未能加载xxxx和上传图片无响应的解决方法
- fck与struts2使用不能上传图片 报错:Security error
- FckEditor上传图片问题解决方案
- 如何解决eWebEditor在线编辑器的远程自动上传功能不能使用的问题?
- PHP FCKeditor2.5 解决上传图片问题
- asp.net+FCKeditor上传图片显示叉叉图片无法显示的问题的解决方法
- 解决FCKeditor For asp.net 上传图片时中文乱码问题
- jsp fckeditor 上传中文图片乱码问题的解决方法
- 解决使用struts2后servlet不能正常工作的问题
- fck与struts2使用不能上传图片 报错:Security error
- struts2 FCKeditor 上传图片时候的那些纠缠不清的问题
- 解决hibernate中不能正常使用blog类型字段上传数据的问题