spring boot 整合 ueditor 教程三:ueditor执行流程

2018-12-06|来源:

配置ueditor.config.js的请求路径:

原来是:

, serverUrl: URL + "jsp/controller.jsp"

改为

, serverUrl: "/test/ueditor/config"


这个路径怎样用的,可以看ueditor.all.js的源码

捕获.png


/test/ueditor/config干了啥,就是一个实例化ActionEnter,然后根据action执行对应的操作,然后返回

@RequestMapping(value = "/config")
public void config(HttpServletRequest request, HttpServletResponse response) {
    response.setContentType("application/json");
    String rootPath = request.getSession().getServletContext().getRealPath("/");
    try {
        String exec = new ActionEnter(request, rootPath).exec();
        PrintWriter writer = response.getWriter();
        writer.write(exec);
        writer.flush();
        writer.close();
    } catch (IOException e) {
        e.printStackTrace();
    }

}


初始化ueditor的时候,会请求/test/ueditor/config?action=config,主要就是ActionEnter这个类了

1、根据action参数获取操作类型,获取配置文件

public ActionEnter(HttpServletRequest request, String rootPath) {
        this.request = request;
        this.rootPath = rootPath;
        this.actionType = request.getParameter("action");
        this.contextPath = request.getContextPath();
        this.configManager = ConfigManager.getInstance(this.rootPath, this.contextPath, request.getRequestURI());

    }

在ConfigManager实例化时,读取config.json(在这里获取这个文件在整合springboot要注意),然后转为json

private static final String configFileName = "config.json";
private String getConfigPath () {
	return this.parentPath + File.separator + ConfigManager.configFileName;
}
String configContent = this.readFile(this.getConfigPath());
JSONObject jsonConfig = new JSONObject( configContent );


2、根据actionType,然后真正处理上传、文件管理......


整个源码就这么简单。ActionEnter.java完整源码如下:

package com.baidu.ueditor;

import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import com.baidu.ueditor.define.ActionMap;
import com.baidu.ueditor.define.AppInfo;
import com.baidu.ueditor.define.BaseState;
import com.baidu.ueditor.define.State;
import com.baidu.ueditor.hunter.FileManager;
import com.baidu.ueditor.hunter.ImageHunter;
import com.baidu.ueditor.upload.Uploader;

public class ActionEnter {

    private HttpServletRequest request = null;

    private String rootPath = null;
    private String contextPath = null;

    private String actionType = null;

    private ConfigManager configManager = null;

    public ActionEnter(HttpServletRequest request, String rootPath) {
        this.request = request;
        this.rootPath = rootPath;
        this.actionType = request.getParameter("action");
        this.contextPath = request.getContextPath();
        this.configManager = ConfigManager.getInstance(this.rootPath, this.contextPath, request.getRequestURI());

    }

    public String exec() {

        String callbackName = this.request.getParameter("callback");

        if (callbackName != null) {

            if (!validCallbackName(callbackName)) {
                return new BaseState(false, AppInfo.ILLEGAL).toJSONString();
            }

            return callbackName + "(" + this.invoke() + ");";

        } else {
            return this.invoke();
        }

    }

    public String invoke() {
        if (actionType == null || !ActionMap.mapping.containsKey(actionType)) {
            return new BaseState(false, AppInfo.INVALID_ACTION).toJSONString();
        }

        if (this.configManager == null || !this.configManager.valid()) {
            return new BaseState(false, AppInfo.CONFIG_ERROR).toJSONString();
        }

        State state = null;

        int actionCode = ActionMap.getType(this.actionType);

        Map<String, Object> conf = null;

        switch (actionCode) {

            case ActionMap.CONFIG:
                return this.configManager.getAllConfig().toString();

            case ActionMap.UPLOAD_IMAGE:
            case ActionMap.UPLOAD_SCRAWL:
            case ActionMap.UPLOAD_VIDEO:
            case ActionMap.UPLOAD_FILE:
                conf = this.configManager.getConfig(actionCode);
                state = new Uploader(request, conf).doExec();
                break;

            case ActionMap.CATCH_IMAGE:
                conf = configManager.getConfig(actionCode);
                String[] list = this.request.getParameterValues((String) conf.get("fieldName"));
                state = new ImageHunter(conf).capture(list);
                break;

            case ActionMap.LIST_IMAGE:
            case ActionMap.LIST_FILE:
                conf = configManager.getConfig(actionCode);
                int start = this.getStartIndex();
                state = new FileManager(conf).listFile(start);
                break;

        }

        return state.toJSONString();

    }

    public int getStartIndex() {

        String start = this.request.getParameter("start");

        try {
            return Integer.parseInt(start);
        } catch (Exception e) {
            return 0;
        }

    }

    /**
     * callback参数验证
     */
    public boolean validCallbackName(String name) {

        if (name.matches("^[a-zA-Z_]+[\\w0-9_]*$")) {
            return true;
        }

        return false;

    }

}


相关问答

更多

SSH三大框架整合后的执行流程

hibernate:在构建数据层时候可以通过JDBC生成数据层的java代码,在项目运行过程中程序与数据库的交互将从这些地方实现。 spring:一般在项目启动时创建一组系统将要使用到的对象,交由spring管理,项目中需要使用的对象模型可以从这里获取。数据源也可以作为一组由spring管理的对象。 struts:解析获取到的http请求,根据URL分派跳转的类 整个流程从解析http请求开始,根据业务需要一般会涉及数据层操作(hibernate),这些操作完成后,根据返回结果由struts确定请 ...

spring boot整合mybitas怎么配置oracle?

本项目基于maven构建,使用mybatis-spring-boot作为spring-boot项目的持久层框架。 spring-boot中使用mybatis持久层框架与原spring项目使用方式和注解都不相同,需要依赖mybatis-spring-boot包。 具体操作: 引入mybatis和数据库及其他项目依赖。 引入mybatis依赖。 引入mysql 驱动。 项目pom.xml一览。 这样完成spring boot整合mybitas配置oracle。

spring boot和spring的区别

大概说一下: Spring 是一个“引擎” Spring MVC 是基于 Spring 的一个 MVC 框架 Spring Boot 是基于 Spring4 的条件注册的一套快速开发整合包 Spring 最初利用“工厂模式”( DI )和“代理模式”( AOP )解耦应用组件。大家觉得挺好用,于是按照这种模式搞了一个 MVC 框架(一些用 Spring 解耦的组件),用开发 web 应用( SpringMVC )。然后有发现每次开发都要搞很多依赖,写很多样板代码很麻烦,于是搞了一些懒人整合包( s ...

求spring boot开发教程,最好是有视频的和项目源代码的

Spring Boot是目前Spring技术体系中炙手可热的框架之一,既可用于构建业务复杂的企业应用系统,也可以开发高性能和高吞吐量的互联网应用。Spring Boot框架降低了Spring技术体系的使用门槛,简化了Spring应用的搭建和开发过程,提供了流行的第三方开源技术的自动集成。 spring boot企业级应用开发实战:下载地址

百度编辑器UEditor 简单使用教程分享

  UEditor是由百度WEB前端研发部开发的所见即所得的开源富文本编辑器,具有轻量、可定制、用户体验优秀等特点。开源基于BSD协议,所有源代码在协议允许范围内可自由修改和使用。最近在开发程序的时候需要集成一个富文本编辑器,UEditor的UI及UE比CKEditor、KindEditor要好出不少。所以简单地对UEditor研究了一下,记录于此。   一、下载UEditor编辑器   百度编辑器UEditor PHP版   百度编辑器UEditor .NET版   百度编辑器UEditor J ...