UEditor for JSP 使用完整教程

UEditor 是由百度开发的一款开源、功能强大的富文本编辑器,它支持多种编程语言,JSP 版本常用于 Java Web 项目中。

ueditor jsp使用教程
(图片来源网络,侵删)

本教程将带你完成以下步骤:

  1. 环境准备
  2. 下载并解压 UEditor
  3. 配置 JSP 环境
  4. 在 JSP 页面中引入 UEditor
  5. 后端配置与交互
  6. 完整示例代码
  7. 常见问题与解决方案

第一步:环境准备

在开始之前,请确保你的开发环境已经搭建好:

  1. JDK: Java Development Kit (建议 JDK 1.7 或更高版本)。
  2. Web 服务器: Tomcat (或其他支持 JSP 的服务器,如 Jetty、Resin 等,建议 Tomcat 7.0 或更高版本)。
  3. IDE: IntelliJ IDEA, Eclipse 或 MyEclipse 等集成开发环境。
  4. 构建工具 (可选): Maven, Gradle,使用构建工具可以简化依赖管理。

第二步:下载并解压 UEditor

  1. 下载 UEditor

    • 访问 UEditor 的官方 GitHub 仓库:https://github.com/fex-team/ueditor
    • 在仓库的 releases 页面找到最新的稳定版本,下载 jsp 版本的源码压缩包。
    • 重要提示:由于官方仓库已归档,你可能无法直接下载到最新的 JSP 版本,一个推荐的、持续维护的 JSP 叉版是 gavinning-ueditor,你可以从这里下载:https://github.com/gavinning/ueditor-jsp
    • 下载后,你会得到一个 .zip 文件,ueditor-jsp-1.4.3.3.zip
  2. 解压并部署

    ueditor jsp使用教程
    (图片来源网络,侵删)
    • 将下载的 .zip 文件解压到你的 Web 服务器的 webapps 目录下。
    • 为了方便,我们将解压后的文件夹重命名,ueditor
    • 你的 Tomcat webapps 目录结构应该如下:
      /path/to/tomcat/webapps/
      ├── ueditor/          <-- UEditor 的根目录
      │   ├── jsp/          <-- JSP 后端代码
      │   ├── dialogs/      <-- 弹出对话框文件
      │   ├── lang/         <!-- 语言包 -->
      │   ├── themes/       <!-- 主题 -->
      │   ├── third-party/  <!-- 第三方库 -->
      │   ├── ueditor.config.js  <!-- 前端配置文件 -->
      │   ├── ueditor.all.js     <!-- 编辑器源码(完整版) -->
      │   └── ...
      └── ...
    • 启动 Tomcat,在浏览器中访问 http://localhost:8080/ueditor/,如果能看到 UEditor 的欢迎页面和示例,说明部署成功。

第三步:配置 JSP 环境

UEditor 的后端处理(如图片上传、文件管理等)依赖于 JSP 文件,你需要确保你的项目能够正确调用这些 JSP。

  1. 核心 JSP 文件 UEditor 的 JSP 后端功能主要集中在一个文件中:jsp/controller.jsp,这个文件是所有后端请求的入口。

  2. 配置 web.xml 为了让所有发送到 /ueditor/jsp/ 的请求都能被 controller.jsp 处理,我们需要在 web.xml 中添加一个 servlet 映射。

    • 打开 ueditor/WEB-INF/web.xml 文件。
    • 添加以下配置:
    <servlet>
        <servlet-name>controller</servlet-name>
        <servlet-class>com.baidu.ueditor.ActionEnter</servlet-class>
        <init-param>
            <param-name>rootPath</param-name>
            <param-value>/</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>controller</servlet-name>
        <url-pattern>/jsp/controller</url-pattern>
    </servlet-mapping>
    • 说明:
      • <servlet-class> 指定了处理请求的 Java 类。
      • <init-param> 中的 rootPath 是配置项,代表 Uditor 的根路径,这里我们使用 ,表示相对于 webapps 的根目录。

第四步:在 JSP 页面中引入 UEditor

我们创建一个简单的 JSP 页面来展示编辑器。

ueditor jsp使用教程
(图片来源网络,侵删)
  1. 创建 JSP 页面ueditor 根目录下,创建一个名为 index.jsp 的文件。

  2. 编写代码index.jsp 中,你需要做三件事:

    • 引入 UEditor 的 CSS 和 JS 文件。
    • 创建一个 textarea 元素作为编辑器的容器。
    • 初始化编辑器。
    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>UEditor JSP 示例</title>
        <!-- 引入 UEditor 的 CSS -->
        <link href="ueditor/themes/default/css/ueditor.css" type="text/css" rel="stylesheet">
        <style type="text/css">
            /* 给编辑器一个默认的高度和宽度 */
            #editor {
                width: 1024px;
                height: 500px;
            }
        </style>
    </head>
    <body>
        <h1>欢迎使用 UEditor</h1>
        <!-- 实例化编辑器 -->
        <script id="editor" type="text/plain"></script>
        <!-- 配置文件 -->
        <script type="text/javascript" src="ueditor/ueditor.config.js"></script>
        <!-- 编辑器源码文件 -->
        <script type="text/javascript" src="ueditor/ueditor.all.js"></script>
        <!-- 实例化编辑器 -->
        <script type="text/javascript">
            // UE.getEditor('editor') 是用来实例化编辑器的
            var ue = UE.getEditor('editor');
        </script>
    </body>
    </html>
  3. 测试 访问 http://localhost:8080/ueditor/index.jsp,你应该能看到一个功能完整的富文本编辑器了。


第五步:后端配置与交互

UEditor 的许多功能(如图片上传、抓取远程图片等)都需要与后端交互,这些交互都通过 controller.jsp 完成,我们需要配置一些路径,让 UEditor 知道文件应该保存在哪里。

  1. 修改 ueditor.config.js 这是前端的核心配置文件,打开 ueditor/ueditor.config.js,找到 serverUrl 配置项,并确保它指向我们配置好的 controller.jsp

    // 服务器统一请求接口路径
    , serverUrl: "jsp/controller" 
  2. 修改 ueditor.config.js 中的图片、文件等保存路径 找到 imageUrlPrefix, scrawlUrlPrefix, snapscreenUrlPrefix 等配置项。UrlPrefix 是文件访问时的前缀,imagePath 是文件保存时的后端路径。

    // 图片上传配置
    , imageUrl: "jsp/upload/image" // 图片提交的后端接口,这里的路径会映射到 controller.jsp 中的 action 参数
    , imagePath: "/ueditor/upload/image/" // 图片保存在本地的路径,注意:这个路径是相对于 webapps 目录的
    , imageFieldName: "upfile" // 提交的图片表单名称
    // ... 其他文件配置类似 ...
    , filePath: "/ueditor/upload/file/"
    , fileFieldName: "upfile"
    • 重要:
      • imageUrl 的值会被 controller.jsp 读取,用于判断用户请求的是什么操作(如上传图片、上传文件等)。
      • imagePath后端 保存文件时使用的路径。你必须确保这个路径存在并且 Tomcat 有读写权限,你可以手动创建这个目录,或者在 controller.jsp 中加入代码自动创建。
      • imageUrlPrefix 是前端显示图片时拼接的 URL 前缀,如果 imagePath/ueditor/upload/image/,那么一张上传的图片 a.jpg 的完整访问路径就是 http://localhost:8080/ueditor/upload/image/a.jpgimageUrlPrefix 应该配置为 "/ueditor/upload/image/"
  3. 自动创建上传目录 (推荐) 为了避免手动创建目录,可以修改 jsp/controller.jsp 文件,在初始化时检查并创建目录。

    打开 ueditor/jsp/controller.jsp,在文件开头找到 String rootPath = application.getRealPath("/") 这一行,在其后添加以下代码:

    <%-- 确保上传目录存在 --%>
    <%
        String imageUploadPath = rootPath + "ueditor" + File.separator + "upload" + File.separator + "image";
        String fileUploadPath = rootPath + "ueditor" + File.separator + "upload" + File.separator + "file";
        File imageFile = new File(imageUploadPath);
        File fileFile = new File(fileUploadPath);
        if (!imageFile.exists()) {
            imageFile.mkdirs();
        }
        if (!fileFile.exists()) {
            fileFile.mkdirs();
        }
    %>

第六步:完整示例代码

下面是一个完整的 index.jsp 示例,它不仅展示了编辑器,还包含了一个“获取内容”按钮,用于演示如何从编辑器中获取内容。

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">UEditor JSP 完整示例</title>
    <link href="ueditor/themes/default/css/ueditor.css" type="text/css" rel="stylesheet">
    <style type="text/css">
        #editor {
            width: 1024px;
            height: 500px;
        }
        #content {
            margin-top: 20px;
            border: 1px solid #ccc;
            padding: 10px;
            width: 1024px;
            min-height: 100px;
            word-wrap: break-word;
        }
        button {
            padding: 8px 15px;
            font-size: 16px;
            cursor: pointer;
        }
    </style>
</head>
<body>
    <h1>UEditor JSP 完整示例</h1>
    <!-- 实例化编辑器 -->
    <script id="editor" type="text/plain"></script>
    <br/>
    <button onclick="getContent()">获取编辑器内容</button>
    <!-- 配置文件 -->
    <script type="text/javascript" src="ueditor/ueditor.config.js"></script>
    <!-- 编辑器源码文件 -->
    <script type="text/javascript" src="ueditor/ueditor.all.js"></script>
    <!-- 实例化编辑器 -->
    <script type="text/javascript">
        var ue = UE.getEditor('editor');
        function getContent() {
            var content = ue.getContent();
            // 使用 alert 弹出内容
            // alert(content);
            // 或者将内容显示在页面的某个 div 中
            document.getElementById('content').innerHTML = content;
        }
    </script>
    <!-- 用于显示编辑器内容的区域 -->
    <div id="content"></div>
</body>
</html>

第七步:常见问题与解决方案

  1. 问题:上传图片时,返回 error 状态码。

    • 原因:通常是后端路径配置错误或目录无权限。
    • 解决方案
      1. 检查 ueditor.config.js 中的 imagePathimageUrlPrefix 是否配置正确。
      2. 检查服务器上对应的上传目录(如 /webapps/ueditor/upload/image/)是否存在,Tomcat 运行用户(如 daemonSYSTEM)对该目录有读写权限,在 Linux 上,你可能需要执行 chmod 777
      3. 打开浏览器的开发者工具(F12),切换到 "Network" 标签,查看上传图片请求的详细响应。controller.jsp 返回的是一个 JSON,里面会包含 stateurltitleoriginal 等字段。state"SUCCESS",说明上传成功;如果是 "ERROR",查看 message 字段了解具体错误。
  2. 问题:跨域问题 (CORS)。

    • 原因:如果你的前端页面和后端接口不在同一个域下(前端是 http://www.myapp.com,后端是 http://api.myapp.com),就会触发浏览器的跨域策略。
    • 解决方案
      1. 最佳实践:将 UEditor 的后端接口(controller.jsp)部署在与前端页面相同的域下。
      2. 如果必须分离:在后端接口中添加 CORS 响应头,在 jsp/controller.jsp 的最顶部添加以下代码:
        <%
            response.setHeader("Access-Control-Allow-Origin", "*"); // 允许所有来源,或指定具体域名如 "http://www.myapp.com"
            response.setHeader("Access-Control-Allow-Methods", "GET, POST");
            response.setHeader("Access-Control-Allow-Headers", "x-requested-with,content-type");
        %>
  3. 问题:集成到自己的项目中时,路径找不到。

    • 原因:你可能不是直接将 UEditor 放在 webapps 下,而是作为项目的某个模块(如 my-webapp/ueditor)。
    • 解决方案
      1. 将 UEditor 的 jsp, themes, lang, third-party, ueditor.config.js, ueditor.all.min.js 等文件复制到你的 Web 项目的相应目录下。
      2. 修改 jsp/controller.jsp 中的 rootPath 计算,使其指向你的项目根目录。
      3. 修改 ueditor.config.js 中的所有路径(imageUrl, imagePath 等),使其相对于你的项目根目录。

通过以上步骤,你应该已经成功地在你的 JSP 项目中集成了 UEditor,核心要点如下:

  1. 正确部署:将 UEditor 放在 webapps 目录或项目内。
  2. 配置 web.xml:将 /jsp/controller 的请求映射到 com.baidu.ueditor.ActionEnter
  3. 前端引入:在 JSP 页面中引入 CSS 和 JS,并用 UE.getEditor() 实例化。
  4. 后端配置:修改 ueditor.config.js,正确配置文件上传路径和访问前缀。
  5. 权限问题:确保上传目录存在且有 Tomcat 的读写权限。

希望这份教程对你有帮助!如果在实践中遇到其他问题,可以结合浏览器控制台和 UEditor 的源码进行排查。