




已阅读5页,还剩14页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Fckeditor完美结合Struts2(1)展现Fckeditor界面 2010-04-23 09:29:56标签:Struts2 Fckeditor 结合推送到技术圈 版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。/1381108/303228做如下几点说明:1. 本文所指的FckEditor是2.6.4,所指的Struts2是2.1.62. 有关FckEditor的源代码分析,见:/1381108/3016143. 网上很多关于FckEditor在Jsp中的配置的文章,本文也是在笔者看了传智播客的fck视频后,有所改进的完成的。但是,笔者的观点的是现在纯Jsp的网站不是很多,因此Fck和Struts2的结合更为多见。如果纯jsp的小网站,建议163的编辑器大可搞定。 /1381108/3027444. 本文是作者一步一步配置的过程,并记录了作者在和Struts2过程中碰到的一些问题和解决方 法,供参考。5. 建议和这篇文章一起看,效果更佳 /1381108/3032345. 项目源代码: /download.php?do=attachment&aid=120763&k=6b8f9716a1f697186a152ee7e03a68b3&t=1271986205Struts2环境构建网上关于如何构建Struts2环境的文章铺天盖地,这里不再赘述,只是提供给读者Struts2.1.6的一些jar包。下载地址是:/download.php?do=attachment&aid=120757&k=2adb78a2c041f917b548ff1e6a58e53c&t=1271983135加入FckEditorStep1、下载Fckeditor2.6.4,下载地址是:/download.php?do=attachment&aid=120751&k=f5b36d01d190c945186ec94b138e380b&t=1271981326Step2、解压后,把里面的fckeditor目录导入到项目的WebRoot目录下,结构如图:Step3、这步相当关键。导入fckeditor-java-core的jar包到项 目的WEB-INF/lib目录下,下载地址是:/download.php?do=attachment&aid=120752&k=74632b54f5df3e3415f74b2a20c871e3&t=1271982128导入以下4个文件:这里先别急,说明几点:1. 这里的commons-fileupload-1.2.1.jar已经在上面Struts2中有所导入,所以不用导入。2. 这里的slf4j-api-1.5.8.jar和slf4j-simple-1.5.8必须保持版本一致。这里的三个包的下载地址是 :/attachment/201004/1381108_1271985600.rarStep4、在jsp页面中,添加如下标签声明:1. Body标签中加入你要放 置的fckeditor的位置:1. 好的,现在可以看到Fckeditor的真面目了。本文出自 “ni掌柜在路上” 博客,请务必保留此出处/1381108/303228本文出自 51CTO.COM技术博客附件下载:这里的三个包Fckeditor完美结合Struts2(2)文件上传与重命名 2010-04-23 09:35:55标签:Struts2 文件上传 Fckeditor 重命名推送到技术圈 版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。/1381108/303234本文是在 /1381108/303228的基础上展开的。其它的一些关于toolbarSet的定制和字体等的配置,因为和纯jsp的方法是一样的,这里不再赘述。本文讲解Struts2中文件上传提示没有权限和 上传过程中用随机数来重命名文件的方法。Step1. 要上传文件,首先要配置 Web.xml配置如下:1. 2. 3. 9. 10. 11. struts212. 13. 14. org.apache.struts2.dispatcher.FilterDispatcher15. 16. 17. 18. 19. 20. struts221. 22. /*23. 24. 25. 26. Connector27. 28. net.fckeditor.connector.ConnectorServlet29. 30. 131. 32. 33. 34. Connector35. 36. /fckeditor/editor/filemanager/connectors/*37. 38. 39. Step2. 在src目录下新建一个perties文件,内容如下:1. connector.userActionImpl=net.fckeditor.requestcycle.impl.UserActionImpl好了,现在可以去页面上看看了,不过出错了:或者是:出现这个问题的原因是Fckeditor的拦截Servlet和Struts2的Servlet的冲突了。解决方法是修改web.xml如下1. 2. 3. 9. 10. 11. 12. 13. struts214. 15. 16. org.apache.struts2.dispatcher.FilterDispatcher17. 18. 19. 20. 21. 22. struts223. *.action24. 25. 26. struts227. *.jsp28. 29. 30. struts231. /struts/*32. 33. 34. default.jsp35. 36. 37. Connector38. 39. net.fckeditor.connector.ConnectorServlet40. 41. 142. 43. 44. 45. Connector46. 47. /fckeditor/editor/filemanager/connectors/*48. 49. 50. 51. 52. 使得Struts2的拦截器只拦截.jsp和.action的请求。现在再到页面上去看看,可以上传了。Step3. 改成随机数命名文件。 由于fckeditor的文件上传功能主要是由web.xml中配置的 net.fckeditor.connector.ConnectorServlet这个类拦截的,所以我们要自己来重命名文件的话,就要修改这个类。 办法是在net.fckeditor.connector.ConnectorServlet的基础上,建立自己的Servlet。在项目src目录下建立以下包cn.nileader.tool里面建立两个类:GetCode.java1. packagecom.rctraffic110.tool;2. 3. importjava.text.SimpleDateFormat;4. 5. publicclassGetCode6. 7. /*8. *获取一个记录编号9. *格式:12位时间+业务编号+随即数10. *例如:100330101028+04+893(2010-03-30-10:20:28,业务号是04,随机数893)11. *parambtype业务类型编号员工业务01招聘业务0212. *returncode构造的一个记录编号13. */14. publicstaticStringgetNo(Stringbtype)15. /返回的code16. Stringcode;17. /系统当前时间12位18. 19. SimpleDateFormatsdf=newSimpleDateFormat(yyMMddhhmmss);20. 21. StringnowDate=sdf.format(newjava.util.Date();22. /随机数23. 24. StringiRandom=Math.round(Math.random()*900)+100+;25. /整合一个code26. returnnowDate+btype+iRandom;27. 28. 上面这个类是个随机获取编号的方法。再建立这个类ConcectorServlet.java 1. packagecom.rctraffic110.tool;2. 3. 4. importjava.io.File;5. importjava.io.IOException;6. importjava.io.PrintWriter;7. importjava.util.List;8. 9. importjavax.servlet.ServletException;10. importjavax.servlet.http.HttpServlet;11. importjavax.servlet.http.HttpServletRequest;12. importjavax.servlet.http.HttpServletResponse;13. 14. importnet.fckeditor.connector.Messages;15. importnet.fckeditor.handlers.CommandHandler;16. importnet.fckeditor.handlers.ConnectorHandler;17. importnet.fckeditor.handlers.ExtensionsHandler;18. importnet.fckeditor.handlers.RequestCycleHandler;19. importnet.fckeditor.handlers.ResourceTypeHandler;20. importnet.fckeditor.response.UploadResponse;21. importnet.fckeditor.response.XmlResponse;22. importnet.fckeditor.tool.Utils;23. importnet.fckeditor.tool.UtilsFile;24. importnet.fckeditor.tool.UtilsResponse;25. 26. mons.fileupload.FileItem;27. mons.fileupload.FileItemFactory;28. 29. mons.fileupload.disk.DiskFileItemFactory;30. 31. mons.fileupload.servlet.ServletFileUpload;32. mons.io.FilenameUtils;33. importorg.slf4j.Logger;34. importorg.slf4j.LoggerFactory;35. 36. publicclassConnectorServletextendsHttpServlet37. 38. privatestaticfinallongserialVersionUID=-5742008970929377161L;39. 40. privatestaticfinalLoggerlogger=LoggerFactory.getLogger(ConnectorServlet.class);41. 42. publicvoidinit()throwsServletException,IllegalArgumentException43. 44. StringrealDefaultUserFilesPath=getServletContext().getRealPath(45. 46. ConnectorHandler.getDefaultUserFilesPath();47. 48. FiledefaultUserFilesDir=newFile(realDefaultUserFilesPath);49. UtilsFile.checkDirAndCreate(defaultUserFilesDir);50. 51. (ConnectorServletsuccessfullyinitialized!);52. 53. 54. publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)55. throwsServletException,IOException56. 57. logger.debug(EnteringConnectorServlet#doGet);58. 59. response.setCharacterEncoding(UTF-8);60. 61. response.setContentType(application/xml;charset=UTF-8);62. 63. response.setHeader(Cache-Control,no-cache);64. 65. PrintWriterout=response.getWriter();66. 67. StringcommandStr=request.getParameter(Command);68. 69. StringtypeStr=request.getParameter(Type);70. 71. StringcurrentFolderStr=request.getParameter(CurrentFolder);72. 73. logger.debug(ParameterCommand:,commandStr);74. 75. logger.debug(ParameterType:,typeStr);76. 77. logger.debug(ParameterCurrentFolder:,currentFolderStr);78. 79. XmlResponsexr;80. 81. if(!RequestCycleHandler.isEnabledForFileBrowsing(request)82. 83. xr=newXmlResponse(XmlResponse.EN_ERROR,Messages.NOT_AUTHORIZED_FOR_BROWSING);84. 85. elseif(!CommandHandler.isValidForGet(commandStr)86. 87. xr=newXmlResponse(XmlResponse.EN_ERROR,Messages.INVALID_COMMAND);88. 89. elseif(typeStr!=null&!ResourceTypeHandler.isValid(typeStr)90. 91. xr=newXmlResponse(XmlResponse.EN_ERROR,Messages.INVALID_TYPE);92. 93. elseif(!UtilsFile.isValidPath(currentFolderStr)94. 95. xr=newXmlResponse(XmlResponse.EN_ERROR,Messages.INVALID_CURRENT_FOLDER);96. else97. 98. CommandHandlercommand=CommandHandler.getCommand(commandStr);99. 100. ResourceTypeHandlerresourceType=ResourceTypeHandler.getDefaultResourceType(typeStr);101. 102. StringtypePath=UtilsFile.constructServerSidePath(request,resourceType);103. 104. StringtypeDirPath=getServletContext().getRealPath(typePath);105. 106. FiletypeDir=newFile(typeDirPath);107. UtilsFile.checkDirAndCreate(typeDir);108. 109. FilecurrentDir=newFile(typeDir,currentFolderStr);110. 111. if(!currentDir.exists()112. 113. xr=newXmlResponse(XmlResponse.EN_INVALID_FOLDER_NAME);114. else115. 116. xr=newXmlResponse(command,resourceType,currentFolderStr,UtilsResponse117. 118. .constructResponseUrl(request,resourceType,currentFolderStr,true,119. ConnectorHandler.isFullUrl();120. 121. if(command.equals(CommandHandler.GET_FOLDERS)122. xr.setFolders(currentDir);123. 124. elseif(command.equals(CommandHandler.GET_FOLDERS_AND_FILES)125. xr.setFoldersAndFiles(currentDir);126. 127. elseif(command.equals(CommandHandler.CREATE_FOLDER)128. 129. StringnewFolderStr=UtilsFile.sanitizeFolderName(request130. 131. .getParameter(NewFolderName);132. 133. logger.debug(ParameterNewFolderName:,newFolderStr);134. 135. FilenewFolder=newFile(currentDir,newFolderStr);136. 137. interrorNumber=XmlResponse.EN_UKNOWN;138. 139. if(newFolder.exists()140. 141. errorNumber=XmlResponse.EN_ALREADY_EXISTS;142. 143. else144. 145. try146. 147. errorNumber=(newFolder.mkdir()?XmlResponse.EN_OK148. :XmlResponse.EN_INVALID_FOLDER_NAME;149. 150. catch(SecurityExceptione)151. 152. errorNumber=XmlResponse.EN_SECURITY_ERROR;153. 154. 155. xr.setError(errorNumber);156. 157. 158. 159. 160. out.print(xr);161. out.flush();162. out.close();163. 164. logger.debug(ExitingConnectorServlet#doGet);165. 166. 167. SuppressWarnings(unchecked)168. 169. publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)170. throwsServletException,IOException171. 172. logger.debug(EnteringConnector#doPost);173. 174. response.setCharacterEncoding(UTF-8);175. 176. response.setContentType(text/html;charset=UTF-8);177. 178. response.setHeader(Cache-Control,no-cache);179. 180. PrintWriterout=response.getWriter();181. 182. StringcommandStr=request.getParameter(Command);183. 184. StringtypeStr=request.getParameter(Type);185. 186. StringcurrentFolderStr=request.getParameter(CurrentFolder);187. 188. logger.debug(ParameterCommand:,commandStr);189. 190. logger.debug(ParameterType:,typeStr);191. 192. logger.debug(ParameterCurrentFolder:,currentFolderStr);193. 194. UploadResponseur;195. 196. /ifthisisaQuickUploadrequest,commandStrandcurrentFolderStr197. 198. /areempty199. 200. if(Utils.isEmpty(commandStr)&Utils.isEmpty(currentFolderStr)201. commandStr=QuickUpload;202. 203. currentFolderStr=/;204. 205. 206. if(!RequestCycleHandler.isEnabledForFileUpload(request)207. 208. ur=newUploadResponse(UploadResponse.SC_SECURITY_ERROR,null,null,209. Messages.NOT_AUTHORIZED_FOR_UPLOAD);210. elseif(!CommandHandler.isValidForPost(commandStr)211. 212. ur=newUploadResponse(UploadResponse.SC_ERROR,null,null,Messages.INVALID_COMMAND);213. 214. elseif(typeStr!=null&!ResourceTypeHandler.isValid(typeStr)215. 216. ur=newUploadResponse(UploadResponse.SC_ERROR,null,null,Messages.INVALID_TYPE);217. 218. elseif(!UtilsFile.isValidPath(currentFolderStr)219. 220. ur=UploadResponse.UR_INVALID_CURRENT_FOLDER;221. else222. 223. ResourceTypeHandlerresourceType=ResourceTypeHandler.getDefaultResourceType(typeStr);224. 225. StringtypePath=UtilsFile.constructServerSidePath(request,resourceType);226. 227. StringtypeDirPath=getServletContext().getRealPath(typePath);228. 229. FiletypeDir=newFile(typeDirPath);230. UtilsFile.checkDirAndCreate(typeDir);231. 232. FilecurrentDir=newFile(typeDir,currentFolderStr);233. 234. if(!currentDir.exists()235. 236. ur=UploadResponse.UR_INVALID_CURRENT_FOLDER;237. else238. 239. StringnewFilename=null;240. 241. FileItemFactoryfactory=newDiskFileItemFactory();242. 243. ServletFileUploadupload=newServletFileUpload(factory);244. 245. upload.setHeaderEncoding(UTF-8);246. try247. 248. Listitems=upload.parseRequest(request);249. 250. /Weuploadonlyonefileatthesametime251. 252. FileItemuplFile=items.get(0);253. 254. StringrawName=UtilsFile.sanitizeFileName(uplFile.getName();255. 256. Stringfilename=FilenameUtils.getName(rawName);257. 258. StringbaseName=FilenameUtils.removeExtension(filename);259. 260. Stringextension=FilenameUtils.getExtension(filename);261. 262. filename=GetCode.getNo(1104)+.+extension;263. 264. if(!ExtensionsHandler.isAllowed(resourceType,extension)265. 266. ur=newUploadResponse(UploadResponse.SC_INVALID_EXTENSION);267. 268. else269. 270. /constructanuniquefilename271. 272. FilepathToSave=newFile(currentDir,filename);273. intcounter=1;274. 275. while(pathToSave.exists()276. 277. newFilename=baseName.concat().concat(String.valueOf(counter)278. 279. .concat().concat(.).concat(extension);280. 281. pathToSave=newFile(currentDi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公司背景墙策划方案
- 公司春季放风筝活动方案
- 公司游园小活动策划方案
- 公司职称评审策划方案
- 公司群体互动策划方案
- 公司群体性运动活动方案
- 公司节前大扫除活动方案
- 公司知识跨年活动方案
- 公司管理规范年活动方案
- 公司旅游预热引流活动方案
- 网络舆情监控管理制度
- 机器试用担保协议书范本
- 小学生预防拐骗教育课件
- 医学影像分析-洞察及研究
- 2025至2030中国无线通讯检测行业市场发展分析及竞争格局与投资机会报告
- 2025年上海徐汇区高一(下)信息技术合格考试题及答案
- 国家开放大学《理工英语1》期末机考题库
- 少儿财商的培养(课堂)课件
- 暨南大学《马克思主义基本原理概论》题库历年期末考试真题分类汇编及答案
- 青霉素的发现与作用课件
- 2018年专利代理师资格考试科目三-专利代理实务真题及解析
评论
0/150
提交评论