在SSH项目中整合FCKeditor文本编辑器

(1) 先到http://www.fckeditor.net/download 下载FCKeditor_2.6rc.zipFCKeditor-2.3.zip。将FCKeditor_2.6rc.zip解压缩,打开解压后的文件夹,将其中的fckeditor更名为FCKeditor总体复制到项目的WebRoot目录下。而后将FCKeditor-2.3.zip压缩包中\web\WEB-INF\lib\目录下的两个jar文件拷到项目的\WEB-INF\lib\目录下,\src\com文件夹总体复制到项目中的src\下。

(2)
合并web.xml,打开原项目的web.xml把压缩包中\web\WEB-INF\web.xml中的如下内容复制到其中。

<!-- FCKeditor servlet  -->  
  <servlet>
<servlet-name>Connector</servlet-name>
<servlet-class>com.fredck.FCKeditor.connector.ConnectorServlet</servlet-class>
<init-param>
<param-name>baseDir</param-name>
         <!—
此处默认为/UserFiles/,能够修改,前面不须要写”/项目名” -->
<param-value>/
项目中用于存放上传文件的文件夹/</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet>
<servlet-name>SimpleUploader</servlet-name>
<servlet-class>com.fredck.FCKeditor.uploader.SimpleUploaderServlet</servlet-class>
<init-param>
<param-name>baseDir</param-name>
<param-value>/
项目中用于存放上传文件的文件夹/</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>enabled</param-name>
            <!—
此处默认为false,表示是否开启上传,须要修改 -->
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>AllowedExtensionsFile</param-name>
<param-value></param-value>
</init-param>
<init-param>
<param-name>DeniedExtensionsFile</param-name> <param-value>php|php3|php5|phtml|asp|aspx|ascx|jsp|cfm|cfc|pl|bat|exe|dll|reg|cgi</param-value>
</init-param>
<init-param>
<param-name>AllowedExtensionsImage</param-name>
<param-value>jpg|gif|jpeg|png|bmp</param-value>
</init-param>
<init-param>
<param-name>DeniedExtensionsImage</param-name>
<param-value></param-value>
</init-param>
<init-param>
<param-name>AllowedExtensionsFlash</param-name>
<param-value>swf|fla</param-value>
</init-param>
<init-param>
<param-name>DeniedExtensionsFlash</param-name>
<param-value></param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!--
如下servlet-mapping 添加/FCKeditor与压缩包中总体复制到项目的文件夹路径相对应-->
  <servlet-mapping>
    <servlet-name>Connector</servlet-name>    <url-pattern>/FCKeditor/editor/filemanager/browser/default/connectors/jsp/connector</url-pattern>
  </servlet-mapping>
 
  <servlet-mapping>
    <servlet-name>SimpleUploader</servlet-name>
    <url-pattern>/FCKeditor/editor/filemanager/upload/simpleuploader</url-pattern>
  </servlet-mapping> 
<!-- FCKeditor servlet  -->  

(3)
删除无用文件,删除目录/FCKeditor/下除fckconfig.js, fckeditor.js, fckstyles.xml, fcktemplates.xml,四个文件之外的全部文件。
删除目录/editor/_source, 删除/editor/filemanager/browser/default/connectors/下的全部文件,删除/editor/filemanager/upload/下的全部文件,删除/editor/lang/下的除了en.js, zh.js, zh-cn.js三个文件的全部文件。

(4)
修改FCKeditor/fckconfig.js中的配置:
全部js配置文件最好保存成UTF-8格式,源代码要读取其中数据,
修改 FCKConfig.DefaultLanguage = 'zh-cn' ;
FCKConfig.LinkBrowserURL等的值替换成如下内容:

FCKConfig.LinkBrowserURL=FCKConfig.BasePath+"filemanager/browser/default/browser.html?Connector=connectors/jsp/connector" ;

FCKConfig.ImageBrowserURL=FCKConfig.BasePath+"filemanager/browser/default/browser.html?Type=Image&Connector=connectors/jsp/connector" ;

FCKConfig.FlashBrowserURL=FCKConfig.BasePath+"filemanager/browser/default/browser.html?Type=Flash&Connector=connectors/jsp/connector" ;

