📄 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;
/**
* 进行初始化工作
*/
public void init() throws ServletException {
//开始初始化连接池
//dbManager = DbConnectionManager.getInstance();
//System.out.println("初始化连接池成功");
}
/**
* 页面中使用get方式提交,执行doPost方法
*/
public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
doPost(req, res);
}
/**
* 页面中使用post方式提交,执行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");
// //获取系统或项目名称,既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"));
// //开始对配置文件进行解析
// GdParseXml parseXml = new GdParseXml();
// //String pathtemp = req.getRealPath(req.getContextPath());
// //获取对应的配置文件的路径
// String xmlPath = this.getXmlPath(systemName);
// //读取配置文件
// parseXml.read(xmlPath);
// //设定从页面传来的action
// parseXml.setAction(action);
// //设定从页面传来的path
// parseXml.setPath(path);
// //对配置文件进行解析
// parseXml.parseXml();
// //获取xml解析后的数据
// String method = parseXml.getMethod();//获取Xml中对应的方法
// String actionName = parseXml.getActionName();//获取Xml中访问路径对应的actionName
// String forwardJspInit = parseXml.getForwardJsp();//获取Xml设定的返回的页面
// String forwardJsp = parseXml.getMethodForwardJsp();//获取Xml设定的方法对应的返回的页面
// String forwardJspPath = parseXml.getForwardJspPath();//获取Xml设定的返回页面的path
// String prefix = parseXml.getPrefix();//获取Xml中设定的页面的前缀
// String suffix = parseXml.getSuffix();//获取Xml中设定的页面后缀
// String extendsAction = parseXml.getExtendsAction();//获取Xml中设定的是否继承GdAction
// List voId = parseXml.getVoId();//获取Xml中设定的voId
// List voClass = parseXml.getVoClass();//获取Xml中设定的voClass
// List voType = parseXml.getVoType();//获取Xml中设定的voType
// List voValidate = parseXml.getVoValidate();//获取Xml中设定的voValidate
// List voTable = parseXml.getVoTable();//获取Xml中设定的voTable
// //将页面重传来的数据进行转换,置入InfoInAndOut
// InfoInAndOut infoIn = new GdInfoInAndOut(req, res, voId, voClass, voType, voValidate);
// InfoInAndOut infoOut = infoIn;
// //将解析后的数据,置入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);
// //获取对应的logic,根据method来执行该logic相对应的方法,传入参数infoIn,返回值infoOut
// Class cls = Class.forName(getActionName(actionName));
// Object obj = (Object)cls.newInstance();//获取对应逻辑的实例
// Method mtd = null;
// //假如Xml中指定逻辑类不使用继承GdAction的方式
// if (extendsAction == null || "".equals(extendsAction.trim())) {
// if (method == null || "".equals(method.trim())) {
// method = "doInit";//假如指定的方法为空,则默认执行逻辑中的doInit方法
// }
// mtd = cls.getMethod(method.trim(), new Class[]{InfoInAndOut.class});
// infoOut = (InfoInAndOut)mtd.invoke(obj, new Object[]{infoIn});//执行逻辑中对应的方法
// } else {//假如Xml中指定逻辑类使用继承GdAction的方式
// int voFlag = 0;//用来标识是否对VO进行验证,0表示验证成功,1表示失败
// try {
// mtd = cls.getMethod("doInit", new Class[]{InfoInAndOut.class, InfoInAndOut.class});
// mtd.invoke(obj, new Object[]{infoIn, infoOut});//在GdAction的doInit方法里对VO进行验证
// } catch(Exception e) {
// e.printStackTrace();
// infoOut.put("msg", e.getCause().getMessage());//获取验证失败的消息
// voFlag = 1;//标识验证失败
// }
// if (voFlag == 0) {//假如验证成功
// mtd = cls.getMethod("doBegin", null);//首先执行doBegin方法
// mtd.invoke(obj, null);
// if (method != null && !"".equals(method)) {
// mtd = cls.getMethod(method.trim(), null);//再执行指定的方法
// mtd.invoke(obj, null);
// }
// mtd = cls.getMethod("doEnd", null);//最后执行doEnd方法
// mtd.invoke(obj, null);
// }
// }
// //设定系统名进行infoOut
// infoOut.put("systemName", systemName);
// req.setAttribute("infoOut", infoOut);
// //返回到指定页面
// forward(req, res);
} catch (Exception e) {
e.printStackTrace();
} finally {
}
}
/**
* 获取指定的逻辑名,如果没有则默认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();
}
}
/**
* 负责页面的返回工作
* @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文件中使用方法对应的返回页面或在方法中指定的返回也
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中对应的默认返回页面和路径
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)) {//表示不管是否设定forward元素,只要使用方法对应的返回页面或在模型层指定的页面
if ("".equals(prefix) || "".equals(suffix)) {//如果没有设定id为viewResolver的bean,或设定不完整
RequestDispatcher rd = req.getRequestDispatcher("/"+ (String)infoOut.get("systemName") +"/jsp/" + forwardJsp + ".jsp");
rd.forward(req, res);
} else if (!"".equals(prefix) && !"".equals(suffix)){//如果没有设定id为viewResolver的bean,或设定不完整
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)){//如果即没设定forward元素,也没设定方法对应的返回页面或在模型层指定的页面,抛异常
throw new Exception("请指定返回页面");
} else if (!"".equals(forwardJspInit) && "".equals(forwardJsp)){//如果设定了forward元素,没有设定方法对应的返回页面或在模型层指定的页面
if ("".equals(prefix) || "".equals(suffix)) {//如果没有设定id为viewResolver的bean,或设定不完整
if ("".equals(forwardJspPath)) {//如果没有设定forward元素的path属性
RequestDispatcher rd = req.getRequestDispatcher("/"+ (String)infoOut.get("systemName") +"/jsp/" + forwardJspInit + ".jsp");
rd.forward(req, res);
} else {//如果设定了forward元素的path属性
RequestDispatcher rd = req.getRequestDispatcher(forwardJspPath);
rd.forward(req, res);
}
} else if (!"".equals(prefix) && !"".equals(suffix)){//如果没有设定id为viewResolver的bean,或设定不完整
if ("".equals(forwardJspPath)) {//如果没有设定forward元素的path属性
RequestDispatcher rd = req.getRequestDispatcher(prefix + forwardJspInit + suffix);
rd.forward(req, res);
} else {//如果设定了forward元素的path属性
RequestDispatcher rd = req.getRequestDispatcher(forwardJspPath);
rd.forward(req, res);
}
}
}
}
}
private String getXmlPath(String systemName) throws IOException {
// 获取Web环境的物理路径D:/eclipse/workspace/myApp
GdWebPath webPath = new GdWebPath();
webPath.getPath();
//Xml文件所在的路径为工程项目文件夹下的conf文件夹下,名称为系统名.xml
String xmlPath = webPath.getWebPhysicsPath() + "/conf/" + systemName + ".xml";
File file = new File(xmlPath);
if (!file.exists()) {//假如在指定的位置不存在Xml,则默认的Xml文件夹为工程项目文件夹下的/WEB-INF/config-servlet.xml
xmlPath = webPath.getWebPhysicsPath() + "/WEB-INF/config-servlet.xml";
}
return xmlPath;
}
/**
* 进行销毁处理工作
*/
public void destroy() {
//开始销毁连接池
//dbManager.release();
//System.out.println("销毁连接池成功");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -