`
gingguoqiu
  • 浏览: 24936 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

jsp中使用FCK2.6

 
阅读更多

1. 下载fckeditor-java-demo-2.6.war和fckeditor-java-2.6-bin.tar.gz

    下载地址: http://sourceforge.net/projects/fckeditor/files/FCKeditor.Java/2.6/

 

2. 解压fckeditor-java-demo-2.6.war, 获取以下资源

     主目录下的: fckeditor文件夹

 

     lib目录下的:

       commons-fileupload-1.2.1.jar

       commons-io-1.3.2.jar

       imageinfo-1.9.jar

       java-core-2.6.jar

       slf4j-api-1.5.8.jar

       slf4j-simple-1.5.8.jar

 

     WEB-INF\classes目录下的:     

       fckeditor.properties

 

     web.xml中的:

  <servlet>
    <servlet-name>ConnectorServlet</servlet-name>
    <servlet-class>
      net.fckeditor.connector.ConnectorServlet
    </servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>ConnectorServlet</servlet-name>
    <!-- Do not wrap this line otherwise Glassfish will fail to load this file -->
    <url-pattern>/fckeditor/editor/filemanager/connectors/*</url-pattern>
  </servlet-mapping>

 

 

3. 建立web项目sample

  将fckeditor文件夹sample\WebContent\plugins\fckeditor

 

  在lib中放入

       commons-fileupload-1.2.1.jar

       commons-io-1.3.2.jar

       imageinfo-1.9.jar

       java-core-2.6.jar

       slf4j-api-1.5.8.jar

       slf4j-simple-1.5.8.jar

 

  在sample\src中放入(eclipse自动编译后会到classes目录下)

       fckeditor.properties

 

  在web.xml中加入

  <servlet>
    <servlet-name>ConnectorServlet</servlet-name>
    <servlet-class>
      net.fckeditor.connector.ConnectorServlet
    </servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>ConnectorServlet</servlet-name>
    <!-- Do not wrap this line otherwise Glassfish will fail to load this file -->
    <url-pattern>/plugins/fckeditor/editor/filemanager/connectors/*</url-pattern>
  </servlet-mapping>

 

 

 

4. 调整配置

 

  fckeditor.properties

# allow client upload file to server
connector.userActionImpl=net.fckeditor.requestcycle.impl.EnabledUserAction

# user can see path
connector.userFilesPath=/userfiles/fckeditor

# user can store path
connector.userFilesAbsolutePath=/userfiles/fckeditor

# the default path of the editor
fckeditor.basePath=/plugins/fckeditor

 

fckconfig.js

FCKConfig.AutoDetectLanguage	= false ;
FCKConfig.DefaultLanguage		= 'zh-cn' ;

// 可以加入自定义的工具栏
// custom your Toolbar and use it
FCKConfig.ToolbarSets["Custom"] = [
  ['Bold','Italic','-','OrderedList','UnorderedList','-','Link','Unlink']
] ;

 

5. 使用

    fckeditor.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.fckeditor.net" prefix="FCK"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>use FCKeditor</title>
</head>
<body>
<form action="commit.jsp" method="post" target="_blank">
<FCK:editor
 instanceName="EditorDefault"
 toolbarSet="Default"
 height="300"
 width="98%"
  >

  <jsp:attribute name="value">
  This is some <strong>sample text</strong>. 
  You are using <a href="http://www.fckeditor.net">FCKeditor</a>.
  </jsp:attribute>
</FCK:editor>

</body>
</html>

 

   commit.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
String content = request.getParameter("EditorDefault");
%>
<div>
<%= content%>
</div>

 

6. 关于中文文件名问题, 在此重写代码, 自定义文件名.

  这个fckeditor-java-2.6-bin.tar.gz包中有源码, 获取Dispatcher.java, 建立相应的包名net.fckeditor.connector

  调整代码如下:

 

UploadResponse doPost(final HttpServletRequest request) {
    logger.debug("Entering Dispatcher#doPost");

    Context context = ThreadLocalData.getContext();
    context.logBaseParameters();

    UploadResponse uploadResponse = null;
    // check permissions for user actions
    if (!RequestCycleHandler.isFileUploadEnabled(request))
      uploadResponse = UploadResponse.getFileUploadDisabledError();
    // check parameters
    else if (!Command.isValidForPost(context.getCommandStr()))
      uploadResponse = UploadResponse.getInvalidCommandError();
    else if (!ResourceType.isValidType(context.getTypeStr()))
      uploadResponse = UploadResponse.getInvalidResourceTypeError();
    else if (!UtilsFile.isValidPath(context.getCurrentFolderStr()))
      uploadResponse = UploadResponse.getInvalidCurrentFolderError();
    else {

      // call the Connector#fileUpload
      ResourceType type = context.getDefaultResourceType();
      FileItemFactory factory = new DiskFileItemFactory();
      ServletFileUpload upload = new ServletFileUpload(factory);
      try {
        List<FileItem> items = upload.parseRequest(request);
        // We upload just one file at the same time
        FileItem uplFile = items.get(0);
        // Some browsers transfer the entire source path not just the
        // filename
        String fileName = FilenameUtils.getName(uplFile.getName());

        // rename file name
        logger.debug("old file name: " + fileName);
        fileName = dateFmt(new Date(), "yyyyMMdd") + "_" + UUID.randomUUID().toString().replace("-", "") + "." + getExtension(fileName);
        logger.debug("rename file name: " + fileName);



        logger.debug("Parameter NewFile: {}", fileName);
        // check the extension
        if (type.isDeniedExtension(FilenameUtils.getExtension(fileName)))
          uploadResponse = UploadResponse.getInvalidFileTypeError();
        // Secure image check (can't be done if QuickUpload)
        else if (type.equals(ResourceType.IMAGE) && PropertiesLoader.isSecureImageUploads() && !UtilsFile.isImage(uplFile.getInputStream())) {
          uploadResponse = UploadResponse.getInvalidFileTypeError();
        } else {
          String sanitizedFileName = UtilsFile.sanitizeFileName(fileName);

          logger.debug("Parameter NewFile (sanitized): {}", sanitizedFileName);
          String newFileName = connector.fileUpload(type, context.getCurrentFolderStr(), sanitizedFileName, uplFile.getInputStream());
          String fileUrl = UtilsResponse.fileUrl(RequestCycleHandler.getUserFilesPath(request), type, context.getCurrentFolderStr(), newFileName);

          if (sanitizedFileName.equals(newFileName))
            uploadResponse = UploadResponse.getOK(fileUrl);
          else {
            uploadResponse = UploadResponse.getFileRenamedWarning(fileUrl, newFileName);
            logger.debug("Parameter NewFile (renamed): {}", newFileName);
          }
        }

        uplFile.delete();
      } catch (InvalidCurrentFolderException e) {
        uploadResponse = UploadResponse.getInvalidCurrentFolderError();
      } catch (WriteException e) {
        uploadResponse = UploadResponse.getFileUploadWriteError();
      } catch (IOException e) {
        uploadResponse = UploadResponse.getFileUploadWriteError();
      } catch (FileUploadException e) {
        uploadResponse = UploadResponse.getFileUploadWriteError();
      }
    }

    logger.debug("Exiting Dispatcher#doPost");
    return uploadResponse;
  }


/**
   * get extend of file name
   * 
   * @param fileName
   * @return
   */
  private String getExtension(String fileName) {
    return fileName.substring(fileName.lastIndexOf(".") + 1);
  }



  /**
   * format Date to String
   * 
   * @param mydate
   * @param strDate
   * @return
   */
  private String dateFmt(Date mydate, String strDate) {
    if (mydate == null) {
      return "";
    }
    java.text.SimpleDateFormat df = new java.text.SimpleDateFormat(strDate);
    return df.format(mydate);
  }


 

7. 此时日志有info信息输出,控制日志输出.

    删除lib目录下的: slf4j-simple-1.5.8.jar

 

    同时添加:

      slf4j-log4j12-1.5.8.jar

      log4j-1.2.16.jar

 

    在sample\src中放入(eclipse自动编译后会到classes目录下)log4j.properties

 

log4j.rootLogger=error, stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=(%F:%L) - %m%n

 

 

代码中的颜色不知道怎么设置, 没标出具体区别, 见谅.

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics