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

📄 gdservlet.java

📁 j2ee程序。 spring、xml、 实现增加内容选项。
💻 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 + -