📄 defaultrequestprocessor.java
字号:
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 + -