FCKConfig.LinkUploadURL=FCKConfig.BasePath+'filemanager/upload/simpleuploader?Type=File' ;

FCKConfig.FlashUploadURL=FCKConfig.BasePath+'filemanager/upload/simpleuploader?Type=Flash' ;

FCKConfig.ImageUploadURL=FCKConfig.BasePath+'filemanager/upload/simpleuploader?Type=Image' ;

FCKConfig.TabSpaces = 0 ;
改成FCKConfig.TabSpaces = 1 ;
即在编辑器域内能够使用Tab键。

若是你的编辑器还用在网站前台的话,好比说用于留言本或是日记回复时,那就不得不考虑安全了,
在前台千万不要使用Defaulttoolbar,要么自定义一下功能,要么就用系统已经定义好的Basic
也就是基本的toolbar,找到:
FCKConfig.ToolbarSets["Basic"] = [
['Bold','Italic','-','OrderedList','UnorderedList','-',/*'Link',*/'Unlink','-','Style','FontSize','TextColor','BGColor','-','Smiley','SpecialChar','Replace','Preview']
] ;
这是改过的Basic,把图像功能去掉,把添加连接功能去掉,由于图像和连接和flash和图像按钮添加功能都能让前台
页直接访问和上传文件, fckeditor还支持编辑域内的鼠标右键功能。

FCKConfig.ContextMenu= ['Generic',/*'Link',*/'Anchor',/*'Image',*/'Flash','Select','Textarea','Checkbox','Radio','TextField','HiddenField', /*'ImageButton',*/'Button','BulletedList','NumberedList','TableCell','Table','Form'] ;

这也是改过的把鼠标右键的连接、图像,FLASH,图像按钮功能都去掉。

找到: FCKConfig.FontNames = 'Arial;Comic Sans MS;Courier New;Tahoma;Times New Roman;Verdana' ;
加上几种咱们经常使用的字体
FCKConfig.FontNames
= '
宋体;黑体;隶书;楷体_GB2312;Arial;Comic Sans MS;Courier New;Tahoma;Times New Roman;Verdana' ;

如下是该文件的具体属性列表:
FCKConfig.CustomConfigurationsPath = '' ; //
自定义配置文件路径和名称
FCKConfig.EditorAreaCSS = FCKConfig.BasePath + 'css/fck_editorarea.css'; //
编辑区的样式表文件
FCKConfig.EditorAreaStyles = '' ; //
编辑区的样式表风格
FCKConfig.ToolbarComboPreviewCSS =''; //
工具栏预览CSS
FCKConfig.DocType = '' ;//
文档类型
FCKConfig.BaseHref = ''; //
相对连接的基地址
FCKConfig.FullPage = false ; //
是否容许编辑整个HTML文件,仍是仅容许编辑BODY间的内容
FCKConfig.StartupShowBlocks = false ;//
决定是否启用"显示模块"
FCKConfig.Debug = false ;//
是否开启调试功能
FCKConfig.SkinPath = FCKConfig.BasePath + 'skins/default/' ; //
皮肤路径
FCKConfig.PreloadImages=... //
预装入的图片
FCKConfig.PluginsPath = FCKConfig.BasePath + 'plugins/' ; //
插件路径
FCKConfig.AutoDetectLanguage = true ; //
是否自动检测语言
FCKConfig.DefaultLanguage  = 'zh-cn' ; //
默认语言
FCKConfig.ContentLangDirection = 'ltr' ; //
默认的文字方向,可选"ltr/rtl",即从左到右或从右到左
FCKConfig.ProcessHTMLEntities = true ; //
处理HTML实体
FCKConfig.IncludeLatinEntities = true ; //
包括拉丁文
FCKConfig.IncludeGreekEntities = true ;//
包括希腊文
FCKConfig.ProcessNumericEntities = false ;//
处理数字实体
FCKConfig.AdditionalNumericEntities = ''  ;  //
附加的数字实体
FCKConfig.FillEmptyBlocks = true ; //
是否填充空块
FCKConfig.FormatSource  = true ; //
在切换到代码视图时是否自动格式化代码
FCKConfig.FormatOutput  = true ; //
当输出内容时是否自动格式化代码
FCKConfig.FormatIndentator = '    ' ; //
当在源码格式下缩进代码使用的字符
FCKConfig.StartupFocus = false ; //
开启时焦点是否到编辑器,即打开页面时光标是否停留在fckeditor
FCKConfig.ForcePasteAsPlainText = false ; //
是否强制粘贴为纯文件内容
FCKConfig.AutoDetectPasteFromWord = true ; //
是否自动探测从word粘贴文件,仅支持IE
FCKConfig.ShowDropDialog = true ;//
是否显示下拉菜单
FCKConfig.ForceSimpleAmpersand = false ;//
是否不把&符号转换为XML实体
FCKConfig.TabSpaces  = 0 ;//
按下Tab键时光标跳格数,默认值为零为不跳格
FCKConfig.ShowBorders = true ;//
合并边框
FCKConfig.SourcePopup = false ;//
弹出
FCKConfig.ToolbarStartExpanded = true ;//
启动fckeditor工具栏默认是否展开
FCKConfig.ToolbarCanCollapse = true ;//
是否容许折叠或展开工具栏
FCKConfig.IgnoreEmptyParagraphValue = true ;//
是否忽略空的段落值
FCKConfig.FloatingPanelsZIndex = 10000 ;//
浮动面板索引
FCKConfig.HtmlEncodeOutput = false ;//
是否将HTML编码输出
FCKConfig.TemplateReplaceAll = true ;//
是否替换全部模板
FCKConfig.ToolbarLocation = 'In' ;//
工具栏位置,
FCKConfig.CustomConfigurationsPath = '' ; //
自定义配置文件路径和名称
FCKConfig.EditorAreaCSS = FCKConfig.BasePath + 'css/fck_editorarea.css'; //
编辑区的样式表文件
FCKConfig.BaseHref = ''; //
相对连接的基地址
FCKConfig.Debug = true/false; //
是否开启调试功能,当调用FCKDebug.Output()时,会在调试窗中输出内容
FCKConfig.SkinPath = FCKConfig.BasePath + 'skins/default/'; //
设置皮肤
FCKConfig.AutoDetectLanguage = true/false ; //
是否自动检测语言
FCKConfig.DefaultLanguage = 'zh-cn' ; //
设置默认语言
FCKConfig.ContentLangDirection = 'ltr/rtr'; //
默认文字方向,ltr左,rtr
FCKConfig.FillEmptyBlocks = true/false ; //
使用这个功能,能够将空的块级元素用空格来替代
FCKConfig.FormatSource = true/false; //
切换到代码视图时,是否自动格式化代码
FCKConfig.FormatOutput = true/false; //
当输出内容时是否自动格式化代码
FCKConfig.FormatIndentator = ""; //
当在源码格式下缩进代码使用的字符
FCKConfig.GeckoUseSPAN = true/false; //
是否容许SPAN标记代替BIU标记
FCKConfig.StartupFocus = true/false; //
开启时是否FOCUS到编辑器
FCKConfig.ForcePasteAsPlainText = true/false;//
强制粘贴为纯文本
FCKConfig.ForceSimpleAmpersand = true/false; //
是否不把&符号转换为XML实体
FCKConfig.TabSpaces = 0/1; // TAB
是否有效
FCKConfig.TabSpaces = 4; // TAB
键产生的空格字符数
FCKConfig.ShowBorders = true/false; //
是否合并边框
FCKConfig.ToolbarStartExpanded = true/false; //
页面载入时,工具栏是否展开,点展开工具栏时才出现
FCKConfig.ToolBarCanCollapse = true/false; //
是否容许展开折叠工具栏
FCKConfig.ToolbarSets = object ; //
编辑器的工具栏,能够自行定义,删减,可参考已存在工具栏
FCKConfig.EnterMode = 'p'; //
编辑器中直接回车,在代码中生成,可选为p | div | br
FCKConfig.ShiftEnterMode = 'br'; //
编辑器中Shift+回车,在代码中生成,可选为p | div | br
FCKConfig.ContextMenu =
字符串数组; // 右键菜单的内容
FCKConfig.FontColors = ""; //
文字颜色列表
FCKConfig.FontNames = ""; //
字体列表
FCKConfig.FontSizes = ""; //
字号列表
FCKConfig.FontFormats = ""; //
文字格式列表
FCKConfig.StylesXmlPath = ""; // CSS
样式列表的XML文件的位置
FCKConfig.TemplatesXmlPath = ""; //
模版的XML文件位置
FCKConfig.SpellChecker = "ieSpell/Spellerpages"; //
拼写检查器
FCKConfig.IeSpellDownloadUrl = ""; //
下载拼写检查器的网址
FCKConfig.SmileyPath = FCKConfig.BasePath + 'images/smiley/msn/'; //
表情文件存放路径
FCKConfig.SmileyImages = ''; //
表情文件名称列表,具体参考默认设置
FCKConfig.SmileyColumns = 8; //
表情窗口显示表情列数
FCKConfig.SmileyWindowWidth = 320; //
表情窗口显示宽度,此窗口会由于表情文件的改变而做调整
FCKConfig.SmileyWindowHeight = 240; //
表情窗口显示高度,此窗口会由于表情文件的改变而做调整
FCKConfig.FullPage = true/false; //
是否容许编辑整个HTML文件,仍是仅容许编辑BODY间的内容



