struts2整合CKEditor和CKFinder实现上传
上一篇文章给大家分享了CKEditor+CKFinder+JSP实现了在线编辑器上传图片的功能,这里在给大家分享一下如何在前面的基础上在struts2下实现这样的功能。
实现与Struts2的整合,整合的过程确实easy.不过实现之后,图片上传不上去,上传之后显示“文件不存在”,然后在网上找了一些资料,经过总结最终实现了这个功能。此问题的原因就是struts2的拦截器,在web.xml中,可以清楚的看到:
- <filter-mapping>
- <filter-name>struts2</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
上面的配置,struts2会拦截所有以"/"开头的URL.
在CKEditor的配置中,CKEditor是使用servlet来实现的,它也是通过拦截URL的机制进行工作的,CKeditor的部分servlet配置如下:
- <servlet-mapping>
- <servlet-name>ConnectorServlet</servlet-name>
- <url-pattern>/ckfinder/core/connector/java/connector.java</url-pattern>
- </servlet-mapping>
现在就很明了了,struts2拦截器会拦截所有以"/"开头的URL,CKEditor的servlet拦截器拦截所有以"
/ckfinder/core/connector/java/connector.java"开头的URL.当时CKEditor上传图片的时 候,URL中包含有"/"(指网站根目录),优先被struts2的拦截器拦截,这样上传的URL请求就不会转发到CKEditor的servlet中, 所有上传图片也就不会成功.
问题所在找到了,那这个问题就好解决了,最简单的办法是将struts2的拦截器"/*"改成"#.action"或者"*.do",可以这样改:
- <filter-mapping>
- <filter-name>struts2</filter-name>
- <url-pattern>*.action</url-pattern>
- </filter-mapping>
第二个办法是:
自己来定义一个CKeditor的过滤器,让它来继承Struts2的过滤器FilterDispatcher,其完整代码是
- package cn.edu.csu.software.filters;
- 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.FilterDispatcher;
- @SuppressWarnings("deprecation")
- public class FCKFilter extends FilterDispatcher {
- public void doFilter(ServletRequest req,ServletResponse res, FilterChain chain) throws IOException, ServletException {
- HttpServletRequest request = (HttpServletRequest) req;
- String URI = request.getRequestURI();
- String[] uriArray = URI.split("/ckfinder/core/connector/java/*/");
- int arrayLen = uriArray.length;
- if (arrayLen >= 2) {
- chain.doFilter(req, res);
- }else {
- super.doFilter(req, res, chain);
- }
- }
- }
上面的方法重写了struts2的过滤器FilterDispatcher中的doFilter方法,执行原理为:获得完整的http url的地址,然后判断URL地址中是否包含CKEditor的servlet拦截规则"/ckfinder/core/connector/java /*/",若包含,struts2就不拦截该URL请求,而直接转发,交给CKEditor的servlet来处理;若不包含,则拦截器拦截该URL请 求,由struts2来处理
自定义的过滤器写完之后,要在web.xml中更改struts2的拦截器类,不能再使用struts2的默认拦截器类 FilterDispatcher 。但是请放心,自定义的过滤器FCKFilter继承了 FilterDispatcher 里的所有的方法,因此项目依然照常运行。
<!-- struts2配置文件 -->
- <filter>
- <filter-name>struts2</filter-name>
- <!--
- <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
- -->
- <filter-class>cn.itcast.utils.FCKFilter</filter-class>
- </filter>
- <filter-mapping>
- <filter-name>struts2</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
本文参考:何枫网友:http://hefeng1987-net-163-com.iteye.com/blog/1231940
struts2整合CKEditor和CKFinder实现上传的更多相关文章
- SpringMVC:学习笔记(10)——整合Ckeditor且实现图片上传
SpringMVC:学习笔记(10)——整合Ckeditor且实现图片上传 配置CKEDITOR 精简文件 解压之后可以看到ckeditor/lang下面有很多语言的js,如果不需要那么多种语言的,可 ...
- (配置)CKEditor+CKFinder+php上传配置,根据年月命名创建文件夹来存放
CKEditor+CKFinder+php上传配置 新版本的CKEditor只提供了基本的文本编辑功能,上传模块由另一个组件CKFinder.这里主要记录CKFinder上传的一些参数配置,能够成功上 ...
- struts2学习笔记之十:文件上传
Struts2的上传 1.Struts2默认采用了apache commons-fileupload 2.Struts2支持三种类型的上传组件 3.需要引入commons-fileupload相关依赖 ...
- Thinkphp整合阿里云OSS图片上传实例
Thinkphp3.2整合阿里云OSS图片上传实例,图片上传至OSS可减少服务器压力,节省宽带,安全又稳定,阿里云OSS对于做负载均衡非常方便,不用传到各个服务器了 首先引入阿里云OSS类库 < ...
- SpringBoot整合Fastdfs,实现图片上传(IDEA)
我们部署Fastdfs,就是为了实现文件的上传. 现在使用idea整合Fastdfs,实现图片上传 部署环境:Centos7部署分布式文件存储(Fastdfs) 利用Java客户端调用FastDFS ...
- WINDOW.PARENT.CKEDITOR.TOOLS.CALLFUNCTION 图片上传
CKEDITOR 编辑器 图片上传 WINDOW.PARENT.CKEDITOR.TOOLS.CALLFUNCTION (CKEditorFuncNum,图片路径,返回信息); CKEditor ...
- [原创]java WEB学习笔记72:Struts2 学习之路-- 文件的上传下载,及上传下载相关问题
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- 关于在Struts2框架下实现文件的上传功能
struts2的配置过程 (1)在项目中加入jar包 (2)web.xml中filter(过滤器)的配置 <?xml version="1.0" encoding=" ...
- CKEditor 自主控制图片上传
在ASP.NET中使用CKEditor编辑器,如果想控制图片上传,即把上传的图片路径名存到数据中,可以自定义一个上传功能 首先自定义CKEditor的配置文件 在config.js中添加以下代码,红色 ...
随机推荐
- C#与数据库访问技术总结(十一)之数据阅读器(DataReader)1
数据阅读器 当执行返回结果集的命令时,需要一个方法从结果集中提取数据. 处理结果集的方法有两个: 第一,使用数据阅读器(DataReader): 第二,同时使用数据适配器(Data Adapter)和 ...
- 深入理解requestAnimationFrame
前言 本文主要参考w3c资料,从底层实现原理的角度介绍了requestAnimationFrame.cancelAnimationFrame,给出了相关的示例代码以及我对实现原理的理解和讨论. 先来看 ...
- 从零开始学Bootstrap(1)
最近需要做一个简单的Web页面. 考虑到前端经验不足,为了快速产出,同时项目只是一个工具,对项目没有什么要求,所以我选择了Bootstrap这个框架作为Web框架. 写从零开始学Bootstrap的初 ...
- jsp实现验证码
在web开发领域里面,验证码是一个比较常见的功能,而归根到底,验证码其实就是一组随机数,或者是一个随机算术 一.基本知识 1.为什么需要验证码? 验证码,很多时候出现在注册页面或者登陆界面,在这些页面 ...
- python pycurl模块
一.pycurl概述 PycURl是一个C语言写的libcurl的python绑定库.libcurl 是一个自由的,并且容易使用的用在客户端的 URL 传输库.它的功能很强大,在PyCURL的主页上介 ...
- jQuery 之父:每天写代码
去年秋天我的支线代码项目 遇到了一些问题,项目进展不足,而且我没法找到一个完成更多代码的方法(在不影响我在Khan Academy方面的工作的前提下). 我主要在周末进行我的支线,当然有时候也在晚上进 ...
- 小白学数据分析----->ARPDAU的价值
最近盛大刚刚发布了财报,有人给我打电话问什么是ARPDAU?ARPDAU能够起到什么作用?本文就这个问题给大家解析一下ARPDAU.在讲ARPDAU之前,有两个概念大家应该很清楚,一个是ARPU,另一 ...
- Lowest Common Ancestor of Two Nodes in a Binary Tree
Reference: http://blog.csdn.net/v_july_v/article/details/18312089 http://leetcode.com/2011/07/lowes ...
- Java 监听器
1: 监听器的定义 2:监听器的用途 3:实例 4:监听器分类 5:Servlet3.0下监听器的使用 6:实际项目常用的案例 1: 监听器的定义: 监听器实际上是一个类,这个类实现了特定的接口,然后 ...
- (ETW) Event Trace for Windows 提高 (含pdf下载)
内容提纲 • 托管代码与非托管代码介绍 • 不安全代码介绍 • 用户模式与内核模式 • ETW执行流程分析 • 日志分析工具介绍:PerfView.exe ETW与非托管代码 • ETW依赖的So ...