hc1515014471 2016-08-04 07:46 采纳率: 0%
浏览 846

spring mvc 与fckeditor整合无法上传图片

在web.xml中如下配置:
图片说明
但是上传图片时,页面一直停留在图像属性页面,浏览器上报405 method not allowed错错误。请问大家这个应该怎么修改?求指教

  • 写回答

2条回答 默认 最新

  • devmiao 2016-08-04 07:51
    关注

    前提是,FCKeditor已经整合到你的Web项目中,FCKeditor已经可以使用,但就是在上传图片的时候一直停住不动,如下图。如果FCKeditor单纯地在jsp页面上显示,不会存在这样的问题。但是如果FCKeditor与Struts整合,就会出现这样的问题。造成此问题的原因就是Struts的拦截器,在web.xml配置文件中,可以清楚的看到:


    struts2
    /*

    就是上面这个配置,Struts会拦截所以以“/”开头的URL。

    在FCKeditor的配置中,FCKeditor是使用servlet来实现的,它也是通过拦截URL的机制进行工作的,FCKeditor的部分servlet配置如下:

    <!-- fckeditor 配置 by lyf 2014-09-12 start -->

    Connector

    net.fckeditor.connector.ConnectorServlet

    1


    Connector
    /js/fckEditor/editor/filemanager/connectors/*

    <!-- 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:


    struts2
    <!-- 解决struts2 FCKeditor不能上传图片的问题
    org.apache.struts2.dispatcher.FilterDispatcher
    -->
    com.ckms.filter.FCKFilter

    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 MATLAB动图问题
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名