上传设置
var _FileBrowserLanguage = 'php' ;         // asp | aspx | cfm | lasso | perl | php | py  
var _QuickUploadLanguage = 'php' ;         // asp | aspx | cfm | lasso | php
//
第一个是文件浏览器使用的语言,第二个快速上传使用的语言,改为你须要的,JSP项目这里就不要改了
FCKConfig.LinkUploadAllowedExtensions  = "" ;          // empty for all
FCKConfig.LinkUploadDeniedExtensions =".(php|php3|php5|phtml|asp|aspx|ascx|jsp|cfm|cfc|pl|bat|exe|dll|reg|cgi)$"
//
这是两个容许和拒绝上传的文件类型列表
FCKConfig.ImageBrowser = false ;//
是否在插入图片功能里面启用服务器文件浏览功能
FCKConfig.ImageBrowserURL = FCKConfig.BasePath + 'filemanager/browser/default/browser.html?Type=Image&Connector=connectors/' + _FileBrowserLanguage + '/connector.' + _FileBrowserExtension ;
//Type=Image  
表示文件类型是image这会使文件浏览器定位到文件上传路径/image/文件夹下面
FCKConfig.FlashBrowser = false ;//
是否在插入flash功能中启用服务器文件浏览功能
FCKConfig.LinkUpload = false ;//
是否启用插入连接的快速上传功能
FCKConfig.ImageUpload = false ;//
是否启用图片快速上传功能
FCKConfig.FlashUpload = false ;//
是否启用flash上传功能

(5)
调用FCKeditor
Javascript脚本语言调用必须引用脚本文件 <script type="text/javascript" src="<%=request.getContextPath()%>/FCKeditor/fckeditor.js"></script>

而后找到要显示编辑器的标签处进行修改,好比原先的一个struts的文本域为
<html:textarea property="content"></html:textarea> 
那么如今就要在它后面加上如下这段javascript脚本。
<script type="text/javascript">
var oFCKeditor = new FCKeditor('content') ;  //content
textareapropertyname属性对应
oFCKeditor.BasePath = "<%=request.getContextPath()%>/FCKeditor/" ;
//
写明FCKeditor文件夹在项目中的路径
oFCKeditor.Width=450
oFCKeditor.Height = 500;
oFCKeditor.ToolbarSet = "Default" ;//
用默认工具栏
oFCKeditor.ReplaceTextarea();
</script>

上面两处都用到了<%=request.getContextPath()%>,这是项目所在的根路径,在项目开发过程当中通常为项目名,而挂到正式服务器上时通常为空(“”)。

(6)
增长视频上传的功能及其工具栏按钮
媒体插件下载地址:
http://www.webmb.com.cn/upload/media_plugin_for_FCKeditor_23_build_1054.rar
安装步骤一:  将 madmedia整个文件夹 拷贝至 editor/plugins/下,找到FCKConfig.PluginsPath = FCKConfig.BasePath + 'plugins/' ; 这句,查看插件路径是否正确。      
安装步骤二:
修改fckconfig.js,在文件末尾增长以下一行代码,FCKConfig.Plugins.Add( 'madmedia', 'en,zh-cn' ) ;
安装步骤三:修改fckconfig.js,找到toolbar按钮设置的部分,将媒体按钮加入toolbar,例如,
原来是,
FCKConfig.ToolbarSets["Default"] = [
['Image','Flash']
]

