项目结构如下:
准备工作:http://ckeditor.com/download下载ckeditor(本例中使用的是3.2版本),下载完后,解压拷贝到WebContent目录下,导入smartupload.jar包,用于处理图片和视频的上传。创建upload文件夹用于存放图片和上传的视频。
①修改ckeditor目录下的config.js文件
CKEDITOR.editorConfig = function( config )
{
// Define changes to default configuration here. For example:
// config.language = 'fr';
// config.uiColor = '#AADC6E';
config.language='zh-cn';//配置语言
config.uiColor='#FFF';//背景颜色
config.width="auto";//宽度
config.height='300px';//高度
config.skin='office2003';
config.toolbar='Full';//工具栏风格Full,Basic
config.font_names='宋体/宋体;黑体/黑体;仿宋/仿宋_GB2312;楷体/楷体_GB2312;隶书/隶书;幼圆/幼圆;'+config.font_names;//将中文字体添加到字体列表
};
②index.jsp页面如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>在线编辑器CKeditor的应用</title>
</head>
<script type="text/javascript" src="<%=basePath%>ckeditor/ckeditor.js"></script>
<body>
<h2>在线编辑器CKeditor的应用</h2>
<form action="CKeditorContextSave" method="post" onsubmit="return checkEditor()">
<textarea name="editor2" id="editor2" rows="10" cols="80"></textarea>
<br/>
<input type="submit" value="提交"/>
</form>
</body>
<!-- 注意此处javascript代码要在后面,不然会找不到editor2 -->
<script type="text/javascript">
CKEDITOR.replace('editor2',{
filebrowserImageUploadUrl:'<%=basePath%>fileUpload?type=image',
filebrowserFlashUploadUrl:'<%=basePath%>fileUpload?type=flash'
});
function checkEditor(){
var editor_data = CKEDITOR.instances.editor2.getData();
if(editor_data == ""){
alert("编辑器内容不能为空,请输入具体内容后提交");
return false;
}else
return true;
}
</script>
</html>
③CKeditorFileUpload.java代码如下:(处理图片和视频的上传)
package com.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.lxh.smart.SmartUpload;
public class CKeditorFileUpload extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setContentType("text/html");
PrintWriter out = resp.getWriter();
resp.setCharacterEncoding("utf-8");
req.setCharacterEncoding("utf-8");
StringBuffer sb = new StringBuffer();
sb.append("<script type=\"text/javascript\">\n");
String type=req.getParameter("type");
String allowList = "rar,zip";
String errMsg = "对不起,文件上传失败!";
if(type.equalsIgnoreCase("image")){
allowList = "gif,jpg,png,bmp,tif";
}else if(type.equalsIgnoreCase("video")){
allowList = "flv";
}else if(type.equalsIgnoreCase("flash")){
allowList = "swf";
}
String basePath = getServletContext().getRealPath("/upload").replaceAll("\\\\", "/");
try {
ServletConfig config = getServletConfig();
SmartUpload mySmartUpload = new SmartUpload();
mySmartUpload.initialize(config,req,resp);
mySmartUpload.setAllowedFilesList(allowList);
mySmartUpload.upload();
//实现文件上传
if(mySmartUpload.getFiles().getFile(0).getFileName().trim().length()>0){
System.out.println(new String(mySmartUpload.getFiles().getFile(0).getFileName().getBytes(),"utf-8"));
String fileName = String.valueOf(System.currentTimeMillis())+"."+mySmartUpload.getFiles().getFile(0).getFileExt();
mySmartUpload.getFiles().getFile(0).saveAs(basePath+"/"+fileName);
//上传成功后返回文件的引用地址
sb.append("window.parent.CKEDITOR.tools.callFunction(1,'"+req.getContextPath()+"/upload/"+fileName+"');\n");
}else{
//为选择上传文件时提示错误信息
errMsg = "对不起,文件不能为空,请选择文件后上传!";
errMsg = new String(errMsg.getBytes(),"utf-8");
sb.append("window.parent.CKEDITOR.tools.callFunction(1,'"+errMsg+"');\n");
}
} catch (Exception e) {
e.printStackTrace();
errMsg = new String(errMsg.getBytes(),"iso8859-1");
sb.append("window.parent.CKEDITOR.tools.callFunction(1,'"+errMsg+"');\n");
}
sb.append("</script>\n");
out.println(sb.toString());
out.flush();
out.close();
}
}
④CKeditorContextSave.java代码如下:(将输入的内容保存后显示,此处实例没保存直接显示)
package com.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class CKeditorContextSave extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doPost(req, resp);
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException ,IOException {
req.setCharacterEncoding("utf-8");
String context = req.getParameter("editor2");
System.out.println(context);
req.setAttribute("context", context);
req.getRequestDispatcher("process.jsp").forward(req, resp);
};
}
⑤web.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<servlet>
<servlet-name>CKeditorFileUpload</servlet-name>
<servlet-class>com.servlet.CKeditorFileUpload</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CKeditorFileUpload</servlet-name>
<url-pattern>/fileUpload</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>CKeditorContextSave</servlet-name>
<servlet-class>com.servlet.CKeditorContextSave</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CKeditorContextSave</servlet-name>
<url-pattern>/CKeditorContextSave</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>/index.jsp</welcome-file>
</welcome-file-list>
</web-app>
⑥process.jsp代码如下:(仅用于显示输入的内容)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
String context = (String)request.getAttribute("context");
out.println(context);
%>
</body>
</html>
⑦效果如下:
点击提交后: