`
498320858
  • 浏览: 393110 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

struts2 FCKeditor不能上传图片的问题解决

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

view plain   copy<filter-mapping>     <filter-name>struts2</filter-name>     <url-pattern>/*</url-pattern> </filter-mapping>  就是上面这个配置,Struts会拦截所以以“/”开头的URL。

关于将FCKeditor整合到Web项目中,可以参考《Java FckEditor 2.6+JSP的配置方法详解》。

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

view plain   copy<servlet-mapping>    <servlet-name>Connector</servlet-name>    <url-pattern>/fckeditor/editor/filemanager/connectors/*</url-pattern> </servlet-mapping> 现在就很明了了,struts拦截所有以“/”开头的URL,FCKeditor的servlet拦截所有以“/fckeditor/editor/filemanager/connectors/”开头的URL,当你使用FCKeditor上传图片的时候,URL中包含有“/”(指网站根目录),优先被struts的拦截器拦截,这样上传图片的URL请求自然就不会转发到FCKeditor的servlet,所以我们上传图片也就不成功。

网上有很多解决方法,但多数是修改struts的拦截范围,如将"/*"改成"*.do"或"*.action"之类的。这不是一个好方法,因为在我的项目中,我没有使用do或action的URL扩展,这样显然不能解决我的问题,那么有没有一个更加完美的解决方法呢?

答案是肯定的。我自己定义了一个过滤器FCKFilter.java,让它继承Struts2的过滤器StrutsPrepareAndExecuteFilter,完整代码如下:
package com.olympus.sapg.smtinnovation.util.method;

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;

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();
        String[] uriArray = URI.split("/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拦截规则“/fckeditor/editor/filemanager/connectors/”,若包含,struts就不拦截该url请求,而是直接转发,交由FCKeditor的servlet来处理;若不包含,则拦截该url请求,由struts来处理。

自定义的过滤器写完之后,要在web.xml中更改struts的拦截器类,不能再使用struts的默认拦截器类StrutsPrepareAndExecuteFilter。但是请放心,自定义的过滤器FCKFilter继承了StrutsPrepareAndExecuteFilter里的所有的方法,因此项目依然照常运行。

view plain   copy<!-- struts2 --> <filter>      <filter-name>struts2</filter-name>     <filter-class>com.olympus.sapg.smtinnovation.util.method.FCKFilter</filter-class>     <init-param>         <param-name>actionPackages</param-name>         <param-value>com.olympus.sapg.smtinnovation.action</param-value>     </init-param> </filter>  <filter-mapping>     <filter-name>struts2</filter-name>     <url-pattern>/*</url-pattern> </filter-mapping>  OK,该方法巧妙的解决了struts2和FCKeditor整合后不能上传图片的问题,需要改动的系统配置非常少,只需自定义一个拦截器,然后改一下struts的拦截器类为自定义的拦截器类,就这么简单……

分享到:
评论

相关推荐

    struts2,fckeditor冲突解决

    在使用FCKeditor上传图片时,如果没有正确配置Action,Struts2可能无法识别或处理上传请求。因此,你需要在`struts.xml`文件中为FCKeditor的上传操作创建一个专门的Action,并设置相应的接收路径。 2. **文件上传...

    struts2+fckeditor

    解决上述问题后,你应该能够成功地在Struts2应用中使用FCKeditor上传图片。如果遇到任何错误,建议检查服务器日志,它们通常会提供错误的具体信息,帮助你定位并解决问题。同时,学习并理解Struts2的拦截器机制和...

    Struts2与FCKeditor的整合.doc

    如果Struts2的filtermapping配置为"/*",可能与ConnectorServlet冲突,此时需要在struts.xml中添加excludePattern常量来解决这个问题。 3. 为了实现图片上传功能,你需要拷贝以下6个jar包到你的Web项目的lib目录下...

    struts和fckeditor整合完整版

    1. **引入FCKeditor库**:首先需要将FCKeditor的JavaScript文件和相关资源(如CSS、图片等)引入到Struts项目中,一般将其放在Web应用的公共资源目录下。 2. **配置ActionForm**:创建一个ActionForm对象来接收和...

    struts2+FCKeditor-2.3

    Struts2+FCKeditor-2.3 是一个集成解决方案,旨在为Java开发人员提供一个强大的文本编辑器,以便在Web应用程序中实现富文本输入。FCKeditor是一款开源的JavaScript组件,它允许用户在Web页面中编辑HTML内容,类似于...

    jsp编辑器 fckeditor

    最后,`struts2不兼容解决.txt`可能是记录了如何解决FCKeditor与Struts2框架不兼容的具体步骤或建议的文档。通常,这类问题可能涉及到Action的配置、拦截器的设置,或者是请求处理流程中的其他环节。 【标签】:...

    FckEditor在SSH中的配置

    3. **配置Struts2**:在Struts2的配置文件(如`struts.xml`)中添加一个Action,用于处理FCKeditor上传的文件。这个Action通常会使用`CommonsFileUpload`库来处理文件上传。 4. **在页面中引入FCKeditor**:在JSP...

    FCKeditor配置

    本文将深入探讨如何将FCKeditor 2.4版本集成到SSH(Struts2、Hibernate、Spring)框架中,并解决可能出现的问题。 **1. 集成FCKeditor** 首先,在`web.xml`文件中,你需要配置一个名为`Connector`的Servlet,这个...

    fckeditor-java-2.6-src

    7. **常见问题解答**:列出了一些在使用过程中可能遇到的问题及解决方案,帮助开发者避免和解决错误。 总之,"fckeditor-java-2.6-src"是开发Java应用时,集成富文本编辑功能的重要参考资料。通过阅读源代码和使用...

    fckeditor-java-2.5-bin.zip

    2. **丰富的编辑功能**:它支持字体样式设置、段落格式调整、图片上传和插入、链接创建、表格操作等常见的文本编辑功能,使用户能够轻松创建高质量的HTML内容。 3. **自定义集成**:FCKeditor可以方便地集成到任何...

    基于Java使用FCKeditor

    **基于Java使用FCKeditor** FCKeditor是一款流行的开源HTML编辑器,主要用于在Web应用程序中...同时,对于前端开发不熟悉Java的开发者,可以借助Spring MVC、Struts2等MVC框架简化前后端交互,让集成工作更加顺畅。

    FCKEditor 2.6 for java jsp

    3. **图片管理**:FCKEditor 2.6改进了图片上传和管理功能,用户可以方便地上传图片至服务器,并在编辑器中预览和插入,提供了良好的图像编辑体验。 4. **Flash集成**:对于网页中的多媒体元素,FCKEditor 2.6也支持...

    FCKeditor java在线编辑器

    2. **配置路径**:将FCKeditor的静态资源文件(如JavaScript、CSS、图片等)部署到Web应用的公共静态资源目录下,例如`/WEB-INF/fckeditor/`。 3. **引入JavaScript库**:在需要使用编辑器的JSP页面中,通过`...

    需要fckeditor的朋友

    3. **配置Servlet**:FCKeditor通常通过一个Servlet来处理上传文件和图片。在web.xml文件中,需要配置FCKeditor的Servlet映射,指定URL路径和Servlet类。 4. **编辑JSP页面**:在需要使用富文本编辑功能的JSP页面中...

    fckeditor在线编辑器工具包

    **文件上传包** 是FCKeditor的一个重要组成部分,它允许用户在编辑过程中直接上传图片、文档等文件到服务器。这个功能通过集成的文件管理器实现,用户可以浏览、选择、上传和管理服务器上的文件。文件上传功能对于...

    FCKeditor_2.6.3.zip jsp编辑器

    总之,这个压缩包提供了一个完整的解决方案,用于在jsp网站中集成FCKeditor 2.6.3版本的富文本编辑器,并且包含了详细的配置和修改指导,对于Java开发者来说,是一个非常实用的资源。通过遵循提供的配置文档,开发者...

    jsp中fckeditor的几种使用,一看便知。

    此外,FCKeditor还支持上传图片、文件,需要配置相应的服务器端处理逻辑。例如,你可以设定图片上传的URL: ```javascript oFCKeditor.Config['FilebrowserBrowseUrl'] = '() %&gt;/fckeditor/browse.php' ; ...

    fck2.4编辑器,Java版本

    在描述中提到的“解决上传图片问题”,意味着Fck2.4编辑器已经处理了与图片上传相关的技术细节。这通常包括文件上传控件的集成、文件大小限制、文件类型检查以及上传后的路径管理。在Java环境中,这可能涉及到...

    FCK 使用指南.doc

    3. **解决与Struts2不兼容问题**: - 如果在使用FCKeditor时遇到与Struts2框架不兼容的问题,可以通过修改web.xml文件中的Struts2过滤器配置来解决。具体做法是将Struts2的处理范围限制在特定的URL模式上,例如`*....

Global site tag (gtag.js) - Google Analytics