⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 defaultrequestprocessor.java.svn-base

📁 EasyJWeb是基于java技术
💻 SVN-BASE
📖 第 1 页 / 共 2 页
字号:
package com.easyjf.web.core;

import java.io.IOException;
import java.lang.reflect.Method;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;

import com.easyjf.web.ActionContext;
import com.easyjf.web.ActionServlet;
import com.easyjf.web.Globals;
import com.easyjf.web.IPageVender;
import com.easyjf.web.IPathMappingRuler;
import com.easyjf.web.IWebAction;
import com.easyjf.web.Module;
import com.easyjf.web.Page;
import com.easyjf.web.RequestProcessor;
import com.easyjf.web.WebConfig;
import com.easyjf.web.WebForm;
import com.easyjf.web.WebInvocationParam;
import com.easyjf.web.core.support.DefaultPageVender;
import com.easyjf.web.errorhandler.IErrorHandlerManager;
import com.easyjf.web.exception.DefaultExceptionHandle;
import com.easyjf.web.exception.FrameworkException;
import com.easyjf.web.exception.TokenVaildException;
import com.easyjf.web.exception.ValidateException;
import com.easyjf.web.interceptor.AfterInterceptor;
import com.easyjf.web.interceptor.BeforeInterceptor;
import com.easyjf.web.interceptor.ExceptionInterceptor;
import com.easyjf.web.interceptor.Interceptor;
import com.easyjf.web.validate.ValidatorManager;

/**
 * 
 * <p>
 * Title:框架默认处理器
 * </p>
 * <p>
 * Description:EasyJWeb框架的中心处理器,由ActionServlet调用,然后调用相应的Action并返回用户服务
 * </p>
 * <p>
 * Copyright: Copyright (c) 2006
 * </p>
 * <p>
 * Company: www.easyjf.com
 * </p>
 * 
 * @author 蔡世友,stef,tony
 * @version 1.0
 * @since 2006/9
 */
public class DefaultRequestProcessor implements RequestProcessor {

	private static final long serialVersionUID = -4362786097761398444L;

	private ActionServlet servlet;

	private IErrorHandlerManager errorHandlerManager;

	private WebConfig webConfig;

	private static List<IPageVender> pageVenders;

	private static final Logger logger = Logger
			.getLogger(DefaultRequestProcessor.class);

	private TokenProcessor token = TokenProcessor.getInstance();

	public DefaultRequestProcessor() {
		this(null, null);
	}

	/**
	 * Processor只能由ActionServlet来启动
	 * 
	 * @param servlet
	 */
	public DefaultRequestProcessor(ActionServlet servlet, WebConfig webConfig) {
		this.servlet = servlet;
		this.webConfig = webConfig;
	}

	public void setServlet(ActionServlet servlet) {
		this.servlet = servlet;
	}

	/**
	 * 异常处理系统还有一定的问题
	 * 
	 * @param request
	 * @param response
	 * @throws IOException
	 * @throws ServletException
	 */
	public void process(HttpServletRequest request, HttpServletResponse response)
			throws Throwable {
		try {
			// System.out.println("执行Action");
			ValidatorManager vm = FrameworkEngine.getValidateManager();
			if (vm != null)
				vm.cleanErrors();
			IPathMappingRuler mappingRuler = new PathMappingRulerImpl(request);
			/**
			 * 加入国际化环境
			 */
			I18NResourceCache resource = new I18NResourceCache(FrameworkEngine
					.getResourcePath());
			resource.setLocale(request.getLocale());
			FrameworkEngine.setResourceCache(resource);
			int jumpActionTimes = 0;
			process(request, response, vm, mappingRuler, null, jumpActionTimes);
		} catch (Exception e) {
			logger.error("出现了错误:" + e);
			doErrorHandler(e, ActionContext.getContext()
					.getWebInvocationParam());
		}
	}

	protected void process(HttpServletRequest request,
			HttpServletResponse response, ValidatorManager vm,
			IPathMappingRuler mappingRuler, WebForm webForm, int jumpTimes)
			throws FrameworkException, Throwable, Exception, ValidateException,
			IOException, ServletException {
		// 模块名称
		String moduleName = mappingRuler.getModuleName();
		// 取模块
		Module module = FrameworkEngine.findModule(moduleName);
		Page page = null;
		if (module != null) {
			String formName = module.getForm();
			// 创建WebForm
			WebForm form = webForm == null ? FrameworkEngine.creatWebForm(
					request, formName, module) : webForm;

			form.setUrl(ActionContext.getContext().getRequest().getHeader(
					"REFERER"));
			// 取得命令 主要用于easyDBO中
			if (mappingRuler.getCommand() != null) {
				form.getTextElement().put("easyJWebCommand",
						mappingRuler.getCommand());
			}
			// 装载页面参数
			if (mappingRuler.getParams() != null) {
				form.getTextElement().putAll(mappingRuler.getParams());
			}
			// 装载action
			IWebAction action = FrameworkEngine.findAction(module);
			if (action == null) {
				throw new FrameworkException("没有找到处理模板的类:" + module.getAction());
			}
			if (form == null) {
				throw new FrameworkException("表单创建错误:" + formName);
			}
			WebInvocationParam param = new WebInvocationParam(action, form,
					module);
			param.setUrlType(mappingRuler.getUrlPattern());
			ActionContext.getContext().put(ActionContext.WEBINVOCATION, param);// 把调用参数值设置到上下文中
			// 开始执行Action中的主体方法,包括全局拦截、Action前置拦截、Action的execute、Action后置拦截等方法
			try {
				// 执行全局拦截操作,对非法输入进行拦截
				invokeGlobalInterceptors(param);
				// 执行前拦截操作
				invokeActionBeforeInterceptors(module, param);
				// 处理自动token
				this.processAutoToken(param);
				// 处理业务操作并返回form对象
				page = getResult(param);
				// 执行后拦截
				invokeActionAfterInterceptors(module, page, param);
				// 如果Action正常执行,根据module中validate属性的配置,以及执行过程中的错误,判断是否使启动自动验证功能。
				if (module.isValidate() && vm != null
						&& vm.getErrors().hasError()) {
					Page tempPage = page;
					page = findValidatePage(param); // 查找并返回自动验证页面
					if (page == null)
						page = tempPage;
				}
			} catch (ValidateException ve) {
				// 执行验证处理
				form.getEasyJWebResult().putAll(form.getTextElement());// 把form中填写的数据存入结果集中
				page = findValidatePage(param);
				if (page == null)
					throw ve;// 找不到验证错误页面,把异常交给异常拦截器统一处理
			}
			if (page != null) {
				// 如果配置的是模版则合成模版
				if (page.getType().equals(Globals.PAGE_TEMPLATE_TYPE)) {

					doVenderPage(page, form, request, response, param);
					// 执行回调
					if (ActionContext.getContext().getRequestCallback() != null) {
						ActionContext.getContext().getRequestCallback()
								.doFinish();
					}
					if (ActionContext.getContext().getUri() != null) {
						doForward(ActionContext.getContext().getUri(), request,
								response);
					}
				} else if ("null".equals(page.getType())) {
					// 空结果集页面,表示不返回任何结果集,
				} else if ("action".equals(page.getType())) {
					processActionPage(request, response, vm, page, param,
							jumpTimes);
				} else if ("forward".equals(page.getType())) {
					doForward(page.getUrl(), request, response);
				} else {
					// 其它类型全部当作html来处理
					// logger.debug("跳转到指定页面:"+page.getUrl());
					// doForward(page.getUrl(),request,response);
					response.sendRedirect(page.getUrl());
				}
			} else {
				logger.debug("没有任何页面要跳转!" + module.getPath()
						+ module.getDefaultPage());
				// servlet.error(request,response,new
				// Exception("没有设置跳转的页面!"));
			}
		}
	}

	/**
	 * 处理模板合成 首先初始化模板合成器链, 然后调用页面合成器完成页面合成。
	 * 
	 * @param page
	 *            Page对象
	 * @param form
	 *            WebForm对象

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -