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

📄 defaultrequestprocessor.java

📁 一个简单的java邮件系统源码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
package com.easyjf.web.core;

import java.io.IOException;
import java.io.Writer;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Iterator;
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 javax.servlet.http.HttpSession;

import org.apache.log4j.Logger;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;
import org.apache.velocity.context.Context;
import org.apache.velocity.exception.MethodInvocationException;
import org.apache.velocity.exception.ParseErrorException;
import org.apache.velocity.exception.ResourceNotFoundException;
import org.apache.velocity.io.VelocityWriter;
import org.apache.velocity.runtime.RuntimeSingleton;
import org.apache.velocity.util.SimplePool;

import com.easyjf.util.CommUtil;
import com.easyjf.util.HtmlUtil;
import com.easyjf.util.TagUtil;
import com.easyjf.web.ActionServlet;
import com.easyjf.web.Globals;
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.errorhandler.IErrorHandlerManager;
import com.easyjf.web.exception.FrameworkException;
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.theme.ITheme;
import com.easyjf.web.theme.IThemeManager;
import com.easyjf.web.theme.ThemeProcessException;
import com.easyjf.web.theme.defaults.PropertiesNameBasedThemeManager;

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

	private Map theme;

	private IThemeManager themeManager;

	//private IPathMappingRuler pathRuller;

	private IErrorHandlerManager errorHandlerManager;

	private WebConfig webConfig;

	private final static Map templateCache = new HashMap();

	private final static SimplePool writerPool = new SimplePool(60);

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

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

	/**
	 * 异常处理系统还有一定的问题
	 * 
	 * @param request
	 * @param response
	 * @throws IOException
	 * @throws ServletException
	 */
	public void process(HttpServletRequest request, HttpServletResponse response)
			throws Throwable {
		IPathMappingRuler  mappingRuler=new PathMappingRulerImpl(request);
		//if (this.getPathRuller() == null) {
		//	this.setPathRuller(new PathMappingRulerImpl(request));
		//}
		this.theme = this.doTheme(request, mappingRuler);
		String moduleName = mappingRuler.getModuleName();		
		Module module = FrameworkEngine.findModule(webConfig.getModules(),
				moduleName);
		if (module == null)
			module = FrameworkEngine.findModule(moduleName);
		Page page = null;
		if (module != null) {
			String formName = module.getForm();
			WebForm form = FrameworkEngine.creatWebForm(request, formName);
			if (mappingRuler.getCommand() != null) {
				form.getTextElement().put("easyJWebCommand",
						mappingRuler.getCommand());
			}
			if (mappingRuler.getParams() != null) {
				form.getTextElement().putAll(mappingRuler.getParams());
			}
			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);
			try {
				invokeGlobalInterceptors(param);				
				invokeActionBeforeInterceptors(module, param);
				page = getResult(module, form, action);			
				invokeActionAfterInterceptors(module, page, param);
			} catch (Exception error) {
				// boolean ret=
				if (!doErrorHandler(error, param))
					throw error;
				// java.lang.e
				/*
				 * if (this.getErrorHandlerManager() == null) {
				 * this.setErrorHandlerManager(new
				 * PropertiesErrorHandlerManager()); } List handlers =
				 * this.getErrorHandlerManager().findHandler( request, response,
				 * error); if(handlers==null){ handlers=new ArrayList();
				 * handlers.add(new DefaultErrorHandler()); } for (Iterator it =
				 * handlers.iterator(); it.hasNext();) { IErrorHandler handler =
				 * (IErrorHandler) it.next(); page = handler.handle(request,
				 * response, form, error); if (page != null) {
				 * System.out.println(page); break; } }
				 */
				// if(webConfig.isDebug())throw error;
			}
			if (page != null) {
				if (page.getType().equals(Globals.PAGE_TEMPLATE_TYPE)) {
					// logger.debug("合成模板"+page.getName()+":"+page.getUrl());
					doTemplate(page.getUrl(), form, request, response);
				} else {
					// logger.debug("跳转到指定页面:"+page.getUrl());
					// doForward(page.getUrl(),request,response);
					response.sendRedirect(page.getUrl());
				}
			} else {
				// logger.error("没有任何页面要跳转!"+module.getPath()+module.getDefaultPage());
				// servlet.error(request,response,new Exception("没有设置跳转的页面!"));
			}
		}
	}
	
	// 执行全局拦截操作,全局拦截必须是BeforeInterceptors
	protected void invokeGlobalInterceptors(WebInvocationParam param)
			throws Throwable {
		Iterator interceptors = webConfig.getInterceptors().values().iterator();
		if (interceptors != null) {
			while (interceptors.hasNext()) {
				BeforeInterceptor interceptor = (BeforeInterceptor) interceptors
						.next();
				interceptor.before(param.getAction(), null,
						new Object[] { param });
			}
		}
	}

	// 执行前拦截操作,前拦截类型为BeforeInterceptor
	protected void invokeActionBeforeInterceptors(Module module,
			WebInvocationParam param) throws Throwable {
		Iterator interceptors = module.getInterceptors().iterator();
		if (interceptors != null) {
			while (interceptors.hasNext()) {
				Interceptor interceptor = (Interceptor) interceptors.next();
				if (interceptor instanceof BeforeInterceptor)
					((BeforeInterceptor) interceptor).before(param.getAction(),
							null, new Object[] { param });
			}
		}
	}
	//执行后拦截,后拦截类型为AfterInterceptors
	protected void invokeActionAfterInterceptors(Module module, Page page,
			WebInvocationParam param) throws Throwable {
		Iterator interceptors = module.getInterceptors().iterator();
		if (interceptors != null) {
			while (interceptors.hasNext()) {
				Interceptor interceptor = (Interceptor) interceptors.next();
				if (interceptor instanceof AfterInterceptor)
					((AfterInterceptor) interceptor).after(page, param
							.getAction(), null, new Object[] { param });
			}
		}
	}
	//执行错误处理
	protected boolean doErrorHandler(Throwable error, WebInvocationParam param)
			throws Throwable {
		java.util.Iterator it = webConfig.getErrorHandler().values().iterator();
		while (it.hasNext()) {
			ExceptionInterceptor ei = (ExceptionInterceptor) it.next();
			// if(ei.getClass().getde)

⌨️ 快捷键说明

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