1、    kindeditor 灌水 (下载地址,demo)

 
       经过两天的折磨,又源代码,又官网学习,又网络搜索的,终于成功的嵌入KindEditor了。

KindEditor确实是个不错的富文本编辑器,纯JS,比起JQuery写的,夸浏览器更佳。
所以在多种富文本编辑器中,死死认定了KE就是我要的~~

网站里有相应的DEMO以及解说
 
         KE除了图片上传(个人浅见),其他功能并不会涉及到框架问题。
 
2、图片上传改动:
将KE嵌入项目之后,找到进入plugins -- image ,打开image.html
A、找到  var imageUploadJson = (typeof KE.g[id].imageUploadJson == 'undefined') ? '../../php/upload_json.php' :     KE.g[id].imageUploadJson;  KE默认是用PHP来处理图片上传的,所以改成自己的(如:upload_json.jsp)。
路径要注意咯~~
 
之后就开始写(upload_json.jsp)自己的处理过程了。
因为KE图片上传功能是通过Ajax实现的,所以,对JSONObject这些jar包是免不了的。下载的KE包里有json_simple-1.1.jar。省了功夫去找。
 
 
B、只要对下载下来的JSP(版) 上传文件demo文件里的 upload_json.jsp 进行文件存储路径的修改就可以轻易搞定,完全不需要自己去动工。
 
 
不过如果是用SSH框架,而Struts2 web.xml 配置的Struts过滤器如下的话:

也就是对所有的访问请求进行过滤,那么通常会在使用KE上传本地图片时会报 “服务器发生故障”之类的错误。

Struts2 对 所有 enctype="multipart/form-data"(上传文件用的表单数据类型) 的表单的request进行了封装。打包成MultiPartRequestWrapper 。这就导致拿不到原本的request了。
有个简单的方法是将url-pattern 标签里的内容改成其他的,如:*.action 。在路径以及其他的小问题都有注意修改的情况下,这样就可以上传图片成功了,并且可以在textarea里看到图片。
 
      不过,又会有其他的问题产生,比如,你的网页经常性用到 struts-tag 标签,那么可能就会报 404 或者 500 的错误,因为普通jsp网页在没有调用action时,使用struts标签会访问不到元素。
又一个纠结(悲剧,项目做到后面才去玩KE,所以,还是不改动url了)~~ 自己写action处理上传吧,也不怎么奏效。
 
