著名WEB文本编辑器开发社区FCKeditor在官方网站www.fckeditor.net推出Fckeditor 2.6.xBeta版本,官方消息称在8月初将发布其正式稳定版本,另人期待:)在http://www.fckeditor.net/whatsnew可一看到每个版本所做的改动FCKeditor得到了越来越多人的支持,轻量级的FCKeditor被众多网站所使用,希望能做的更好.话不多说,接下来我们如何用FCKeditor 2.6加上Java Fckeditor运行包2.4版本来构建一个能正常上传文件的WEB文本编辑器.在最后附上我的测试Demo给大家1,准备:测试服务器resin 3.0.x,JDK 1.6 ,XPSP2系统FCKeditor 2.6 公用文件:下载:http://www.fckeditor.net/whatsnewFCKeditor 2.4 Java 上传驱动包先申明一下,FCKeditor 2.4 Java比以前的2.3 java上传驱动更好设置,上传功能也实现的比以前的要完美.但还需要以下4个组件包:slf4j-api-1.5.2.jarslf4j-jdk14-1.5.2.jar地址:http://www.slf4j.org/download.htmlslf4j下载后解压只选择里面的以上两个包即可.commons-io-1.4.jar地址:http://commons.apache.org/io/commons-fileupload-1.2.1.jar地址:http://commons.apache.org/fileupload/FCKeditor 2.4 Java下载:http://www.fckeditor.net/downloadFCKeditor 里面附带web.xml将准备的jar java包放到我们的测试工程目录WEB-INF/lib下把FCKeditor 2.4 Java解压出来的web.xml放到WEB-INF/下及FCKeditor2.4.jar放到lib下并把web.xml里的<web-app version="2.4" id="fckeditor-java" xmlns="http://java.sun.com/xml/ns/j2ee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"><display-name>FCKeditor.Java Sample Web Application</display-name>修改为<web-app xmlns="http://caucho.com/ns/resin" xmlns:resin="http://caucho.com/ns/resin/core"><display-name>www.txdnet.cn</display-name>resin的web-app信息工程目录即为ROOT根目录,方便测试.在WEB-INF/classes里建立如下资源文件:fckeditor.propertiesfckeditor的信息即在这个文件里设置.文件参数:connector.userFilesPath=/UserUploadFileconnector.userActionImpl=net.fckeditor.requestcycle.impl.UserActionImpl###此处不写入资源文件则默认放在userFilesPath目录下####connector.resourceType.file.path#connector.resourceType.image.path#connector.resourceType.flash.path#connector.resourceType.media.path###########################################connector.resourceType.file.extensions.allowed=|jpg|gif|png|rar|zip|txt|doc|wma|wmv|mp3|flv|swf|connector.resourceType.file.extensions.denied=|com|exe|jsp|html|htm|shtml|bat|connector.resourceType.media.extensions.allowed=|wma|wmv|mp3|flv|swf|connector.resourceType.media.extensions.denied=|com|exe|jsp|html|htm|shtml|bat|connector.resourceType.image.extensions.allowed=|jpg|png|gif|connector.resourceType.image.extensions.denied=|com|exe|jsp|html|htm|shtml|bat|connector.resourceType.flash.extensions.allowed=|swf|connector.resourceType.flash.extensions.denied=|com|exe|jsp|html|htm|shtml|bat|将Fckeditor 2.6公用文件解压放到ROOT下大体的文件目录位置如下:ROOT||-WEB-INF/| |-lib...(5个jar包)| |-classes...(一个资源文件)| |-web.xml|-fckeditor/...(目录下有fckeditor.js,editor文件夹)|-index.jsp(测试fckeditor文件)|-GetData.jsp(得到提交信息并显示)web.xml里只需要写上很少一段配置即可使用上传:<servlet><servlet-name>Connector</servlet-name><servlet-class>net.fckeditor.connector.ConnectorServlet</servlet-class><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>Connector</servlet-name><url-pattern>/fckeditor/editor/filemanager/connectors/*</url-pattern></servlet-mapping>2,测试文件index.jsp;GetData.jsp代码(用EditPlus编辑保存为UTF-8):**************************************index.jsp代码<?xml version="1.0" encoding="UTF-8" ?><%@ page contentType="text/html; charset=UTF-8"language="java" import="java.io.*,java.net.*"buffer="32kb"autoFlush="true" %><%@ page pageEncoding="UTF-8" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title></title><script type="text/javascript" src="fckeditor/fckeditor.js"></script><style type="text/css"><!--body{ font-family:Verdana,Arial,Helvetica,sans-serif;font-size:13px}#Layer1{position:absolute;left:18px;top:5px;width:660px;height:500px;z-index:1}#Content{width:500px;height:420px}--></style></head><body><form id="FCKForm" name="FCKForm" ACTION="GetData.jsp" METHOD="POST"><script type="text/javascript" language="javascript">var oFCKeditor = new FCKeditor('editor') ;oFCKeditor.BasePath ='/fckeditor/';oFCKeditor.ToolbarSet ='Default';oFCKeditor.Value ='测试Fckeditor';oFCKeditor.Create() ;</script><INPUT TYPE="submit"></form></body></html>******************************GetData.jsp代码<?xml version="1.0" encoding="UTF-8" ?><%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8" import="java.util.Enumeration;"%><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><title>FCKeditor - Samples - Posted Data</title><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head><%Enumeration<String> params = (Enumeration<String>) request.getParameterNames();%><body><h1>FCKeditor - Samples - Posted Data</h1>This page lists all data posted by the form.<hr /><table width="100%" border="1" cellspacing="0"><tr style="FONT-WEIGHT: bold; COLOR: #dddddd; BACKGROUND-COLOR: #999999"><td nowrap="nowrap">Field Name </td><td>Value</td></tr><%String parameter;while(params.hasMoreElements()) {parameter = params.nextElement();%><tr><td nowrap="nowrap"><b><%=parameter%></b></td><td width="100%"><%=request.getParameter(parameter)%></td></tr><%}%></table></body></html>3,运行测试上传一切OK 见图4,小技巧:1)上传文件名自动变成日期数字格式如20080727185907500.gif/.rar/.doc/.gif等等在下载的FCKEditor 2.4 For Java中解压得到原码找到这个Java Class原文件ConnectorServlet.java在Class中import以下外部类import java.text.*;import java.util.*;在Class中增加一个方法//Edit By Txdnet.Cnpublic static final String getStrDate(int int_dateFormat ){String[] dateFormat = {"yyyyMMddHHmmssSSS","yyyyMMddHHmmss","yyMMddHHmmss","yyyyMMdd","yyyy-MM-dd","HHmmssSSS","HHmmss"};SimpleDateFormat sdf = null;try{sdf = new SimpleDateFormat(dateFormat[int_dateFormat]);}catch(Exception ex){ex.printStackTrace();System.out.print(ex.toString());return ex.toString();}return sdf.format(new Date());}//End Edit将POST处理方法中的String baseName =FilenameUtils.removeExtension(filename);改为String baseName =getDate(0); //FilenameUtils.removeExtension(filename);并在String extension = FilenameUtils.getExtension( filename );下行增加//Edit By TXDNET.CNfilename = baseName.concat(".").concat( extension.toLowerCase() );//END Edit重新编译打包成FCKeditor2.4ByTxdnet.jar覆盖lib原来的FCKeditor2.4.jar2)限制上传文件的权限,FCKEditor 2.4 For Java提供了相应的UserAction接口,可以实现一个类来控制权限.Java代码 package com.tail.utils; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import net.fckeditor.requestcycle.UserAction; import com.tail.beans.Principal; import com.tail.objects.User; public class UserActionImpl implements UserAction { public boolean isEnabledForFileBrowsing(HttpServletRequest req) { return true; } public boolean isEnabledForFileUpload(HttpServletRequest req) { HttpSession session = req.getSession(); Principal principal = (Principal) session.getAttribute(ConstantUtil.SESSION_PRINCIPAL); if (principal != null) { User user = principal.getUser(); if (user.isUploadable()) { return true; } } return false; } } 如何加载自定义的UserAction类呢?在classes的根目录下,你需要在fckeditor.properties文件中定义:connector.userActionImpl=com.tail.utils.UserActionImpl 这样就可以控制文件上传权限.5,总结.FCKeditor 2.4可以说是一个小的飞跃,改变了以往在web.xml中让很多人迷糊的设置,对上传处理可以做到令人满意的效果,故写了这篇文章与大家分享.问题:中文文件上传仍然是个问题,但以往个人在设计上传类时却没有碰到这个问题,推测原因是:虽然FCKeditor包括For java包类都做到统一编码,但忽略了一点,编写的java类源文件仍然是系统默认的,是随系统改变的,据个人的经验,如果编写的java原文件通过 EditPlus(或其他能很好处理编码的文本编辑器)另存为utf-8格式的java文件 再加入javac -encoding utf-8编译指令手动生成class,在加上一些统一编码的措施(过滤器,String转码)就能够保存中文名文件和读取有中文名的文件和目录,期待以后的版本能够解决.在上传文件目录的设置上存在疑问,如果fckeditor及调用的jsp不在ROOT下呢?或其他目录的使用上,个人没做过更多的测试,Happy漫步者在此还望大家多多交流经验:)6,测试Demo下载(500kb) -------------- http://www.txdnet.cn/ShowListEssay-2-1-Txdnet.jsp

评论