使用JAVA技巧FCKEditor263配合Java的使用步骤.docx
《使用JAVA技巧FCKEditor263配合Java的使用步骤.docx》由会员分享,可在线阅读,更多相关《使用JAVA技巧FCKEditor263配合Java的使用步骤.docx(26页珍藏版)》请在冰豆网上搜索。
![使用JAVA技巧FCKEditor263配合Java的使用步骤.docx](https://file1.bdocx.com/fileroot1/2023-1/7/e5bc9e33-2983-4d6b-b5f8-6470564239f0/e5bc9e33-2983-4d6b-b5f8-6470564239f01.gif)
使用JAVA技巧FCKEditor263配合Java的使用步骤
FCKEditor是一个很好的用于Web页面中的格式化文本编译控件。
现在越来越多的论坛的发帖页面中更多的使用了这个控件,我们这里将如何在基于Java的web开发中使用FCKEditor控件的步骤提供给大家,为的是让更多的java开发者花费更少的时间去做重复劳动。
首先去下载FCKEditor2.6.3(当然本文编写的时候,这个是最新版本,也许你现在看到的已经是更新的版本了,那么可能某些配置办法已经变化了,本文也将跟进以保持最新动态,相反如果你使用的旧版本的控件,其配置和使用方法也有所区别),下载地址:
第一是FCKeditor_2.6.3.zip,就是FCKEditor的控件;
第二是FCKeditor.Java(fckeditor-java-2.4.1-bin.zip),就是在Java代码中使用FCKEditor的相关工具类;
有了这两个文件,使用FCKEditor的基础就具备了,考试大提示接下来我们要做两件事情,一件事情就是要把FCKEditor控件放到web项目中,这个控件是用于网页的,所以其代码是使用JavaScript脚本编写的,需要和web网页一起被下载的浏览器上才能执行,第二件事情就是这个网页上的控件因为支持图片的上传与下载,所以在上传与下载的时候需要服务端的支持,那么我们我的java服务端如何支持这个控件的工作呢?
FCKEditor自身提供了相关的java工具,就是我们下载的第二个文件。
因此我们要做的第二件事情就是在服务端配置java工具,使得FCKEditor控件在处理上传图片时能够正确工作。
接下来我们就开始对配置FCKEditor控件进行两项工作:
第一:
解压缩FCKeditor_2.6.3.zip,在其中我们能找到一个文件夹叫fckeditor,那么将这个文件夹整个复制到你的web应用的根目录(WebRoot目录)下,就是存放jsp页面的地方。
第二:
解压缩fckeditor-java-2.4.1-bin.zip,将这样几个jar文件复制到web应用的WEB-INF\lib目录中(commons-fileupload-1.2.1.jar,commons-io-1.3.2.jar,java-core-2.4.1.jar,slf4j-api-1.5.2.jar,slf4j-simple-1.5.2.jar),其中最后一个文件在这个zip包中可能不存在,那么你可以去这个链接地址下载一个文件叫fckeditor-java-2.4.1-bin.zip(下载地址:
1.connector.userActionImpl=net.fckeditor.requestcycle.impl.EnabledUserAction
二:
创建fckeditor.properties文件在src下(编译之后处于classes目录中),文件内容如下:
connector.userFilesPath=/UserUploadFile
connector.resourceType.file.extensions.allowed=|jpg|gif|png|rar|zip|txt|doc|wma|wmv|mp3|flv|swf|
connector.resourceType.media.extensions.allowed=|wma|wmv|mp3|flv|swf|
connector.resourceType.image.extensions.allowed=|jpg|png|gif|
connector.resourceType.flash.extensions.allowed=|swf|
connector.userActionImpl=net.fckeditor.requestcycle.impl.UserActionImpl
fckeditor.basePath=/fckeditor(fck资源所在webapp中的目录)
fckeditor.skinPath=/skins/office2003/(fck样式,这里可选默认和office2003的样式)
fckeditor.height=630(fck编辑器的高度)
在web.xml中添加一个Servlet的配置,配置内容如下:
Connector
net.fckeditor.connector.ConnectorServlet
1
Connector
/fckeditor/editor/filemanager/connectors/*
好了,现在你已经完成了配置的过程,接下来我们需要在jsp中使用FCKEditor控件了,在需要使用这个控件的jsp文件的开头添加标签库的引入语句:
<%@tagliburi=""prefix="FCK"%>
,在使用控件进行文本格式化输入的地方(原来你可能使用的textarea标签)使用如下的内容来替换原来的输入控件:
editorinstanceName="content">
attributename="value">
您的内容.....
attribute>
editor>
自己的实例
editorinstanceName="content"height="400pt">
body>
configSkinPath="${skin}"/>
body>
editor>
其中instanceName属性的值就相当于form表单中的input的name值。
就是表单提交时候的键值对中的键的名字。
1)在文本框中输入中文提交后得到的中文乱码。
解决办法:
Result.JSP中来转码:
newString(request.getParameter(“content”).getByte(iso-8859-1),”UTF-8”)
试验下,嘿嘿,”汉化”成功!
2)上传中文名图片后保存的中文图片名乱码
解决办法:
下载.jar包,替换以前下载的fckeditor-java-core-2.4.jar包,
OK,上传中文图片名显示正常了,
fckeditor-java-core-2.4.2jar包上传时就不会乱码
在使用FCKeditor2.4.3时若上传的图片或者flash的文件名为中文时,发现一下情况:
问题1:
当点击“插入/编辑图像”或者“插入/编辑Flash”按钮时,在弹出的对话框中选择上传按钮,如果上传的文件名为中文时会出现乱码。
解决办法:
找到FCKeditor.java解压包中的src目录下SimpleUploaderServlet.java做如下修改:
找到该程序中DiskFileUploadupload=newDiskFileUpload(),然后在该行下面添加
upload.setHeaderEncoding("UTF-8"),重新编译成class文件并利用WinRAR把该class文件
添加到FCKeditor-2.3.jar中相应的位置,然后覆盖你的web项目中原来的jar包便可。
问题2:
当点击“插入/编辑图像”或者“插入/编辑Flash”按钮时,在弹出的对话框中使用浏览
服务器按钮上传中文文件时会出现乱码。
解决办法:
和问题1的解决办法基本一样,只不过需要在ConnectorServlet.java中添加
upload.setHeaderEncoding("UTF-8")便可。
问题3:
当点击“插入/编辑图像”或者“插入/编辑Flash”按钮时,在弹出的对话框中点击浏览
服务器按钮,会弹出“浏览服务器”页面,如果想在该页面中使用CreateNewFolder按钮
来创建一个中文目录时,会出现中文目录乱码。
解决办法:
web容器的编码要与FCKeditor默认的编码UTF-8一致,如果使用的是Tomcat,需修改
tomcat服务器中conf目录下的server.xml。
如下:
maxThreads="150"minSpareThreads="25"maxSpareThreads="75"
enableLookups="false"redirectPort="8443"acceptCount="100"
connectionTimeout="20000"disableUploadTimeout="true"URIEncoding="utf-8"/>
enableLookups="false"redirectPort="8443"protocol="AJP/1.3"URIEncoding="utf-8"/>
其实就是在原来的基础上添加URIEncoding的属性值为utf-8。
注:
对于问题3,这种解决办法不可取,最好不要去修改服务器的编码,否则会影响到服务器上其它的工程。
解决这个编码的问题可以修改源代码或者从新编写一个类来处理。
通过观察打开的上传浏览对话框可以找对对应的htm页面和负责处理上传文件名称的com.fredck.FCKeditor.uploader.ConnectorServlet这个类,然后找到对应的参数,转换编码便可。
如:
StringnewFolderStr=request.getParameter("NewFolderName");
newFolderStr=newString(newFolderStr.getBytes("iso8859-1"),"utf-8");
网上很多文章都说修改/editor/filemanager/browser/default/frmupload.html,在head中加一个meta
,其实凭这个不行。
3)点击浏览服务器后,选择刚上传的中文图片,图片在预览窗口中不能显示
解决办法:
修改TOMCAT安装目录config下的server.xml文件,在标签内加上URIEncoding="UTF-8"。
OK,中文图片正常显示。
对中文图片进行UUID编码,上传乱码的解决方法
/*
*FCKeditor-ThetexteditorforInternet-
*Copyright(C)2004-2009FredericoCaldeiraKnabben
*
*==BEGINLICENSE==
*
*Licensedunderthetermsofanyofthefollowinglicensesatyour
*choice:
*
*-GNUGeneralPublicLicenseVersion2orlater(the"GPL")
*http:
//www.gnu.org/licenses/gpl.html
*
*-GNULesserGeneralPublicLicenseVersion2.1orlater(the"LGPL")
*http:
//www.gnu.org/licenses/lgpl.html
*
*-MozillaPublicLicenseVersion1.1orlater(the"MPL")
*http:
//www.mozilla.org/MPL/MPL-1.1.html
*
*==ENDLICENSE==
*/
packagenet.fckeditor.connectorl;
importjava.io.File;
importjava.io.IOException;
importjava.io.PrintWriter;
importjava.util.*;
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importnet.fckeditor.handlers.CommandHandler;
importnet.fckeditor.handlers.ConnectorHandler;
importnet.fckeditor.handlers.ExtensionsHandler;
importnet.fckeditor.handlers.RequestCycleHandler;
importnet.fckeditor.handlers.ResourceTypeHandler;
importnet.fckeditor.response.UploadResponse;
importnet.fckeditor.response.XmlResponse;
importnet.fckeditor.tool.Utils;
importnet.fckeditor.tool.UtilsFile;
importnet.fckeditor.tool.UtilsResponse;
importmons.fileupload.FileItem;
importmons.fileupload.FileItemFactory;
importmons.fileupload.disk.DiskFileItemFactory;
importmons.fileupload.servlet.ServletFileUpload;
importmons.io.FilenameUtils;
importorg.slf4j.Logger;
importorg.slf4j.LoggerFactory;
/**
*Servlettouploadandbrowsefiles.
*
*Thisservletaccepts4commandswhichinteractwiththeserver-side
*filesystem.
*Theallowedcommandsare:
*
*
GetFolders
:
Retrievesalistoffoldersinthecurrent
*folder
*
GetFoldersAndFiles
:Retrivesalistoffilesandfolders
*inthecurrentfolder
*
CreateFolder
:Createsanewfolderinthecurrentfolder
*
FileUpload
:Storesanuploadedfileintothecurrent
*folder.(mustbesentwithPOST)
*
*
*@version$Id:
ConnectorServlet.java38402009-07-0820:
29:
46Zmosipov$
*/
publicclassConnectorServletextendsHttpServlet{
privatestaticfinallongserialVersionUID=-5742008970929377161L;
privatestaticfinalLoggerlogger=LoggerFactory.getLogger(ConnectorServlet.class);
/**
*Initializetheservlet:
mkdir
<DefaultUserFilesPath>
*/
publicvoidinit()throwsServletException,IllegalArgumentException{
StringrealDefaultUserFilesPath=getServletContext().getRealPath(
ConnectorHandler.getDefaultUserFilesPath());
FiledefaultUserFilesDir=newFile(realDefaultUserFilesPath);
UtilsFile.checkDirAndCreate(defaultUserFilesDir);
logger.info("ConnectorServletsuccessfullyinitialized!
");
}
/**
*ManagetheGET
requests(GetFolders
,
*GetFoldersAndFiles
,CreateFolder
).
*
*Theservletacceptscommandssentinthefollowingformat:
*connector?
Command=<CommandName>&Type=<ResourceType>&CurrentFolder=<FolderPath>
*
*ItexecutesthecommandsandthenreturnstheresulttotheclientinXML
*format.
*
*/
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
logger.debug("EnteringConnectorServlet#doGet");
response.setCharacterEncoding("UTF-8");
response.setContentType("application/xml;charset=UTF-8");
response.setHeader("Cache-Control","no-cache");
PrintWriterout=response.getWriter();
StringcommandStr=request.getParameter("Command");
StringtypeStr=request.getParameter("Type");
StringcurrentFolderStr=request.getParameter("CurrentFolder");
logger.debug("ParameterCommand:
{}",commandStr);
logger.debug("ParameterType:
{}",typeStr);
logger.debug("ParameterCurrentFolder:
{}",currentFolderStr);
XmlResponsexr;
if(!
RequestCycleHandler.isEnabledForFileBrowsing(request))
xr=newXmlResponse(XmlResponse.EN_ERROR,Messages.NOT_AUTHORIZED_FOR_BROWSING);
elseif(!
CommandHandler.isValidForGet(commandStr))
xr=newXmlResponse(XmlResponse.EN_ERROR,Messages.INVALID_COMMAND);
elseif(typeStr!
=null&&!
ResourceTypeHandler.isValid(typeStr))
xr=newXmlResponse(XmlResponse.EN_ERROR,Messages.INVALID_TYPE);
elseif(!
UtilsFile.isValidPath(currentF