搞了几天终于把“fckeditor 2.6.4 + fckeditor.java 2.4.1(图片上传)”搞定;
相应的jar包和fckeditor的js包可以到"www.fckeditor.net"上下载
1, pom.xml中添加:
<!--start fckeditor-->
<dependency>
<groupId>net.fckeditor</groupId>
<artifactId>java-core</artifactId>
<version>2.4.1</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-nop</artifactId>
<version>1.5.2</version>
</dependency>
<!--end fckeditor-->
2,web.xml中添加
<!-- fckeditor 2.6.4 with fckeditor.java 2.4.1 -->
<servlet>
<servlet-name>Connector</servlet-name>
<!-- 默认是jar中的“net.fckeditor.connector.ConnectorServlet”,此处“ConnectorServlet”一般都要重写用于处理中文乱码的-->
<servlet-class>com.derbysoft.dhgroup.core.utils.ConnectorServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Connector</servlet-name>
<!-- “asserts” 是我的“webapp”目录下专门存放js,css,images等的文件夹, fckeditor整套js放在其下-->
<url-pattern>/asserts/fckeditor/editor/filemanager/connectors/*</url-pattern>
</servlet-mapping>
<!-- end fckeditor -->
3,fckeditor.properties文件一定要直接放在classes目录下,否则找不到,报错
其内必写内容:connector.userActionImpl = net.fckeditor.requestcycle.impl.UserActionImpl
选择内容:1、上传文件/图片等存放的地址:connector.userFilesPath = /upload/fckeditor
2、fckeditor包的存放地址:fckeditor.basePath = /asserts/fckeditor
等等
4, jsp页面上有三种写法,此处选其一
<FCK:editor instanceName="promotion.content" value="${promotion.content}" width="90%" height="400" basePath="<%=FCKPATHH%>"></FCK:editor>
5,获得fckeditor 编辑的内容的值的js
var oEditor = FCKeditorAPI.GetInstance("promotion.content");
$('promotion.content').value = oEditor.GetXHTML(true);
6,关于fckeditor包的瘦身问题,可以参考http://zhidao.baidu.com/question/98933664.html,但
“FCKConfig.*****BrowserURL”,“FCKConfig。*****UploadURL”这几项不要照着修改,否则也要报错。
我在这次fckeditor应用中遇到的问题:
如6的链接中有一项是将“FCKConfig.ImageBrowserURL”修改为:
FCKConfig.ImageBrowserURL= FCKConfig.BasePath + "filemanager/browser/default/browser.html?Type=Image&Connector=connectors/jsp/connector" ;
我观察fckeditor包发现,php、asp、aspx等都有一个connector.*(文件后缀),而因我下载的fckeditor包中没有jsp文件夹,更不要说connector.jsp了,所以不知他的修改不能应用于我的程序是否因为这个原因。
附1:ConnectorServlet.java
package com.*.core.utils;
import org.apache.commons.fileupload.DiskFileUpload;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.FilenameUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import net.fckeditor.connector.Messages;
import net.fckeditor.handlers.*;
import net.fckeditor.tool.UtilsFile;
import net.fckeditor.tool.UtilsResponse;
import net.fckeditor.tool.Utils;
import net.fckeditor.response.XmlResponse;
import net.fckeditor.response.UploadResponse;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import java.util.UUID;
import java.util.ArrayList;
/**
* Created by IntelliJ IDEA.
* Date: 2009-6-19
* Time: 11:14:24
* To change this template use File | Settings | File Templates.
*/
public class ConnectorServlet extends javax.servlet.http.HttpServlet {
private static final long serialVersionUID = -5742008970929377161L;
private static final Logger logger = LoggerFactory.getLogger(ConnectorServlet.class);
/**
* Initialize the servlet: <code>mkdir</code> <DefaultUserFilesPath>
*/
public void init() throws ServletException, IllegalArgumentException {
String realDefaultUserFilesPath = getServletContext().getRealPath(
ConnectorHandler.getDefaultUserFilesPath());
File defaultUserFilesDir = new File(realDefaultUserFilesPath);
UtilsFile.checkDirAndCreate(defaultUserFilesDir);
logger.info("ConnectorServlet successfully initialized!");
}
/**
* Manage the <code>GET</code> requests (<code>GetFolders</code>,
* <code>GetFoldersAndFiles</code>, <code>CreateFolder</code>).<br/>
*
* The servlet accepts commands sent in the following format:<br/>
* <code>connector?Command=<CommandName>&Type=<ResourceType>&CurrentFolder=<FolderPath></code>
* <p>
* It executes the commands and then returns the result to the client in XML
* format.
* </p>
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
logger.debug("Entering ConnectorServlet#doGet");
response.setCharacterEncoding("UTF-8");
response.setContentType("application/xml; charset=UTF-8");
response.setHeader("Cache-Control", "no-cache");
PrintWriter out = response.getWriter();
String commandStr = request.getParameter("Command");
String typeStr = request.getParameter("Type");
String currentFolderStr = request.getParameter("CurrentFolder");
logger.debug("Parameter Command: {}", commandStr);
logger.debug("Parameter Type: {}", typeStr);
logger.debug("Parameter CurrentFolder: {}", currentFolderStr);
XmlResponse xr;
if (!RequestCycleHandler.isEnabledForFileBrowsing(request))
xr = new XmlResponse(XmlResponse.EN_ERROR, Messages.NOT_AUTHORIZED_FOR_BROWSING);
else if (!CommandHandler.isValidForGet(commandStr))
xr = new XmlResponse(XmlResponse.EN_ERROR, Messages.INVALID_COMMAND);
else if (typeStr != null && !ResourceTypeHandler.isValid(typeStr))
xr = new XmlResponse(XmlResponse.EN_ERROR, Messages.INVALID_TYPE);
else if (!UtilsFile.isValidPath(currentFolderStr))
xr = new XmlResponse(XmlResponse.EN_ERROR, Messages.INVALID_CURRENT_FOLDER);
else {
CommandHandler command = CommandHandler.getCommand(commandStr);
ResourceTypeHandler resourceType = ResourceTypeHandler.getDefaultResourceType(typeStr);