?? gdservlet.java
字號:
package com.gd.mvc.servlet;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.lang.reflect.*;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.gd.jdbc.DbConnectionManager;
import com.gd.mvc.action.Action;
import com.gd.mvc.exception.VODataValidate;
import com.gd.mvc.io.InfoInAndOut;
import com.gd.mvc.io.impl.GdInfoInAndOut;
import com.gd.mvc.util.GdParseXml;
import com.gd.mvc.util.GdWebPath;
public class GdServlet extends HttpServlet{
DbConnectionManager dbManager = null;
/**
* 進(jìn)行初始化工作
*/
public void init() throws ServletException {
//開始初始化連接池
//dbManager = DbConnectionManager.getInstance();
//System.out.println("初始化連接池成功");
}
/**
* 頁面中使用get方式提交,執(zhí)行doPost方法
*/
public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
doPost(req, res);
}
/**
* 頁面中使用post方式提交,執(zhí)行do_Dispatcher方法
*/
public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
do_Dispatcher (req, res);
}
private void do_Dispatcher (HttpServletRequest req, HttpServletResponse res) {
try {
// String action = (String) req.getParameter("action");
// //獲取系統(tǒng)或項目名稱,既http://localhost:8080/myApp/gd/login.do?action=insert時,獲取systemName=gd
// String systemName = "";
// String path = "";
// String ss = req.getServletPath();
// systemName = ss.split("/")[1];
// //獲取訪問路徑,既login.do
// path = ss.split("/")[2].substring(0, ss.split("/")[2].indexOf(".do"));
// //開始對配置文件進(jìn)行解析
// GdParseXml parseXml = new GdParseXml();
// //String pathtemp = req.getRealPath(req.getContextPath());
// //獲取對應(yīng)的配置文件的路徑
// String xmlPath = this.getXmlPath(systemName);
// //讀取配置文件
// parseXml.read(xmlPath);
// //設(shè)定從頁面?zhèn)鱽淼腶ction
// parseXml.setAction(action);
// //設(shè)定從頁面?zhèn)鱽淼膒ath
// parseXml.setPath(path);
// //對配置文件進(jìn)行解析
// parseXml.parseXml();
// //獲取xml解析后的數(shù)據(jù)
// String method = parseXml.getMethod();//獲取Xml中對應(yīng)的方法
// String actionName = parseXml.getActionName();//獲取Xml中訪問路徑對應(yīng)的actionName
// String forwardJspInit = parseXml.getForwardJsp();//獲取Xml設(shè)定的返回的頁面
// String forwardJsp = parseXml.getMethodForwardJsp();//獲取Xml設(shè)定的方法對應(yīng)的返回的頁面
// String forwardJspPath = parseXml.getForwardJspPath();//獲取Xml設(shè)定的返回頁面的path
// String prefix = parseXml.getPrefix();//獲取Xml中設(shè)定的頁面的前綴
// String suffix = parseXml.getSuffix();//獲取Xml中設(shè)定的頁面后綴
// String extendsAction = parseXml.getExtendsAction();//獲取Xml中設(shè)定的是否繼承GdAction
// List voId = parseXml.getVoId();//獲取Xml中設(shè)定的voId
// List voClass = parseXml.getVoClass();//獲取Xml中設(shè)定的voClass
// List voType = parseXml.getVoType();//獲取Xml中設(shè)定的voType
// List voValidate = parseXml.getVoValidate();//獲取Xml中設(shè)定的voValidate
// List voTable = parseXml.getVoTable();//獲取Xml中設(shè)定的voTable
// //將頁面重傳來的數(shù)據(jù)進(jìn)行轉(zhuǎn)換,置入InfoInAndOut
// InfoInAndOut infoIn = new GdInfoInAndOut(req, res, voId, voClass, voType, voValidate);
// InfoInAndOut infoOut = infoIn;
// //將解析后的數(shù)據(jù),置入InfoInAndOut
// infoIn.put("forwardJsp", forwardJsp);
// infoIn.put("forwardJspInit", forwardJspInit);
// infoIn.put("forwardJspPath", forwardJspPath);
// infoIn.put("prefix", prefix);
// infoIn.put("suffix", suffix);
// infoIn.put("voId", voId);
// infoIn.put("voClass", voClass);
// infoIn.put("voType", voType);
// infoIn.put("voValidate", voValidate);
// infoIn.put("voTable", voTable);
// infoIn.put("action", action);
// //獲取對應(yīng)的logic,根據(jù)method來執(zhí)行該logic相對應(yīng)的方法,傳入?yún)?shù)infoIn,返回值infoOut
// Class cls = Class.forName(getActionName(actionName));
// Object obj = (Object)cls.newInstance();//獲取對應(yīng)邏輯的實例
// Method mtd = null;
// //假如Xml中指定邏輯類不使用繼承GdAction的方式
// if (extendsAction == null || "".equals(extendsAction.trim())) {
// if (method == null || "".equals(method.trim())) {
// method = "doInit";//假如指定的方法為空,則默認(rèn)執(zhí)行邏輯中的doInit方法
// }
// mtd = cls.getMethod(method.trim(), new Class[]{InfoInAndOut.class});
// infoOut = (InfoInAndOut)mtd.invoke(obj, new Object[]{infoIn});//執(zhí)行邏輯中對應(yīng)的方法
// } else {//假如Xml中指定邏輯類使用繼承GdAction的方式
// int voFlag = 0;//用來標(biāo)識是否對VO進(jìn)行驗證,0表示驗證成功,1表示失敗
// try {
// mtd = cls.getMethod("doInit", new Class[]{InfoInAndOut.class, InfoInAndOut.class});
// mtd.invoke(obj, new Object[]{infoIn, infoOut});//在GdAction的doInit方法里對VO進(jìn)行驗證
// } catch(Exception e) {
// e.printStackTrace();
// infoOut.put("msg", e.getCause().getMessage());//獲取驗證失敗的消息
// voFlag = 1;//標(biāo)識驗證失敗
// }
// if (voFlag == 0) {//假如驗證成功
// mtd = cls.getMethod("doBegin", null);//首先執(zhí)行doBegin方法
// mtd.invoke(obj, null);
// if (method != null && !"".equals(method)) {
// mtd = cls.getMethod(method.trim(), null);//再執(zhí)行指定的方法
// mtd.invoke(obj, null);
// }
// mtd = cls.getMethod("doEnd", null);//最后執(zhí)行doEnd方法
// mtd.invoke(obj, null);
// }
// }
// //設(shè)定系統(tǒng)名進(jìn)行infoOut
// infoOut.put("systemName", systemName);
// req.setAttribute("infoOut", infoOut);
// //返回到指定頁面
// forward(req, res);
} catch (Exception e) {
e.printStackTrace();
} finally {
}
}
/**
* 獲取指定的邏輯名,如果沒有則默認(rèn)com.gd.mvc.action.impl.GdAction
* @param actionName
* @return
* @throws IOException
* @throws Exception
*/
private String getActionName(String actionName) throws IOException, Exception {
if (actionName == null) {
return "com.gd.mvc.action.impl.GdAction";
} else {
return actionName.trim();
}
}
/**
* 負(fù)責(zé)頁面的返回工作
* @param req
* @param res
* @throws Exception
*/
private void forward(HttpServletRequest req, HttpServletResponse res) throws Exception {
InfoInAndOut infoOut = (req.getAttribute("infoOut") == null) ? new GdInfoInAndOut(req, res) : (InfoInAndOut)req.getAttribute("infoOut");
//獲取Xml文件中使用方法對應(yīng)的返回頁面或在方法中指定的返回也
String forwardJsp = (infoOut.get("forwardJsp") == null) ? "" : ((String)infoOut.get("forwardJsp")).trim();
//在方法中指定的sendRedirectJsp頁面
String sendRedirectJsp = (infoOut.get("sendRedirectJsp") == null) ? "" : ((String)infoOut.get("sendRedirectJsp")).trim();
//在Xml中page中對應(yīng)的默認(rèn)返回頁面和路徑
String forwardJspInit = (infoOut.get("forwardJspInit") == null) ? "" : ((String)infoOut.get("forwardJspInit")).trim();
String forwardJspPath = (infoOut.get("forwardJspPath") == null) ? "" : ((String)infoOut.get("forwardJspPath")).trim();
//在Xml中bean指定的頁面所在的文件夾和后綴
String prefix = (infoOut.get("prefix") == null) ? "" : ((String)infoOut.get("prefix")).trim();
String suffix = (infoOut.get("suffix") == null) ? "" : ((String)infoOut.get("suffix")).trim();
//假如指定了sendRedirectJsp頁面
if (null != sendRedirectJsp && !"".equals(sendRedirectJsp)) {
res.sendRedirect(sendRedirectJsp);
} else {//假如沒有指定sendRedirectJsp頁面
if (!"".equals(forwardJsp)) {//表示不管是否設(shè)定forward元素,只要使用方法對應(yīng)的返回頁面或在模型層指定的頁面
if ("".equals(prefix) || "".equals(suffix)) {//如果沒有設(shè)定id為viewResolver的bean,或設(shè)定不完整
RequestDispatcher rd = req.getRequestDispatcher("/"+ (String)infoOut.get("systemName") +"/jsp/" + forwardJsp + ".jsp");
rd.forward(req, res);
} else if (!"".equals(prefix) && !"".equals(suffix)){//如果沒有設(shè)定id為viewResolver的bean,或設(shè)定不完整
if (forwardJsp.indexOf("/") == -1) {//如果forwardJsp中沒有指定路徑
RequestDispatcher rd = req.getRequestDispatcher(prefix + forwardJsp + suffix);
rd.forward(req, res);
} else {//如果forwardJsp中指定了路徑
RequestDispatcher rd = req.getRequestDispatcher(forwardJsp);
rd.forward(req, res);
}
}
} else if ("".equals(forwardJspInit) && "".equals(forwardJsp)){//如果即沒設(shè)定forward元素,也沒設(shè)定方法對應(yīng)的返回頁面或在模型層指定的頁面,拋異常
throw new Exception("請指定返回頁面");
} else if (!"".equals(forwardJspInit) && "".equals(forwardJsp)){//如果設(shè)定了forward元素,沒有設(shè)定方法對應(yīng)的返回頁面或在模型層指定的頁面
if ("".equals(prefix) || "".equals(suffix)) {//如果沒有設(shè)定id為viewResolver的bean,或設(shè)定不完整
if ("".equals(forwardJspPath)) {//如果沒有設(shè)定forward元素的path屬性
RequestDispatcher rd = req.getRequestDispatcher("/"+ (String)infoOut.get("systemName") +"/jsp/" + forwardJspInit + ".jsp");
rd.forward(req, res);
} else {//如果設(shè)定了forward元素的path屬性
RequestDispatcher rd = req.getRequestDispatcher(forwardJspPath);
rd.forward(req, res);
}
} else if (!"".equals(prefix) && !"".equals(suffix)){//如果沒有設(shè)定id為viewResolver的bean,或設(shè)定不完整
if ("".equals(forwardJspPath)) {//如果沒有設(shè)定forward元素的path屬性
RequestDispatcher rd = req.getRequestDispatcher(prefix + forwardJspInit + suffix);
rd.forward(req, res);
} else {//如果設(shè)定了forward元素的path屬性
RequestDispatcher rd = req.getRequestDispatcher(forwardJspPath);
rd.forward(req, res);
}
}
}
}
}
private String getXmlPath(String systemName) throws IOException {
// 獲取Web環(huán)境的物理路徑D:/eclipse/workspace/myApp
GdWebPath webPath = new GdWebPath();
webPath.getPath();
//Xml文件所在的路徑為工程項目文件夾下的conf文件夾下,名稱為系統(tǒng)名.xml
String xmlPath = webPath.getWebPhysicsPath() + "/conf/" + systemName + ".xml";
File file = new File(xmlPath);
if (!file.exists()) {//假如在指定的位置不存在Xml,則默認(rèn)的Xml文件夾為工程項目文件夾下的/WEB-INF/config-servlet.xml
xmlPath = webPath.getWebPhysicsPath() + "/WEB-INF/config-servlet.xml";
}
return xmlPath;
}
/**
* 進(jìn)行銷毀處理工作
*/
public void destroy() {
//開始銷毀連接池
//dbManager.release();
//System.out.println("銷毀連接池成功");
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -