?? frameworkengine.java
字號:
package com.easyjf.web;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.beanutils.BeanUtilsBean;
import org.apache.commons.fileupload.DiskFileUpload;
import org.apache.commons.fileupload.FileItem;
import org.apache.log4j.Logger;
import com.easyjf.aop.EjfProxyFactory;
import com.easyjf.util.CommUtil;
import com.easyjf.web.config.WebConfig;
/**
*
* <p>
* Title:框架處理引擎
* </p>
* <p>
* Description: 負責執WebFrom的創建,Action類的創建等
* </p>
* <p>
* Copyright: Copyright (c) 2006
* </p>
* <p>
* Company: www.easyjf.com
* </p>
*
* @author 蔡世友
* @version 1.0
*/
public abstract class FrameworkEngine {
private static final Logger logger = (Logger) Logger
.getLogger(FrameworkEngine.class.getName());
/**
* 根據request創建一個form對象
*
* @param request
* @param formName
* @return 封裝了用戶數據的Form
*/
public static WebForm creatWebForm(HttpServletRequest request,
String formName) {
Map textElement = new HashMap();
Map fileElement = new HashMap();
String contentType = request.getContentType();
String reMethod = request.getMethod();
if ((contentType != null)
&& (contentType.startsWith("multipart/form-data"))
&& (reMethod.equalsIgnoreCase("POST"))) {
// 二進制 multipart/form-data
DiskFileUpload df = new DiskFileUpload();
df.setHeaderEncoding(request.getCharacterEncoding());
df.setSizeMax(1024 * 1024 * 5);
df.setSizeThreshold(1024 * 20);
List reqPars = null;
try {
reqPars = df.parseRequest(request);
for (int i = 0; i < reqPars.size(); i++) {
FileItem it = (FileItem) reqPars.get(i);
if (it.isFormField()) {
textElement.put(it.getFieldName(), it.getString(request
.getCharacterEncoding()));// 文本字段需要轉碼
} else {
fileElement.put(it.getFieldName(), it);// 文件不需要轉碼
}
}
} catch (Exception e) {
logger.error(e);
}
} else if ((contentType != null) && contentType.equals("text/xml")) {
StringBuffer buffer = new StringBuffer();
try {
String s = request.getReader().readLine();
while (s != null) {
buffer.append(s + "\n");
s = request.getReader().readLine();
}
} catch (Exception e) {
logger.error(e);
}
textElement.put("xml", buffer.toString());
} else {
textElement = request2map(request);
}
// logger.debug("表單數據處理完畢!");
WebForm wf = findForm(formName);
if (wf != null) {
wf.setFileElement(fileElement);
wf.setTextElement(textElement);
}
return wf;
}
/**
* 根據formName查找(創建)一個Form對象
*
* @param formName
* @return 查找Form
*/
public static WebForm findForm(String formName) {
WebForm wf = null;
String formClass = Globals.DEFAULT_FORM_CLASS;
if (formName != null && (!formName.equals(""))) {
FormConfig form = WebConfig.getInstance().findForm(formName);
if (form != null)
formClass = form.getBean();
// logger.debug("創建配置文件中的表單!"+formClass);
if (formClass == null || formClass.equals(""))
formClass = Globals.DEFAULT_FORM_CLASS;
try {
wf = (WebForm) Class.forName(formClass).newInstance();
wf.setProperty(WebConfig.getInstance().findForm(formName)
.getPropertys());
wf.setFormConfig(form);
} catch (Exception e) {
logger.error("創建表單錯誤" + formClass + e);
// throw "Can't ctead form of the type"+formClass;
}
} else {
wf = new WebForm();
}
// logger.debug(wf.getClass().getName());
return wf;
}
/**
* 根據路徑返回一個IWebAction
*
* @param path
* @return action
*/
public static IWebAction findAction(String path) {
IWebAction wf = null;
String actionClass = Globals.DEFAULT_ACTION_CLASS;
if (path != null && (!path.equals(""))) {
Module module = WebConfig.getInstance().findModule(path);
if (module != null)
actionClass = module.getAction();
if (actionClass == null || actionClass.equals(""))
actionClass = Globals.DEFAULT_ACTION_CLASS;
try {
wf = (IWebAction) Class.forName(actionClass).newInstance();
} catch (Exception e) {
logger.error("創建Action錯誤" + actionClass + e);
}
} else {
if (wf == null)
wf = new Action();
}
return wf;
}
/**
* 根據Module返回一個一個IWebAction
*
* @param module
* @return 相應的Action類
*/
public static IWebAction findAction(Module module) {
IWebAction wf = null;
String actionClass = null;
if (module != null)
actionClass = module.getAction();
if (actionClass == null || actionClass.equals(""))
actionClass = Globals.DEFAULT_ACTION_CLASS;
try {
wf = (IWebAction) Class.forName(actionClass).newInstance();
// 嘗試使用代理對象加載攔截器,此處需要再修改
try {
IWebAction temp = (IWebAction) EjfProxyFactory.getProxyAction(
actionClass, module);
if (temp != null) {
wf = temp;
}
} catch (Exception e1) {
// 忽略加載錯誤
}
} catch (Exception e) {
logger.error("創建Action錯誤" + actionClass + e);
}
return wf;
}
/**
* 根據路徑返回一個Module,首先從配置文件中查找,如果配置文件中沒有,則生成缺省的Module
*
* @param pathName
* @return 相應的Action類
*/
public static Module findModule(String pathName) {
Module m = new Module();
String actionClass = getActionName(pathName);
m.setAction(actionClass);
m.setDefaultPage("default");
m.setPath(pathName);
Page p = new Page();
p.setName("default");
p.setType(Globals.PAGE_TEMPLATE_TYPE);
p.setUrl(pathName + "." + Globals.DEFAULT_TEMPLATE_EXT);
Map pages = new HashMap();
pages.put(p.getName(), p);
m.setPages(pages);
return m;
}
public static IRequestInterceptor findRequestInterceptor(String name) {
IRequestInterceptor interceptor = (IRequestInterceptor) WebConfig
.getInstance().getInterceptors().get(name);
return interceptor;
}
public static Iterator getRequestInterceptors() {
return WebConfig.getInstance().getInterceptors().values().iterator();
}
/**
* 根據url路徑生成默認形式的IWebAction類全名
*
* @param pathName
* @return actionName
*/
public static String getActionName(String pathName) {
String[] s = pathName.split("/");
String actionName = "";
if (s != null) {
for (int i = 0; i < s.length; i++) {
if (s[i] != null && (!s[i].equals("")))
actionName += s[i] + (i < s.length - 1 ? "_" : "");
}
}
String actionClass = Globals.DEFAULT_ACTTION_PACKAGE + "." + actionName
+ "Action";
return actionClass;
}
/**
* 一個通用reuqest數據到map的轉換
*
* @param request
* @return Map
*/
public static Map request2map(HttpServletRequest request) {
Map map = new HashMap();
java.util.Enumeration s = request.getParameterNames();
// System.out.println("參數個數:"+request.getParameterMap().size());
while (s.hasMoreElements()) {
String name = (String) s.nextElement();
if (!request.getParameter(name).equals("")) {
map.put(name, request.getParameter(name));
// System.out.println(name+":"+request.getParameter(name)+"<br>");
}
}
return map;
}
/**
* 把表單中傳來的對象轉換到實現Java對象中
*
* @param map
* @param obj
*/
public static void form2Obj(Map map, Object obj) {
Iterator names = map.keySet().iterator();
while (names.hasNext()) {
String name = (String) names.next();
if (BeanUtilsBean.getInstance().getPropertyUtils().isWriteable(obj,
name)) {
try {
Object value = format(BeanUtilsBean.getInstance()
.getPropertyUtils().getPropertyType(obj, name), map
.get(name));
BeanUtilsBean.getInstance().copyProperty(obj, name, value);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
/**
* 這里執行數據類型轉換工作,比如把Form中傳來的字符型數據轉換成日期型數據
*
* @param clz
* @param source
* @return
*/
private static Object format(Class clz, Object source) {
Object ret;
if (clz == Date.class)
ret = CommUtil.formatDate(source.toString());
else
ret = source;
return ret;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -