【仅供内部供应商使用,不提供对外解答和培训】

Page tree

【仅供内部供应商使用,不提供对外解答和培训】

Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 2 Current »

一、特殊名词介绍

二、接口/方法/对象源码——【FineReport V10 2018-07-30】

WebActionsDispatcher.java
package com.fr.web.core;

import com.fr.general.web.ParameterConstants;
import com.fr.plugin.injectable.PluginModule;
import com.fr.stable.StringUtils;
import com.fr.stable.plugin.ExtraClassManagerProvider;
import com.fr.stable.web.RequestCMDReceiver;
import com.fr.web.utils.WebUtils;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @author kunsnat E-mail:kunsnat@gmail.com
 * @version 创建时间:2011-12-7 上午10:52:44
 * 类说明: 各种Service请求之后, Action执行中心. 处理各种Action
 */
public class WebActionsDispatcher {

	private static final String PLUGIN_ID = "pid";

	/**
	 * 处理有sessionid的所有cmd对应的请求
	 * 
	 * @param req HTTP请求
	 * @param res HTTP响应
	 * @param sessionID 会话id
	 * @param actions 所有操作
	 * 
	 *
	 * @date 2014-9-25-下午6:12:55
	 *
	 */
	public static void dealForActionCMD(HttpServletRequest req, HttpServletResponse res, 
			String sessionID, RequestCMDReceiver[] actions) throws Exception {
		
		dealForActionDefaultCmd(req, res, sessionID, actions, null);
	}

	/**
	 * 处理拥有默认cmd的对应请求
	 * 
	 * @param req HTTP请求
	 * @param res HTTP响应
	 * @param sessionID 会话id
	 * @param actions 所有操作
	 * @param defaultCmd 默认的操作
	 * 
	 *
	 * @date 2014-9-25-下午6:12:55
	 *
	 */
    public static void dealForActionDefaultCmd(HttpServletRequest req, HttpServletResponse res,
                                               String sessionID, RequestCMDReceiver[] actions, String defaultCmd) throws Exception {
        String cmd = WebUtils.getHTTPRequestParameter(req, "cmd");
        if (StringUtils.isEmpty(cmd)) {
            cmd = defaultCmd;
        }
        dealForActionCMD(req, res, sessionID, actions, cmd);
    }

	/**
	 * 处理有sessionid的cmd对应的请求
	 * 
	 * @param req HTTP请求
	 * @param res HTTP响应
	 * @param sessionID 会话id
	 * @param actions 所有操作
	 * @param cmd 指定的操作
	 * 
	 *
	 * @date 2014-9-25-下午6:12:55
	 *
	 */
	public static void dealForActionCMD(HttpServletRequest req, HttpServletResponse res, String sessionID, RequestCMDReceiver[] actions, String cmd) throws Exception {

        String op = WebUtils.getHTTPRequestParameter(req, ParameterConstants.OP);
		String pluginID = WebUtils.getHTTPRequestParameter(req, PLUGIN_ID);
		ExtraClassManagerProvider pluginProvider = PluginModule.getAgent(PluginModule.ExtraCore);
		RequestCMDReceiver actionCMD = null;
		if (pluginProvider != null) {
			 actionCMD = pluginProvider.getActionCMD(op, cmd, pluginID);
		}
        if (actionCMD != null) {
            actionCMD.actionCMD(req, res, sessionID);
        } else  {
            for (RequestCMDReceiver action : actions) {
                String acceptCmd = action.getCMD();
                if (acceptCmd.equalsIgnoreCase(cmd)) {
                    action.actionCMD(req, res, sessionID);
                    return;
                }
            }
        }
	}

	/**
	 * 处理没有sessionid的cmd对应的请求
	 * 
	 * @param req HTTP请求
	 * @param res HTTP响应
	 * @param actions 所有操作
	 * 
	 *
	 * @date 2014-9-25-下午6:12:55
	 *
	 */
	public static void dealForActionNoSessionIDCMD(HttpServletRequest req, HttpServletResponse res, 
			ActionNoSessionCMD[] actions) throws Exception {

		String op = WebUtils.getHTTPRequestParameter(req, ParameterConstants.OP);

		String cmd = WebUtils.getHTTPRequestParameter(req, "cmd");

		String pluginID = WebUtils.getHTTPRequestParameter(req, PLUGIN_ID);
		ExtraClassManagerProvider pluginProvider = PluginModule.getAgent(PluginModule.ExtraCore);
		RequestCMDReceiver actionCMD = null;
		if (pluginProvider != null) {
			actionCMD = pluginProvider.getActionCMD(op, cmd, pluginID);
		}
        if (actionCMD != null) {
            actionCMD.actionCMD(req, res);
        } else {
            for (ActionNoSessionCMD action : actions) {
                String acceptCmd = action.getCMD();
                if (acceptCmd.equalsIgnoreCase(cmd)) {
                    action.actionCMD(req, res);
                    return;
                }
            }
        }
	}
}


三、接口/方法/对象说明

该接口主要用于配合WebService接口,对具体的服务请求进行分发处理。该分发器一共有4个方法可以调用,但是插件开发中用得到的绝大多数情况下只有其中的3种。

分发的所有请求必须是报表请求(view/report或view/form),且包含参数 op 和 cmd

上层的分发器通过op参数找到具体的WebService,然后根据cmd参数把请求分发到具体的Action类处理。


四、常用链接

配合使用的服务接口介绍:com.fr.stable.fun.Service

配合使用的请求接口介绍:

com.fr.web.core.ActionCMD

com.fr.stable.web.RequestCMDReceiver

五、开源案例

免责声明:所有文档中的开源示例,均为开发者自行开发并提供。仅用于参考和学习使用,开发者和官方均无义务对开源案例所涉及的所有成果进行教学和指导。若作为商用一切后果责任由使用者自行承担。


  • No labels