改成,
FCKConfig.ToolbarSets["Default"] = [
['Image','Flash','MadMedia']
]

FCKConfig.ContextMenu= ['Generic','Link','Anchor','Image','Flash','Select','Textarea','Checkbox','Radio','TextField','HiddenField','ImageButton','Button','BulletedList','NumberedList','Table','Form']

中也可加入
FCKConfig.ContextMenu= ['Generic','Link','Anchor','Image','Flash','MadMedia','Select','Textarea','Checkbox','Radio','TextField','HiddenField','ImageButton','Button','BulletedList','NumberedList','Table','Form']

安装步骤四:修改插件中的/FCKeditor/editor/plugins/madmedia/media.js文件,把其中全部的包含”Flash”的字符串用”Link”替换,由于此插件的上传的media文件的存放路径与以Link方式上传文件的目录相同,并非Flash文件的上传路径。

安装步骤五:为了解决上传中文文件文件名变为乱码的问题须要修改FCKeditor的源代码,在源码的com.fredck.FCKeditor.uploader.SimleUploaderServlet类文件中搜索语句DiskFileUpload upload = new DiskFileUpload();再其后添加一句upload.setHeaderEncoding("UTF-8");编辑完成后把整个源代码的com包从新打成一个.jar包代替原来的.jar包。

7)解决FCKeditor struts2 上传时出错
缘由是struts2filter拦截了上传文件的动做,
//org.apache.struts2.dispatcher.Dispatcher.java
public HttpServletRequest wrapRequest(HttpServletRequest request, ServletContext servletContext) throws IOException {
        // don't wrap more than once
        if (request instanceof StrutsRequestWrapper) {
            return request;
        }
        String content_type = request.getContentType();
        if (content_type != null && content_type.indexOf("multipart/form-data") != -1) {
            MultiPartRequest multi = getContainer().getInstance(MultiPartRequest.class);
            request = new MultiPartRequestWrapper(multi, request, getSaveDir(servletContext));
        } else {
            request = new StrutsRequestWrapper(request);
        }
        return request;
    }
在这里又找不到MultiPartRequest.class的实现类。因而[size=small]出错了。
只要不让struts2拦截处理上传事件, url-pattern改成*.action就能够解决
可是由于struts2tag须要通过过滤器,因此若是你jsp页面上面用到了struts2tag,那么就要增长一个*.jspurl-pattern,修改web.xml文件以下:
1. <filter>  
2.         <filter-name>struts2</filter-name>  
3.         <filter-class>  
4.             org.apache.struts2.dispatcher.FilterDispatcher  
5.         </filter-class>  
6. </filter>  
7.  
8.     <filter-mapping>  
9.         <filter-name>struts2</filter-name>  
10.         <url-pattern>*.action</url-pattern>  
11.     </filter-mapping>  
12.  
13.  
14.     <filter-mapping>  
15.         <filter-name>struts2</filter-name>  
16.         <url-pattern>*.jsp</url-pattern>  
17.     </filter-mapping>
而上传页面调用时直接用文件名调用(如upload.jsp)。struts2只处理 *.action 的请求。
试了一下。和预想的同样,一切OK
8)上传时弹出“Security error. You probably don't have enough permissions to upload. Please check your server.”错误对话框的解决方法。
好比存放上传文件的文件夹是根目录下的upload,不一样类型的文件会存到它的不一样子文件夹下,好比图片放在子文件夹Image,Flash放在子文件夹Flash,其它文件夹放在子文件夹File(正如在第4点中提到的配置文件fckconfig.jsURLFCKConfig.FlashUploadURL=FCKConfig.BasePath+'filemanager/upload/simpleuploader?Type=Flash' ;Type的参数值就是上传到的子文件夹的名称),而这些子文件夹是上传第一个文件时程序自建的,而通常的服务器都不让Internet访问用户有新建文件夹的权限,因此须要把这三个子文件夹事先建好。 javascript

相关文章
相关标签/搜索