`
chensl
  • 浏览: 57926 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

struts2和fck冲突造成无法上传图片或文件问题解决办法

阅读更多
struts2和fck冲突造成无法上传图片或文件问题解决办法
fck 在 struts2上不能上传文件的问题,struts2和fck冲突造成无法上传图片或文件,
原因是struts在web.xml中配制的过滤器把fck的servlet请求转发了。
解决办法是自实现一个过滤器ExtendStrutsFilter,继承struts2默认的过滤器StrutsPrepareAndExecuteFilter
用这个类替换掉web.xml中的struts过滤器类StrutsPrepareAndExecuteFilter就可以了

源码如下:

package com.sinowell.fckeditor;
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;

/**
* @author Rain
* 这个类用来解决struts2和fck冲突造成无法上传图片或文件 的问题,原
* 因是struts在web.xml中配制的过滤器把fck的servlet请求转发了。
* 用这个类替换掉web.xml中的struts过滤器类StrutsPrepareAndExecuteFilter就可以了
*/
public class ExtendStrutsFilter extends StrutsPrepareAndExecuteFilter {
   
    @Override
    public void doFilter(ServletRequest req, ServletResponse res,FilterChain chain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) req;
        //不过滤的url,可以不断添加,如fck可用/fckeditor/editor/filemanager/connectors/fileupload,下面的是flex
        if (request.getRequestURI().indexOf("/fckeditor/editor/filemanager/connectors")>0) {
            //System.out.println("使用自定义的过滤器");
            chain.doFilter(req, res);
        }else{
            //System.out.println("使用默认的过滤器");
            super.doFilter(req, res, chain);
        }
    }
}

在web.xml中:
<!-- struts -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>com.sinowell.fckeditor.ExtendStrutsFilter</filter-class><!-- 替换掉默认的过滤器org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter -->
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>




参考:StrutsPrepareAndExecuteFilter学习笔记

package org.apache.struts2.dispatcher.ng.filter;

import org.apache.struts2.StrutsStatics;
import org.apache.struts2.dispatcher.Dispatcher;
import org.apache.struts2.dispatcher.ng.PrepareOperations;
import org.apache.struts2.dispatcher.ng.ExecuteOperations;
import org.apache.struts2.dispatcher.ng.InitOperations;
import org.apache.struts2.dispatcher.mapper.ActionMapping;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
* Handles both the preparation and execution phases of the Struts dispatching process.  This filter is better to use
* when you don't have another filter that needs access to action context information, such as Sitemesh.
*/
public class StrutsPrepareAndExecuteFilter implements StrutsStatics, Filter {
    private PrepareOperations prepare;
    private ExecuteOperations execute;
//初始化过滤器
    public void init(FilterConfig filterConfig) throws ServletException {
        InitOperations init = new InitOperations(); //初始化辅助对象,封装了初始化的一些操作
        try {
            FilterHostConfig config = new FilterHostConfig(filterConfig); //对filterConfig进行封装
            init.initLogging(config); //通过config,初始化内部Struts的记录

            Dispatcher dispatcher = init.initDispatcher(config); //通过config,创建并初始化dispatcher

            init.initStaticContentLoader(config, dispatcher); //通过config和dispatcher,初始化与过滤器相关的静态内容加载器

            prepare = new PrepareOperations(filterConfig.getServletContext(), dispatcher); //通过config和dispatcher,创建request被处理前的系列操作对象
            execute = new ExecuteOperations(filterConfig.getServletContext(), dispatcher);//通过config和dispatcher,创建处理request的系列操作对象

        } finally {
            init.cleanup(); //清空ActionContext
        }

    }

    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {

        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) res;

        try {
            prepare.createActionContext(request, response); //创建ACTIONCONTEXT,并初始化Theadlocal
            prepare.assignDispatcherToThread(); //指派dispatcher给Theadlocal
            prepare.setEncodingAndLocale(request, response); //设置request的编码和LOCAL
            request = prepare.wrapRequest(request); //封装request
            ActionMapping mapping = prepare.findActionMapping(request, response); //查找并选择创建ActionMapping
            if (mapping == null) { //如果映射不存在
                boolean handled = execute.executeStaticResourceRequest(request, response); //试图执行一个静态资源的请求
                if (!handled) {
                    chain.doFilter(request, response);
                }
            } else { //如果存在映射
                execute.executeAction(request, response, mapping); //执行action
            }
        } finally {
            prepare.cleanupRequest(request); //清除request的Threadlocal
        }
    }

    public void destroy() {
        prepare.cleanupDispatcher();
    }
}
分享到:
评论

相关推荐

    FCK集成图片批量上传

    **FCK编辑器集成图片批量上传详解** ...以上就是关于FCKeditor集成图片批量上传及其水印功能的详细解释,通过这些步骤,开发者可以为自己的网站或应用程序提供一个高效、便捷且安全的图片上传解决方案。

    fck文件上传模板

    综上所述,“fck文件上传模板”是一个包含FCKeditor文件上传功能的示例或配置,对于理解和实现FCKeditor的文件上传功能具有参考价值。通过深入研究和理解这些知识点,开发者可以有效地集成和定制FCKeditor的文件上传...

    php fck文件夹及上传图片中文乱码问题解决方法

    然而,在实际使用过程中,可能会遇到一个问题:当上传包含中文字符的文件或图片时,文件名显示为乱码。这个问题主要涉及到字符编码和PHP的处理方式。本文将详细讲解如何解决FCKeditor在处理中文文件名时出现乱码的...

    FCK在服务器上上传图片问题的解决方法

    ### FCK在服务器上上传图片问题的解决方法 在网站开发过程中,经常需要用到富文本编辑器,其中FCKeditor是一款非常流行的开源富文本编辑器。然而,在实际部署应用时,可能会遇到服务器上无法正常上传图片的问题。...

    FCK(fckeditor)远程图片上传功能

    2. **安全性考量**:由于远程图片上传可能会引发安全问题,如滥用服务器带宽或存储空间,因此需要设置白名单或者限制上传的域名。这可以通过`Config.RemoteImageUploadAllowedDomains`和`Config....

    解决fck上传中文名的图片乱码的问题

    在IT行业中,FCKeditor是...总之,解决FCKeditor上传中文名图片乱码问题的关键在于确保所有环节的字符编码一致,包括编辑器、服务器、数据库和前端页面。通过调整这些设置,可以确保中文文件名在上传和显示时的正确性。

    FCk上传图片和文案

    1. 用户在FCKeditor中选择要上传的图片或文档。 2. FCKeditor通过异步请求(通常是AJAX)将文件数据发送到后台服务。 3. 后台服务接收到文件后,进行合法性检查,如文件类型、大小限制等。 4. 文件被保存到服务器的...

    可以上传中文图片的FCK编辑器

    《掌握FCK编辑器:实现中文图片上传功能》 FCKeditor是一款强大的开源在线文本编辑器,它使得在网页上创建和编辑富文本内容变得轻松易行。然而,原版的FCKeditor存在一个限制,即仅支持数字或字母命名的图片上传。...

    Fck上传图片 falsf file 文件 配置 以及源码

    这个压缩包文件的标题和描述提到的“Fck上传图片 falsf file 文件 配置 以及源码”,显然与FCKeditor的图片上传功能有关。下面我们将深入探讨这一主题。 FCKeditor的图片上传功能是通过一个名为"FCKeditor Upload ...

    C# .NET FCK 编辑器例子(更新了不能在服务器上传图片的问题)

    在本示例中,"C# .NET FCK 编辑器例子"着重解决了在服务器上无法上传图片的问题,这通常是由于服务器配置、文件路径或权限设置不正确导致的。 首先,我们需要理解FCKeditor的工作原理。它通过JavaScript与服务器端...

    fck例子,采用与STRUTS2兼容的FCK插件

    fck例子,采用与STRUTS2兼容的FCK插件,良好解决了STRUTS2与FCKEDITOR不兼容的问题。

    c# FCK文本编辑器,可上传文件图片

    C#中的FCKeditor是一款强大的富文本编辑器,它允许用户在Web应用程序中进行文本编辑、图片上传和文件管理。FCKeditor以其易用性和丰富的功能,在开发人员中颇受欢迎,尤其适合那些需要构建内容管理系统或者论坛的...

    ECshop后台商品详细描述 文章内容FCK编辑器无法显示 一片空白 解决方法

    解决此类问题通常需要一定的技术基础,如果以上步骤无法解决问题,可能需要查看ECShop和FCKeditor的官方文档,或者在开发者社区寻求帮助。同时,备份数据并谨慎操作,以免对网站造成不可逆的损害。 在进行任何修改...

    fck实现文件上传并自定文件名和按日期存放位置

    FCKeditor是一款开源的富文本编辑器,它提供了丰富的文本格式化功能,同时也支持用户上传图片和其他文件。在这个场景下,我们讨论的是如何利用FCKeditor实现文件上传,并自定义文件名和按日期存放位置。 首先,我们...

    asp.NET 下配置好的fck 可以上传多媒体

    5. **安全性考虑**:为了防止恶意文件上传,服务器端的上传脚本需要进行文件类型检查和大小限制。例如,限制只能上传图片、视频等特定类型的文件,并设定单个文件大小上限。 6. **文件管理器**:FCKeditor内置了一...

    fck资源整合包

    本资源包“fck资源整合包”专注于解决一个常见的问题:图片上传时出现的中文乱码问题,同时整合了三个关键的技术栈:FCKeditor、Struts和Hibernate。下面我们将详细探讨这些技术以及它们在整合中的作用。 FCKeditor...

    强大的FCK编辑器修改版兼容多个浏览器支持图片上传功能

    总的来说,这个FCK编辑器修改版为开发者提供了一个强大且灵活的文本编辑解决方案,尤其对于需要用户生成内容的网站来说,它的图片上传功能更是极大地提升了用户体验。如果你在使用过程中遇到任何问题,可以通过提供...

    fck2.4编辑器,Java版本

    “解决struts2与fck整合后的图片上传无权限问题!”表明Fck2.4编辑器已经处理了与Struts2框架集成时可能出现的权限问题。Struts2是一个强大的MVC框架,广泛用于Java Web开发。在整合FCKeditor时,可能会遇到权限设置...

    可以上传中文图片的FCK编辑器插件

    为了解决这个问题,我们可以通过对FCK编辑器进行一些小的修改,使其能够支持上传带有中文字符的图片。 首先,我们需要理解FCK编辑器的工作原理。FCKeditor内部有一套文件上传处理逻辑,包括文件名的编码和解码过程...

    fck上传等功能不能使用(fck和ie9的问题)

    ### fck上传等功能不能使用(fck和ie9的问题) #### 概述 在使用FCKeditor时,可能会遇到在Internet Explorer 9 (IE9) 浏览器中某些功能无法正常工作的情况,例如文件上传功能。这主要是由于IE9与FCKeditor之间...

Global site tag (gtag.js) - Google Analytics