查了查资料,其实,这是struts带给我们的方便。在不改动<url-pattern>/*</ url-pattern>的情况下重写upload_json.jsp
 
3、代码:
 
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@page import="org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper"%>
<%@page import="java.util.concurrent.locks.*" %>
<%@page import="java.io.*" %>
<%@ page import="org.json.simple.*" %>
 
<%
//Struts2 请求 包装过滤器
MultiPartRequestWrapper wrapper = (MultiPartRequestWrapper)request;
//获得上传的文件名
String fileName = wrapper.getFileNames("imgFile")[0];
//获得未见过滤器
File file = wrapper.getFiles("imgFile")[0];
//----------重新构建上传文件名---------
final Lock lock = new ReentrantLock();
String newName = null;
lock.lock();
try{
//加锁为防止文件名重复
newName = System.currentTimeMillis()
  +fileName.substring(fileName.lastIndexOf("."),
  fileName.length());
}finally{
lock.unlock();
}
//------锁结束---------
//获取文件输出流
FileOutputStream fos = new FileOutputStream(request.getSession()
.getServletContext().getRealPath("/")
+"team/" + newName);
//设置 KE 中的图片文件地址
String newFileName = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ request.getContextPath() + "/team/" + newName;
byte[] buffer = new byte[1024];
//获取内存中当前文件输入流
InputStream in = new FileInputStream(file);
try{
int num = 0;
while((num = in.read(buffer)) > 0){
fos.write(buffer,0,num);
}
}catch(Exception e){
e.printStackTrace(System.err);
}finally{
in.close();
fos.close();
}
//发送给 KE 
 
JSONObject obj = new JSONObject();
obj.put("error", 0);
obj.put("url", newFileName);
out.println(obj.toJSONString());
%>
               OK,成功了~~ 总算搞定了~~

SSH(Struts2 + Hibernate + Spring)嵌入 KindEditor(KE)的更多相关文章

  1. 工作笔记3.手把手教你搭建SSH(struts2+hibernate+spring)环境

    上文中我们介绍<工作笔记2.软件开发经常使用工具> 从今天開始本文将教大家怎样进行开发?本文以搭建SSH(struts2+hibernate+spring)框架为例,共分为3步: 1)3个 ...

  2. ssh(Struts2+hibernate+spring)简单分页

    实体类+实体映射+entity(pagebean)+dao层+service层+action层

  3. Struts2+Hibernate+Spring 整合示例

    转自:https://blog.csdn.net/tkd03072010/article/details/7468769 Struts2+Hibernate+Spring 整合示例 Spring整合S ...

  4. struts2+hibernate+spring简单整合且java.sql.SQLException: No suitable driver 问题解决

    最近上j2ee的课,老师要求整合struts2+hibernate+spring,我自己其实早早地有准备弄的,现在都第9个项目了,无奈自己的思路和头绪把自己带坑了,当然也是经验问题,其实只是用myec ...

  5. Struts2+Hibernate+Spring(SSH)三大框架整合jar包

    Struts2 + Spring3 + Hibernate3 框架整合 1. 每个框架使用 (开发环境搭建 )* 表现层框架 struts2 1) jar包导入: apps/struts2_blank ...

  6. Struts2+hibernate+spring 配置事物

    今天自信看了看hibernate的事物配置问题,转载了其他人的日志,仅用来学习. struts+hibernate+spring事务配置 (2009-01-14 21:49:47) 转载▼ 标签: i ...

  7. SSH整合(Struts2+hibernate+spring)

    1.创建表 create table t_user( id int primary key auto_increment, username varchar(50), password varchar ...

  8. SSH(struts2+hibernate+spring)总结

    1 前三个文章 是我对ssh的具体实现 虽然没有真的写一个ssh的例子出来 但是 意思应该传达到了 主要还是注解注入的ssh太模块化了 感觉写出来意义不大 个人水平有限 说不清 2 我一开是写的是st ...

  9. struts2+hibernate+spring注解版框架搭建以及简单测试(方便脑补)

    为了之后学习的日子里加深对框架的理解和使用,这里将搭建步奏简单写一下,目的主要是方便以后自己回来脑补: 1:File--->New--->Other--->Maven--->M ...

随机推荐

  1. 【Surrounded Regions】cpp

    题目: Given a 2D board containing 'X' and 'O', capture all regions surrounded by 'X'. A region is capt ...

  2. [转载]robotium脚本封装为APK,实现脱离手机数据线,使用按钮点击控制用例

    原文地址:robotium脚本封装为APK,实现脱离手机数据线,使用按钮点击控制用例运行作者:机器,猫 最近一直在完成一些robotium的小功能,用来更方便的完成一些小功能的测试,或者可以说用来娱乐 ...

  3. Python-S9-Day89_stark总结

    01 Stark总结 02 ORM总结 03 上节作业 04 Stark组件之查看页面表头 05 list_display_links 06 stark组件之添加页面 07 编辑删除页面 01 Sta ...

  4. AngularJs 特性 之 模块化

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. java.net.BindException: Permission denied

    端口号报错: 解决办法:把端口号改为1000以上的,比如8080

  6. HDU 4614 Vases and Flowers(线段树+二分)

    Vases and Flowers Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others ...

  7. iOS-app发布证书和调试证书配置

    iOS-app发布证书.真机调试证书.测试证书.推送证书详细过程 更重要的是让你彻底明白为什么要这样配置证书 说句废话:凡事当你弄清楚为什么时,就揭开了它复杂和神秘的面纱 正文开始 一:发布证书 遵旨 ...

  8. python 小练习1

    _input = ['I',6,6,'love','python',6] _str = '' _sum = 0 for item in _input: if isinstance(item,str): ...

  9. Connect(bzoj 1948)

    Description 给定一个R*C大小的迷宫,其中R,C均为奇数 迷宫中坐标为两个奇数的点不能通过,称为障碍,迷宫中其他不能通过的点统称为墙壁 坐标为两个偶数的点可以通过,称为房间,迷宫中其他可通 ...

  10. 洛谷P1103 书本整理

    题目描述 Frank是一个非常喜爱整洁的人.他有一大堆书和一个书架,想要把书放在书架上.书架可以放下所有的 书,所以Frank首先将书按高度顺序排列在书架上.但是Frank发现,由于很多书的宽度不同, ...