J2EE课程设计实训教学示例项目——《网上银行账户管理系统》——系统概要设计中有关的各种UML图
基于Struts+Spring+JDBC架构课程设计实训教学示例项目《网上银行账户管理系统》——重构为Struts技术的项目

基于Struts+Spring+JDBC架构的课程设计实训教学示例项目——《网上银行账户管理系统》——重构为Struts技术的项目1.1.1重构为Struts框架技术的应用项目1、将项目重构为Struts项目(1)利用MyEclipse提供的对Struts框架的技术支持(2)设置与Struts框架有关的工作参数(3)最后的结果如下2、添加AdminManageActionForm表单类(1)类名称为AdminManageActionForm,包名称为com.px1987.webbank.strutsform(2)设计该类的各个参数(3)添加下面的各个成员属性和get/set方法String submitButton=null;String userInfoCheckBox[]=null;String someOnePage=null;String userType=null;String registerYear=null;String userSex=null;String userComeFrom=null; //userComeFrom是下面的stateName和cityName的组合String stateName=null;String cityName=null;String currentPageNumber=null;(4)最后为下面的结果package com.px1987.webbank.strutsform;import javax.servlet.http.HttpServletRequest;import org.apache.struts.action.ActionErrors;import org.apache.struts.action.ActionForm;import org.apache.struts.action.ActionMapping;public class AdminManageActionForm extends ActionForm {private static final long serialVersionUID = 6889244660210689330L; private String userComeFrom;private String userType;private String userSex;private String registerYear;private String submitButton;private String stateName;private String someOnePage;private String cityName;private String[] userInfoCheckBox;private String currentPageNumber;public ActionErrors validate(ActionMapping mapping,HttpServletRequest request) {ActionErrors oneActionErrors=new ActionErrors();return oneActionErrors;}public void reset(ActionMapping mapping, HttpServletRequest request) { userComeFrom="";userType="";userSex="";registerYear="";submitButton="";stateName="";someOnePage="";cityName="";String[] userInfoCheckBox={};currentPageNumber="";}public String getUserComeFrom() {userComeFrom=this.stateName+this.cityName; //将省与城市组合起来return userComeFrom;}public void setUserComeFrom(String userComeFrom) { erComeFrom = userComeFrom;}public String getUserType() {return userType;}public void setUserType(String userType) {erType = userType;}public String getUserSex() {return userSex;}public void setUserSex(String userSex) {erSex = userSex;}public String getRegisterYear() {return registerYear;}public void setRegisterYear(String registerYear) { this.registerYear = registerYear;}public String getSubmitButton() {return submitButton;}public void setSubmitButton(String submitButton) { this.submitButton = submitButton;}public String getStateName() {return stateName;}public void setStateName(String stateName) {this.stateName = stateName;}public String getSomeOnePage() {return someOnePage;}public void setSomeOnePage(String someOnePage) {this.someOnePage = someOnePage;}public String getCityName() {return cityName;}public void setCityName(String cityName) {this.cityName = cityName;}public String[] getUserInfoCheckBox() {return userInfoCheckBox;}public void setUserInfoCheckBox(String[] userInfoCheckBox) { erInfoCheckBox = userInfoCheckBox;}public String getCurrentPageNumber() {return currentPageNumber;}public void setCurrentPageNumber(String currentPageNumber) { this.currentPageNumber = currentPageNumber;}}3、添加AdminForwordAction类(1)类名称为AdminForwordAction,包名称为com.px1987.webbank.strutsaction(2)请求的Path路径设置为:/adminForwordAction,基类为org.apache.struts.actions.DispatchAction(3)将出现下面的结果(4)编程该AdminForwordAction类package com.px1987.webbank.strutsaction;import java.util.ArrayList;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.struts.action.ActionForm;import org.apache.struts.action.ActionForward;import org.apache.struts.action.ActionMapping;import org.apache.struts.actions.DispatchAction;import com.px1987.webbank.constant.WebBankAllConstants; import com.px1987.webbank.exception.WebBankException; import erInfoManageImpleFacade; import com.px1987.webbank.model.vo.PageStateVO_Sington; import erInfoVO;import com.px1987.webbank.strutsform.AdminManageActionForm; public class AdminForwordAction extends DispatchAction {private UserInfoManageImpleFacade oneUserInfoManageImpleFacade=null;private static PageStateVO_Sington onePageStateVO=null;private static ArrayList<UserInfoVO> allCleckUserInfoVOArrayList=null;private static ArrayList<UserInfoVO> allVIPUserInfoVOArrayList=null;private static ArrayList<UserInfoVO> allRegisterUserInfoVOArrayList=null;/* 采用将oneUserInfoManageImpleFacade对象注入时的构造方法*/public void setOneUserInfoManageImpleFacade(UserInfoManageImpleFacade oneUserInfoManageImpleFacade) {this.oneUserInfoManageImpleFacade = oneUserInfoManageImpleFacade;}public AdminForwordAction() {}/*没有采用将oneUserInfoManageImpleFacade对象注入时的构造方法public AdminForwordAction() throws WebBankException {oneUserInfoManageImpleFacade=new UserInfoManageImpleFacade();}*/public ActionForward forwardAdminLeftMenu(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) {return mapping.findForward("forwardAdminLeftMenu");}public ActionForward forwardAdminSwitchMenu(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) {return mapping.findForward("forwardAdminSwitchMenu");}public ActionForward forwardAdminDefaultContent(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) {return mapping.findForward("forwardAdminDefaultContent");}public ActionForward forwardQueryUserInfo(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) {return mapping.findForward("forwardQueryUserInfo");}public ActionForward forwardQueryUserInfoFrameSetTopFrame(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { String defaultStateName="北京";ArrayList<String> allCityNameInOneState=null;try{// oneUserInfoManageImpleFacade=new UserInfoManageImpleFacade();allCityNameInOneState=oneUserInfoManageImpleFacade.doGetAllCityNameInOneState(de faultStateName);}catch (WebBankException e) {request.setAttribute("errorText", e.getMessage());return mapping.findForward("showWebAppError");}request.setAttribute("allCityNameInOneState", allCityNameInOneState);return mapping.findForward("forwardQueryUserInfoFrameSetTopFrame");}public ActionForward forwardQueryUserInfoFrameSetMainFrame(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) {return mapping.findForward("forwardQueryUserInfoFrameSetMainFrame");}//************************************************************************** public ActionForward forwardShowCleckUserInfo(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) {if(allCleckUserInfoVOArrayList==null){try { //获得前台工作人员的信息// oneUserInfoManageImpleFacade=new UserInfoManageImpleFacade();allCleckUserInfoVOArrayList=oneUserInfoManageImpleFacade.doGetAllCleckUserInfo();}catch(WebBankException e){request.setAttribute("errorText", e.getMessage());return mapping.findForward("showWebAppError");}}// ***********下面根据所获得的返回数据获得PageStateVO中的各个状态属性的值并填充各个成员属性****************if(onePageStateVO==null){onePageStateVO=new PageStateVO_Sington();}int currentPageNumber=1; //当前页的页码(第一次为从第一页开始)ArrayList<UserInfoVO>thisPageAllElements=onePageStateVO.setPageStateVOMemberProperty(currentPageNumber,WebBankAllConstants.systemManage_pageSize,allCleckUserInfoVOArrayList);request.setAttribute("thisPageAllElements",thisPageAllElements);request.setAttribute("onePageStateVO",onePageStateVO);request.setAttribute("currentPageNumber",new Integer(currentPageNumber).toString());return mapping.findForward("forwardShowCleckUserInfo");}public ActionForward forwardShowCleckUserInfoTargetPage(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) {String targetPage=request.getParameter("targetPage");int currentPageNumber=Integer.parseInt(targetPage); //获得用户输入的某一页的页码ArrayList<UserInfoVO>thisPageAllElements=onePageStateVO.setPageStateVOMemberProperty(currentPageNumber, WebBankAllConstants.systemManage_pageSize,allCleckUserInfoVOArrayList);request.setAttribute("thisPageAllElements",thisPageAllElements);request.setAttribute("onePageStateVO",onePageStateVO);request.setAttribute("currentPageNumber",new Integer(currentPageNumber).toString());return mapping.findForward("forwardShowCleckUserInfo");}//*********************************************************************** public ActionForward forwardShowVIPUserInfo(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) {if(allVIPUserInfoVOArrayList==null){try { //获得VIP人员的信息// oneUserInfoManageImpleFacade=new UserInfoManageImpleFacade();allVIPUserInfoVOArrayList=oneUserInfoManageImpleFacade.doGetAllVIPUserInfo();}catch(WebBankException e){request.setAttribute("errorText", e.getMessage());return mapping.findForward("showWebAppError");}}// ***********下面根据所获得的返回数据获得PageStateVO中的各个状态属性的值并填充各个成员属性****************if(onePageStateVO==null){onePageStateVO=new PageStateVO_Sington();}int currentPageNumber=1; //当前页的页码(第一次为从第一页开始)ArrayList<UserInfoVO>thisPageAllElements=onePageStateVO.setPageStateVOMemberProperty(currentPageNumber,WebBankAllConstants.systemManage_pageSize,allVIPUserInfoVOArrayList);request.setAttribute("thisPageAllElements",thisPageAllElements);request.setAttribute("onePageStateVO",onePageStateVO);request.setAttribute("currentPageNumber",new Integer(currentPageNumber).toString());return mapping.findForward("forwardShowVIPUserInfo");}public ActionForward forwardShowVIPUserInfoTargetPage(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) {String targetPage=request.getParameter("targetPage");int currentPageNumber=Integer.parseInt(targetPage);//获得用户输入的某一页的页码ArrayList<UserInfoVO>thisPageAllElements=onePageStateVO.setPageStateVOMemberProperty(currentPageNumber, WebBankAllConstants.systemManage_pageSize,allVIPUserInfoVOArrayList);request.setAttribute("thisPageAllElements",thisPageAllElements);request.setAttribute("onePageStateVO",onePageStateVO);request.setAttribute("currentPageNumber",new Integer(currentPageNumber).toString());return mapping.findForward("forwardShowVIPUserInfo");}//*************************************************************************** public ActionForward forwardShowRegisterUserInfo(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) {if(allRegisterUserInfoVOArrayList==null){try { //获得VIP人员的信息// oneUserInfoManageImpleFacade=new UserInfoManageImpleFacade();allRegisterUserInfoVOArrayList=oneUserInfoManageImpleFacade.doGetAllRegisterUserIn fo();}catch(WebBankException e){request.setAttribute("errorText", e.getMessage());return mapping.findForward("showWebAppError");}}// ***********下面根据所获得的返回数据获得PageStateVO中的各个状态属性的值并填充各个成员属性****************if(onePageStateVO==null){onePageStateVO=new PageStateVO_Sington();}int currentPageNumber=1; //当前页的页码(第一次为从第一页开始)ArrayList<UserInfoVO>thisPageAllElements=onePageStateVO.setPageStateVOMemberProperty(currentPageNumber,WebBankAllConstants.systemManage_pageSize,allRegisterUserInfoVOArrayList);request.setAttribute("thisPageAllElements",thisPageAllElements);request.setAttribute("onePageStateVO",onePageStateVO);request.setAttribute("currentPageNumber",new Integer(currentPageNumber).toString());request.setAttribute("allRegisterUserInfoVOArrayList",allRegisterUserInfoVOArrayList);return mapping.findForward("forwardShowRegisterUserInfo");}public ActionForward forwardShowRegisterUserInfoTargetPage(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) {String targetPage=request.getParameter("targetPage");int currentPageNumber=Integer.parseInt(targetPage); //获得用户输入的某一页的页码ArrayList<UserInfoVO>thisPageAllElements=onePageStateVO.setPageStateVOMemberProperty(currentPageNumber, WebBankAllConstants.systemManage_pageSize,allRegisterUserInfoVOArrayList);request.setAttribute("thisPageAllElements",thisPageAllElements);request.setAttribute("onePageStateVO",onePageStateVO);request.setAttribute("currentPageNumber",new Integer(currentPageNumber).toString());return mapping.findForward("forwardShowRegisterUserInfo");}//************************************************************************** public ActionForward forwardImagesUserInfo(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) {return mapping.findForward("forwardImagesUserInfo");}public ActionForward forwardImageUserInfoFrameSetTopFrame(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) {return mapping.findForward("forwardImageUserInfoFrameSetTopFrame");}public ActionForward forwardImageUserInfoFrameSetMainFrame(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) {return mapping.findForward("forwardImageUserInfoFrameSetMainFrame");}//************************************************************************** public ActionForward forwardReportsUserInfo(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) {return mapping.findForward("forwardReportsUserInfo");}public ActionForward forwardReportsUserInfoFrameSetTopFrame(ActionMapping mapping,ActionForm form,HttpServletRequest request, HttpServletResponse response) {return mapping.findForward("forwardReportsUserInfoFrameSetTopFrame");}public ActionForward forwardReportsUserInfoFrameSetMainFrame(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) {return mapping.findForward("forwardReportsUserInfoFrameSetMainFrame");}//*************************************************************************** public ActionForward forwardDeleteCleckUserInfo(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) {if(allCleckUserInfoVOArrayList==null){try { //获得前台工作人员的信息// oneUserInfoManageImpleFacade=new UserInfoManageImpleFacade();allCleckUserInfoVOArrayList=oneUserInfoManageImpleFacade.doGetAllCleckUserInfo();}catch(WebBankException e){request.setAttribute("errorText", e.getMessage());return mapping.findForward("showWebAppError");}}// ***********下面根据所获得的返回数据获得PageStateVO中的各个状态属性的值并填充各个成员属性****************if(onePageStateVO==null){onePageStateVO=new PageStateVO_Sington();}int currentPageNumber=1; //当前页的页码(第一次为从第一页开始)ArrayList<UserInfoVO>thisPageAllElements=onePageStateVO.setPageStateVOMemberProperty(currentPageNumber,WebBankAllConstants.systemManage_pageSize,allCleckUserInfoVOArrayList);request.setAttribute("thisPageAllElements",thisPageAllElements);request.setAttribute("onePageStateVO",onePageStateVO);request.setAttribute("currentPageNumber",new Integer(currentPageNumber).toString());return mapping.findForward("forwardDeleteCleckUserInfo");}public ActionForward forwardDeleteCleckUserInfoTargetPage(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) {String targetPage=request.getParameter("targetPage");int currentPageNumber=Integer.parseInt(targetPage);//获得用户输入的某一页的页码ArrayListthisPageAllElements=onePageStateVO.setPageStateVOMemberProperty(currentPageNumber, WebBankAllConstants.systemManage_pageSize,allCleckUserInfoVOArrayList);request.setAttribute("thisPageAllElements",thisPageAllElements);request.setAttribute("onePageStateVO",onePageStateVO);request.setAttribute("currentPageNumber",new Integer(currentPageNumber).toString());return mapping.findForward("forwardDeleteCleckUserInfo");}// *************下面的方法是响应各个删除的表单请求的方法******************** public ActionForward doDeleteCleckUserInfo(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) {String userInfoCheckBox[]=null;AdminManageActionFormadminManageActionForm=(AdminManageActionForm)form;userInfoCheckBox=adminManageActionForm.getUserInfoCheckBox();if((userInfoCheckBox==null)||(userInfoCheckBox.length <1)){ //操作者没有选中任何要删除的用户IDrequest.setAttribute("errorText", "请选中所要删除的各个用户!");return mapping.findForward("showSystemManageActionErrorInfoAndReturn");}// 选中了用户后,则进行删除的操作ArrayList<String> deletedUserIDs=new ArrayList();for(int index=0; index <userInfoCheckBox.length; index++){deletedUserIDs.add(userInfoCheckBox[index]);//获得所要删除的各个用户的ID }boolean deleteResult=false;try {// oneUserInfoManageImpleFacade=new UserInfoManageImpleFacade();deleteResult=oneUserInfoManageImpleFacade.doBatchDeleteUserInfo(deletedUserIDs);}catch (WebBankException e) {request.setAttribute("errorText", e.getMessage());return mapping.findForward("showWebAppError");}if(!deleteResult){request.setAttribute("errorText", "在批量删除用户数据时出现了错误!");return mapping.findForward("showWebAppError");}//*************完成了删除功能后,继续查询并显示要删除的数据************ try{ //重新查询数据库表以获得删除后的CleckUserInfo数据allCleckUserInfoVOArrayList=oneUserInfoManageImpleFacade.doGetAllCleckUserInfo();}catch(WebBankException e){request.setAttribute("errorText", e.getMessage());return mapping.findForward("showWebAppError");}onePageStateVO=null; // 销毁onePageStateVO以获得删除后的onePageStateVO状态数据return mapping.findForward("forwardDeleteCleckUserInfo"); //重新显示第一页的数据}public ActionForward doDeleteRegisterUserInfo(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) {String userInfoCheckBox[]=null;AdminManageActionFormadminManageActionForm=(AdminManageActionForm)form;userInfoCheckBox=adminManageActionForm.getUserInfoCheckBox();if((userInfoCheckBox==null)||(userInfoCheckBox.length <1)){ //操作者没有选中任何要删除的用户IDrequest.setAttribute("errorText", "请选中所要删除的各个用户!");return mapping.findForward("showSystemManageActionErrorInfoAndReturn");}//选中了用户后,则进行删除的操作ArrayList<String> deletedUserIDs=new ArrayList();for(int index=0; index <userInfoCheckBox.length; index++){deletedUserIDs.add(userInfoCheckBox[index]);//获得所要删除的各个用户的ID }boolean deleteResult=false;try {// oneUserInfoManageImpleFacade=new UserInfoManageImpleFacade();deleteResult=oneUserInfoManageImpleFacade.doBatchDeleteUserInfo(deletedUserIDs);}catch (WebBankException e) {request.setAttribute("errorText", e.getMessage());return mapping.findForward("showWebAppError");}if(!deleteResult){request.setAttribute("errorText", "在批量删除用户数据时出现了错误!");return mapping.findForward("showWebAppError");}//***************完成了删除功能后,继续查询并显示要删除的数据*********** try{ //重新查询数据库表以获得删除后的VIPUserInfo数据allRegisterUserInfoVOArrayList=oneUserInfoManageImpleFacade.doGetAllRegisterUserIn fo();}catch(WebBankException e){request.setAttribute("errorText", e.getMessage());return mapping.findForward("showWebAppError");}onePageStateVO=null; //销毁onePageStateVO以获得删除后的onePageStateVO状态数据return mapping.findForward("forwardDeleteRegisterUserInfo"); //重新显示第一页的数据}public ActionForward doDeleteVIPUserInfo(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) {String userInfoCheckBox[]=null;AdminManageActionForm adminManageActionForm=(AdminManageActionForm)form;userInfoCheckBox=adminManageActionForm.getUserInfoCheckBox();if((userInfoCheckBox==null)||(userInfoCheckBox.length <1)){ //操作者没有选中任何要删除的用户IDrequest.setAttribute("errorText", "请选中所要删除的各个用户!");return mapping.findForward("showSystemManageActionErrorInfoAndReturn");}// 选中了用户后,则进行删除的操作ArrayList<String> deletedUserIDs=new ArrayList();for(int index=0; index <userInfoCheckBox.length; index++){deletedUserIDs.add(userInfoCheckBox[index]);//获得所要删除的各个用户的ID }boolean deleteResult=false;try {// oneUserInfoManageImpleFacade=new UserInfoManageImpleFacade();deleteResult=oneUserInfoManageImpleFacade.doBatchDeleteUserInfo(deletedUserIDs);}catch (WebBankException e) {request.setAttribute("errorText", e.getMessage());return mapping.findForward("showWebAppError");}if(!deleteResult){request.setAttribute("errorText", "在批量删除用户数据时出现了错误!");return mapping.findForward("showWebAppError");}//************完成了删除功能后,继续查询并显示要删除的数据************** try{//重新查询数据库表以获得删除后的VIPUserInfo数据allVIPUserInfoVOArrayList=oneUserInfoManageImpleFacade.doGetAllVIPUserInfo();}catch(WebBankException e){request.setAttribute("errorText", e.getMessage());return mapping.findForward("showWebAppError");}onePageStateVO=null; // 销毁onePageStateVO以获得删除后的onePageStateVO状态数据return mapping.findForward("forwardDeleteVIPUserInfo"); //重新显示第一页的数据}//************************************************************************ public ActionForward forwardDeleteVIPUserInfo(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) {if(allVIPUserInfoVOArrayList==null) {try { //获得VIP人员的信息// oneUserInfoManageImpleFacade=new UserInfoManageImpleFacade();allVIPUserInfoVOArrayList=oneUserInfoManageImpleFacade.doGetAllVIPUserInfo();}catch(WebBankException e){request.setAttribute("errorText", e.getMessage());return mapping.findForward("showWebAppError");}}// ***********下面根据所获得的返回数据获得PageStateVO中的各个状态属性的值并填充各个成员属性****************if(onePageStateVO==null){onePageStateVO=new PageStateVO_Sington();}int currentPageNumber=1; //当前页的页码(第一次为从第一页开始)ArrayList<UserInfoVO>thisPageAllElements=onePageStateVO.setPageStateVOMemberProperty(currentPageNumber,WebBankAllConstants.systemManage_pageSize,allVIPUserInfoVOArrayList);request.setAttribute("thisPageAllElements",thisPageAllElements);request.setAttribute("onePageStateVO",onePageStateVO);request.setAttribute("currentPageNumber",new Integer(currentPageNumber).toString());return mapping.findForward("forwardDeleteVIPUserInfo");}public ActionForward forwardDeleteVIPUserInfoTargetPage(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { String targetPage=request.getParameter("targetPage");int currentPageNumber=Integer.parseInt(targetPage); //获得用户输入的某一页的页码ArrayList<UserInfoVO>thisPageAllElements=onePageStateVO.setPageStateVOMemberProperty(currentPageNumber, WebBankAllConstants.systemManage_pageSize,allVIPUserInfoVOArrayList);request.setAttribute("thisPageAllElements",thisPageAllElements);request.setAttribute("onePageStateVO",onePageStateVO);request.setAttribute("currentPageNumber",new Integer(currentPageNumber).toString());return mapping.findForward("forwardDeleteVIPUserInfo");}//*******************************************************************public ActionForward forwardDeleteRegisterUserInfo(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) {if(allRegisterUserInfoVOArrayList==null) {try { //获得VIP人员的信息// oneUserInfoManageImpleFacade=new UserInfoManageImpleFacade();allRegisterUserInfoVOArrayList=oneUserInfoManageImpleFacade.doGetAllRegisterUserIn fo();}catch(WebBankException e){request.setAttribute("errorText", e.getMessage());return mapping.findForward("showWebAppError");}}// *****下面根据所获得的返回数据获得PageStateVO中的各个状态属性的值并填充各个成员属性*****if(onePageStateVO==null){onePageStateVO=new PageStateVO_Sington();}int currentPageNumber=1; //当前页的页码(第一次为从第一页开始)ArrayList<UserInfoVO>thisPageAllElements=onePageStateVO.setPageStateVOMemberProperty(currentPageNumber,WebBankAllConstants.systemManage_pageSize,allRegisterUserInfoVOArrayList);request.setAttribute("thisPageAllElements",thisPageAllElements);request.setAttribute("onePageStateVO",onePageStateVO);request.setAttribute("currentPageNumber",new Integer(currentPageNumber).toString());return mapping.findForward("forwardDeleteRegisterUserInfo");}public ActionForward forwardDeleteRegisterUserInfoTargetPage(ActionMapping mapping,ActionForm form,HttpServletRequest request, HttpServletResponse response) {String targetPage=request.getParameter("targetPage");int currentPageNumber=Integer.parseInt(targetPage); //获得用户输入的某一页的页码ArrayList<UserInfoVO>thisPageAllElements=onePageStateVO.setPageStateVOMemberProperty(currentPageNumber, WebBankAllConstants.systemManage_pageSize,allRegisterUserInfoVOArrayList);request.setAttribute("thisPageAllElements",thisPageAllElements);request.setAttribute("onePageStateVO",onePageStateVO);request.setAttribute("currentPageNumber",new Integer(currentPageNumber).toString());return mapping.findForward("forwardDeleteRegisterUserInfo");}}(5)添加forward定义4、添加AdminManageAction类(1)类名称为AdminManageAction,包名称为com.px1987.webbank.strutsaction(2)请求的路径Path为:/adminManageAction,基类为org.apache.struts.actions.DispatchAction(3)设置DispatchAction的参数(4)将出现下面的结果(5)编程该AdminManageAction类package com.px1987.webbank.strutsaction; import java.io.UnsupportedEncodingException;import java.util.ArrayList;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import org.apache.struts.action.ActionForm;import org.apache.struts.action.ActionForward;import org.apache.struts.action.ActionMapping;import org.apache.struts.actions.DispatchAction;import com.px1987.webbank.constant.WebBankAllConstants;import com.px1987.webbank.exception.WebBankException;import erInfoManageImpleFacade;import com.px1987.webbank.model.vo.PageStateVO_Prototype;import erInfoVO;import com.px1987.webbank.strutsform.AdminManageActionForm;public class AdminManageAction extends DispatchAction {UserInfoManageImpleFacade oneUserInfoManageImpleFacade=null;HttpSession session =null;// ****************查询用户信息******************************** public ActionForward doQueryUserInfo(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) {AdminManageActionForm adminManageActionForm = (AdminManageActionForm) form;String userSex=adminManageActionForm.getUserSex();String userType=adminManageActionForm.getUserType();String registerTime=adminManageActionForm.getRegisterYear();String userComeFrom=adminManageActionForm.getUserComeFrom();UserInfoVO oneUserInfoVOPartProperty=new UserInfoVO();oneUserInfoVOPartProperty.setUserSex(Integer.parseInt(userSex));oneUserInfoVOPartProperty.setUserType(Integer.parseInt(userType));oneUserInfoVOPartProperty.setRegisterTime(registerTime);。
基于Struts+Spring+JDBC架构课程设计实训教学示例项目——《网上银行账户管理系统》——系统概要设计说明书

J2EE课程设计实训教学示例项目《网上银行账户管理系统》系统概要设计说明书文档信息目录第一章引言 (5)1.1编写目的 (5)1.1.1概要设计说明书目的 (5)1.1.2预期读者 (5)1.2背景 (5)1.1.3待开发软件系统的名称 (5)1.1.4项目的任务提出者 (6)1.1.5项目的任务开发者 (6)1.3定义 (6)1.1.6本文档中涉及的专业词汇 (6)1.1.7名词说明 (6)第二章总体设计(系统架构设计) (7)2.1需求规定 (7)2.1.1输入输出要求 (7)2.1.2时间要求 (7)2.1.3灵活性要求 (7)2.2运行环境 (7)2.2.1设备 (7)2.2.2支撑软件 (8)2.3基本设计概念和处理流程 (8)2.3.1系统概述 (8)2.3.2 系统架构示图 (9)2.3.3各层中应用了相应的主流的J2EE框架技术 (11)2.3.4系统基于MVC设计 (12)2.4 系统结构(系统各个组件设计) (13)2.4.1体系结构包图(架构包图) (13)2.4.2组件设计图(系统中的各个组件) (13)2.4.3类图与接口设计(各个组件中的相关的类和接口) (13)第三章系统数据结构设计 (15)3.1数据库逻辑结构设计 (15)3.1.1实体关系(Entity-Relationship)图 (15)3.1.2数据库表的逻辑设计 (16)第四章系统出错处理设计 (21)4.1出错信息 (21)4.2补救措施 (21)4.3系统维护设计 (22)第一章引言1.1编写目的本文档作为网上银行的概要设计说明文档,用于与用户确定最终的目标,并成为协议文本的一部分,同时也是本系统设计人员的基础文档。
1.1.1概要设计说明书目的本概要设计说明书说明了网上银行系统设计的整体结构。
1.1.2预期读者本系统开发人员及维护人员。
1.2背景网上银行是开展各项金融业务的基础,是一切金融交易的门槛,不论什么样的金融交易,只要通过银行,都表现为资金从一个账户到另一个账户的转移,都会在账户记录中留下痕迹。
J2EE课程设计实训教学示例项目——《网上银行账户管理系统》——银行帐户管理系统的需求和设计

基于Struts+Spring+JDBC架构的课程设计实训教学示例项目——《网上银行账户管理系统》——银行帐户管理系统的需求和设计1.1.1银行帐户管理系统的需求和设计1 、银行帐户管理系统的主要的功能银行账户是开展各项金融业务的基础,是一切金融交易的门槛,不论什么样的金融交易,只要通过银行,都表现为资金从一个账户到另一个账户的转移,都会在账户记录中留下痕迹。
因此,必须加强银行账户系统的信息化建设,加大对账户资金流动的监控力度。
用户到银行办理业务主要有开户、存款、取款、查询、转账、改密码、销户等七项工作。
因此,系统的前台基本功能应该包含开户、存款、取款、查询、转账、改密码、销户等多项功能模块。
通过该银行账户管理系统的开发,使银行的账户管理工作系统化、规范化、自动化,从而达到提高账户管理效率的目的,使有关的工作人员可以轻松快捷地完成对账户管理的任务。
2、系统的基本要求本系统选题为银行账户管理系统,是模拟银行账户的管理开发的。
设计的指导思想是一切为使用者着想,界面要美观大方,操作尽量简单明了,而且作为一个实用的管理系统要有良好的容错性,在出现误操作时能尽量及时地给出警告,以便用户及时地改正。
本系统的具体表现为:1)系统应符合银行账户管理的规定,满足银行相关人员日常使用的需要,并达到操作过程中的直观、方便、实用安全等要求;2)系统采用模块化程序设计方法,即便于系统功能的各种组合和修改,又便于系统以后的扩展和功能完善;3)系统应具备数据库维护功能,及时根据应用的需求进行数据的添加、删除、等操作。
3、基本功能描述(1)开户1)功能描述:用户向银行前台工作人员出示身份证,填写姓名、家庭住址、身份证号码,并且决定开始要存入的初始金额;银行工作人员给用户开出帐号以及给出密码和开户日期。
2)操作者:前台工作人员3)用户输入:输入用户姓名、初始金额、身份证号4)输出:帐号、密码、开户日期(2)存款1)功能描述:用户向银行前台工作人员提供帐号,并且决定要存入的金额;银行工作人员给用户帐号的余额和存款日期。
课程设计实训教学示例项目——《网上银行账户管理系统》——前台客户信息的DAO组件及测试(第1部分)

基于Struts+Spring+JDBC架构的课程设计实训教学示例项目——《网上银行账户管理系统》——前台客户信息的DAO组件及测试(第2/2部分)1.1.1明确DAO组件的设计原则1、DAO接口的设计要点:(1)接口的语义应该仅限于反映对实体的持久化操作(CRUD)比如create、update、delete、findByXXX等。
在DAO接口中不能带有任何的业务语义(商业)。
如果不遵守这个原则,会造成业务逻辑与数据逻辑的混淆,不符合高内聚的最高原则。
(2)DAO实现类的编程要求独立的数据保持组件可以将应用程序与数据源名称、连接信息、DB管理方面的帐户等数据库相关内容隔离开。
因此,应该将这些内容放到某个XML的配置文件中。
(3)DAO(数据访问逻辑组件)的主要作用数据访问逻辑组件主要完成从数据库中检索数据和把实体数据保存回数据库中。
数据访问逻辑组件还包含实现数据相关操作所需的事务控制逻辑。
2、DAO类设计一般的方式(1)每个数据库表对应一个DAO组件-----遵守“单一职责”(2)一个DAO组件对应多个不同的数据库表(这些数据库表之间的数据有紧密关系)1.1.2提供与用户信息相关的DAO组件1、添加一个所有DAO组件的共同接口AllDAOBaseInterface(1)接口的名称为AllDAOBaseInterface,包名称为com.px1987.webbank.dao.inter(2)设计该AllDAOBaseInterfac接口package com.px1987.webbank.dao.inter;import java.sql.Connection;public interface AllDAOBaseInterfac {public void setCon(Connection con);}注意:该接口是为了能够在后面应用动态代理技术而提供的,以便能够注入数据库连接Connection对象。
基于Struts+Spring+JDBC架构课程设计实训项目——《网上银行账户管理系统》——构建表示层中的各个页面组件

基于Struts+Spring+JDBC架构的课程设计实训教学示例项目——《网上银行账户管理系统》——构建表示层中的各个页面组件1.1.1应用系统表示层设计的要点1、表示层应该包含所有表示用户看到的应用程序屏幕的边界类(视图类)。
该层的主要职责是:(1)提供友好、方便的用户界面一个好的应用程序不仅要有强大的功能,还要有美观实用的用户界面。
合理利用空间,保持界面的简洁;合理利用颜色、图像和显示效果来达成内容与形式的统一。
(2)收集(通过表单)、预处理用户的输入信息(对用户输入进行错误检查---JavaScript 或者采用服务器端)(3)显示处理后的结果数据(JSTL或者EL)(4)编辑并校验输入数据的合法性(5)格式化处理结果(6)将输入数据向前传递给请求控制层(Servlet)以屏蔽后台文件的物理结构关系(7)展示的方式支持浏览器方式、应用程序方式。
2、在设计时所应该要考虑的问题(1)界面设计的一致性在界面设计中应该保持界面的一致性,一致性既包括使用统一的界面元素、标准的控件,也包括使用相同的信息表现方法;如在字体、标签风格、颜色、术语、显示错误信息等方面确保一致。
(2)布局合理化原则1)界面风格要支持目前流行的浏览器,并且要使用样式表CSS;应注意在一个窗口内部所有控件的布局和信息组织的艺术性,务求美观大方。
2)在一个窗口中按tab键,移动聚焦的顺序不能杂乱无章,tab 的顺序应为先从上至下,再从左至右。
一屏中首先应输入的和重要信息的控件在tab顺序中应当靠前,也应放在窗口上较醒目的位置。
3)布局力求简洁、有序、易于操作。
(3)数据的输入如何获得基于无状态HTTP的请求数据?如何将请求的字符数据转换为对应的模型对象?(4)输入数据的验证如何验证输入数据的合法性并给出明确的错误消息提示?(5)数据的输出如何展现复杂的对象结构?如何处理复杂的展现逻辑?(6)数据的传递和共享如何在不同的请求或页面之间传递和共享数据?(7)页面的流程管理如何管理Web应用中的页面流程?(8)模块化的管理如何将复杂的Web应用以模块化的方式管理?(9)灵活可扩展的架构如何支持各种不同的展现层技术?如何与业务层或数据层的各种框架整合?(10)安全和访问控制的管理如何提供基于Web的安全机制和资源访问控制的管理?(11)代码实现的简洁和高效如何让开发步骤和代码维护变得简单?如何尽量减少开发的中间环节?如何将公共的功能剥离出来,并可以灵活的组装应用?(12)其它问题异步调用、国际化支持、文件上传、防止重复提交等等。
J2EE课程设计实训项目——《网上银行账户管理系统》——构建Struts2控制层中的各个Action组件(第2部分)

基于Struts+Spring+JDBC架构的课程设计实训教学示例项目——《网上银行账户管理系统》——构建Struts2控制层中的各个Action组件(第2/4部分)1.1.1构建后台管理控制层中图像显示的Action组件1、添加JFreeChartAction组件(1)包名称为com.px1987.webbank.action并继承于AllActionBase类、并且实现com.opensymphony.xwork2.ModelDriven接口类(2)编程该JFreeChartAction组件中的各个控制方法package com.px1987.webbank.action;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;import com.opensymphony.xwork2.ModelDriven;import com.px1987.webbank.actionform.JFreeChartInfoActionForm;import com.px1987.webbank.constant.WebBankAllConstants;import com.px1987.webbank.exception.WebBankException;import com.px1987.webbank.jfreechart.WebChartCommander;public class JFreeChartAction extends AllActionBase implements ModelDriven<JFreeChartInfoActionForm> {private static final long serialVersionUID = -5896732237807922548L;private JFreeChartInfoActionForm oneJFreeChartInfo=new JFreeChartInfoActionForm();String resultImageFileName=null;String targetImageFileURL=null;String chartTitleString=null;String categoryName=null;String numberString=null;String webChartType=null;String chartWidth=null;public JFreeChartAction() {}public JFreeChartInfoActionForm getModel() {return oneJFreeChartInfo;}public String doMVCImagesUserInfo() {initServletContextObject();chartTitleString=getModel().getChartTitle();categoryName=getModel().getCategoryName();numberString=getModel().getNumberString();webChartType=getModel().getWebChartType();chartWidth=getModel().getChartWidth();chartHeight=getModel().getChartHeight();int webChartTypeIndex=Integer.parseInt(webChartType);try {resultImageFileName=newWebChartCommander().produceCommandRequest(WebBankAllConstants.webChartFrameWor kType_JFreeChart,webChartTypeIndex,chartTitleString, categoryName,numberString,chartWidth,chartHeight,session);}catch (WebBankException e) {request.setAttribute("errorText", e.getMessage());return "showWebAppError";}targetImageFileURL=request.getContextPath()+"/DisplayChartServlet?filename="+ resultImageFileName;request.setAttribute("resultImageFileName",resultImageFileName);request.setAttribute("targetImageFileURL",targetImageFileURL);return "mvcImagesUserInfo";}}2、在struts-adminForwordAction.xml中配置该Action组件类<action name ="*JFreeChartAction"class="com.px1987.webbank.action.JFreeChartAction"method="{1}" ><result name="mvcImagesUserInfo">/systemManage/userInfos/mvcImagesUserInfo.jsp</result></action>1.1.2构建后台管理控制层中用户信息显示的Action组件1、添加AdminManageAction组件(1)包名称为com.px1987.webbank.action并继承于AllActionBase类、并且实现com.opensymphony.xwork2.ModelDriven接口类(2)编程该AdminManageAction组件中的各个控制方法package com.px1987.webbank.action;import java.io.UnsupportedEncodingException;import java.util.ArrayList;import com.opensymphony.xwork2.ModelDriven;import com.px1987.webbank.actionform.AdminManageActionForm;import com.px1987.webbank.constant.WebBankAllConstants;import com.px1987.webbank.exception.WebBankException;import erInfoManageImpleFacade;import com.px1987.webbank.model.vo.PageStateVO_Prototype;import erInfoVO;public class AdminManageAction extends AllActionBase implements ModelDriven <AdminManageActionForm>{private static final long serialVersionUID = -8904416180148124024L;private AdminManageActionForm oneAdminManageActionForm=new AdminManageActionForm();public AdminManageAction() {}public String doQueryUserInfo() {UserInfoManageImpleFacade oneUserInfoManageImpleFacade=null;initServletContextObject();String userSex=getModel().getUserSex();String userType=getModel().getUserType();String userComeFrom=getModel().getUserComeFrom();UserInfoVO oneUserInfoVOPartProperty=new UserInfoVO();oneUserInfoVOPartProperty.setUserSex(Integer.parseInt(userSex));oneUserInfoVOPartProperty.setUserType(Integer.parseInt(userType));oneUserInfoVOPartProperty.setRegisterTime(registerTime);oneUserInfoVOPartProperty.setUserComeFrom(userComeFrom);ArrayList onePageUserInfoVOArrayList=null;PageStateVO_Prototype onePageStateVO_Prototype=null;try {oneUserInfoManageImpleFacade=new UserInfoManageImpleFacade();}catch (WebBankException e) {request.setAttribute("errorText", e.getMessage());return "showWebAppError";}try {onePageStateVO_Prototype=new PageStateVO_Prototype();//根据该用户的ID获得其各个帐户信息(但只取出第一页的数据)onePageStateVO_Prototype.setThisPageNumber(1);onePageStateVO_Prototype.setPageSize(WebBankAllConstants.webServiceManage_ pageSize);onePageUserInfoVOArrayList=oneUserInfoManageImpleFacade.doGetOnePageUserIn foByUserType(onePageStateVO_Prototype, oneUserInfoVOPartProperty);}catch(WebBankException e){request.setAttribute("errorText", e.getMessage());return "showWebAppError";}//未找到目标数据时,则显示错误if(onePageUserInfoVOArrayList.size()==0){request.setAttribute("errorText","没有找到满足条件的用户信息");return "showSystemManageActionErrorInfo";}// 如果找到满足条件的用户信息,则转到显示输出的页面中显示输出request.setAttribute("onePageUserInfoVOArrayList",onePageUserInfoVOArrayLi st);request.setAttribute("onePageStateVO_Prototype",onePageStateVO_Prototype);request.setAttribute("currentPageNumber",newInteger(onePageStateVO_Prototype.getThisPageNumber()).toString());request.setAttribute("userType",userType);request.setAttribute("userSex",userSex);request.setAttribute("registerYear",registerTime);request.setAttribute("userComeFrom",userComeFrom);return "forwardShowQueryUserInfoResult";}public String doQueryUserInfoTargetPage() {UserInfoManageImpleFacade oneUserInfoManageImpleFacade=null;initServletContextObject();String targetPageNumber=request.getParameter("targetPage");String userType=request.getParameter("userType");String userSex=request.getParameter("userSex");String registerTime=request.getParameter("registerYear");String userComeFrom=request.getParameter("userComeFrom");try { //由于是超链接提交,因此只好手动转换userComeFrom=new String(userComeFrom.getBytes("ISO8859-1"),"gb2312");}catch (UnsupportedEncodingException e) {request.setAttribute("errorText", e.getMessage());return "showWebAppError";}UserInfoVO oneUserInfoVOPartProperty=new UserInfoVO();oneUserInfoVOPartProperty.setUserSex(Integer.parseInt(userSex));oneUserInfoVOPartProperty.setUserType(Integer.parseInt(userType));oneUserInfoVOPartProperty.setRegisterTime(registerTime);oneUserInfoVOPartProperty.setUserComeFrom(userComeFrom);ArrayList<UserInfoVO> onePageUserInfoVOArrayList=null;PageStateVO_Prototype onePageStateVO_Prototype=null;try {oneUserInfoManageImpleFacade=new UserInfoManageImpleFacade();}catch (WebBankException e) {request.setAttribute("errorText", e.getMessage());return "showWebAppError";}try {onePageStateVO_Prototype=new PageStateVO_Prototype();onePageStateVO_Prototype.setThisPageNumber(Integer.parseInt(targetPageNumb er));onePageStateVO_Prototype.setPageSize(WebBankAllConstants.webServiceManage_ pageSize);onePageUserInfoVOArrayList=oneUserInfoManageImpleFacade.doGetOnePageUserIn foByUserType(onePageStateVO_Prototype, oneUserInfoVOPartProperty);}catch(WebBankException e){request.setAttribute("errorText", e.getMessage());return "showWebAppError";}request.setAttribute("onePageUserInfoVOArrayList",onePageUserInfoVOArrayLi st);request.setAttribute("onePageStateVO_Prototype",onePageStateVO_Prototype);request.setAttribute("currentPageNumber",newInteger(onePageStateVO_Prototype.getThisPageNumber()).toString());request.setAttribute("userType",userType);request.setAttribute("userSex",userSex);request.setAttribute("registerYear",registerTime);request.setAttribute("userComeFrom",userComeFrom);return "forwardShowQueryUserInfoResult";}public AdminManageActionForm getModel() {return oneAdminManageActionForm;}}2、在struts-adminForwordAction.xml中配置该Action组件类<action name ="*AdminManageAction"class="com.px1987.webbank.action.AdminManageAction"method="{1}" ><result name="forwardShowUserInfo">/systemManage/userInfos/showUserInfo.jsp</result></action>注意:在<result>标签中不能采用这样形式的目标/adminForwordAction!forwardShowUserInfo.action。
课程设计实训教学示例项目——《网上银行账户管理系统》——构建项目数据库连接组件和测试(第1部分)

基于Struts+Spring+JDBC架构的课程设计实训教学示例项目——《网上银行账户管理系统》——构建项目数据库连接组件和测试(第1/6部分)1.1.1构建和实现本项目的持久层数据库连接组件1、本项目中的数据库系统几数据库表结构说明——数据库系统为MySQL数据库(1)MYSQL(数据库名称为webbank)(2)webbank数据库中的代表前台用户信息的userinfo数据库表(3)webbank数据库中的代表前台用户联系信息的usercontactinfo数据库表(4)webbank数据库中的代表前台用户籍贯信息中“省与城市”关系的comefrom数据库表(5)webbank数据库中的代表后台管理员用户信息的adminuserinfo数据库表(6)webbank数据库中的银行卡信息的bankcard数据库表(7)webbank数据库中的储户的帐户信息的account数据库表(8)webbank数据库中的交易日志信息的actionloginfo数据库表2、添加自定义的异常类----“统一项目中异常处理”(1)类名称为WebBankException,包名称为com.px1987.webbank.exception,继承ng.Exception(2)编程该类package com.px1987.webbank.exception;public class WebBankException extends Exception {public WebBankException() {}public WebBankException(String message) {super(message);}public WebBankException(Throwable cause) {super(cause);}public WebBankException(String message, Throwable cause) { super(message, cause);}}1.1.2构建系统持久层中的数据库连接组件——面向接口编程实现1、设计数据库连接组件-----ConnectDBInterface接口(1)为什么要应用接口?目的是什么?----“分离设计和实现”和“有助于满足变化”(2)添加接口的名称为ConnectDBInterface,包名称为com.px1987.webbank.dao.inter(3)设计该接口中的方法(4)代码示例package com.px1987.webbank.dao.inter;import java.sql.Connection;import com.px1987.webbank.exception.*;public interface ConnectDBInterface {public Connection getConnection() throws WebBankException;public void closeDBCon() throws WebBankException;public boolean isDBConnectionClose();}2、ConnectDBInterface接口的实现类ConnectDBBean的代码示例为上面的接口提供实现类------目前先采用“JDBC的直接连接方式”实现!问题:JDBC中有几种连接的方式?请学生回答!(1)类名称为ConnectDBBean,包名称为com.px1987.webbank.dao.imple(2)编程该实现类package com.px1987.webbank.dao.imple;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import java.util.logging.Level;import java.util.logging.Logger;import com.px1987.webbank.dao.inter.ConnectDBInterface;import com.px1987.webbank.exception.WebBankException;public class ConnectDBBean implements ConnectDBInterface {static String JDBC_DBDriver_ClassName = "com.mysql.jdbc.Driver";String JDBC_DSN_URL = "jdbc:mysql://localhost:3306/webbank";String JDBC_dbUserName="root";String JDBC_dbUserPassWord="root";private java.sql.Connection con = null;private static Logger logger = Logger.getLogger(ConnectDBBean.class.getName());static{try{Class.forName(JDBC_DBDriver_ClassName);}catch (ng.ClassNotFoundException e){ //在此先不考虑异常处理logger.log(, "不能正确地加载JDBC驱动程序"+e.getMessage());}}public ConnectDBBean() throws WebBankException {}public void initDBConnection() throws WebBankException{try{con = DriverManager.getConnection(JDBC_DSN_URL,JDBC_dbUserName,JDBC_dbUserPassWord);}catch (java.sql.SQLException e) {logger.log(, e.getMessage());throw new WebBankException("不能正确地连接数据库并且出现SQLException");}catch (NullPointerException e){logger.log(, e.getMessage());throw new WebBankException("不能正确地连接数据库并且出现NullPointerException");}}public void closeDBCon() throws WebBankException {if(con==null){return;}try {con.close(); //注意:要识别是否为重复调用,否则会出现数据库连接已经关闭的状况con = null;}catch (SQLException e){logger.log(, e.getMessage());throw new WebBankException("不能正确地关闭数据库连接");}}public Connection getConnection() throws WebBankException {initDBConnection();return con;}public boolean isDBConnectionClose(){return (con==null)?true:false;}}杨教授大学堂精心创作的优秀程序员职业提升必读系列资料3、常规的数据库连接类的功能实现所存在的问题存在哪些问题呢?请同学自己回答!杨教授大学堂,版权所有,盗版必究。
JEE课程设计实训教学示例项目《网上银行账户管理系统》——采用动态代理技术重构各个DAO组件中的事务控制

J2EE课程设计实训教学示例项目《网上银行账户管理系统》——采用动态代理技术重构各个DAO组件中的事务控制杨教授大学堂精心创作的优秀程序员职业提升必读系列资料基于Struts+Spring+JDBC架构的课程设计实训教学示例项目——《网上银行账户管理系统》——采用动态代理技术重构各个DAO组件中的事务控制1.1.1 采用动态代理技术重构各个DAO组件中的事务控制技术实现1、动态代理技术所谓的动态代理类是指在程序运行时,运用反射机制动态创建出。
但该动态代理类需要实现InvocationHandler接口,然后借用JDK反射包中的Proxy类为各种接口动态生成相应的代理类。
动态代理为实现许多常见设计模式(包括Facade、Bridge、Interceptor、Decorator、Proxy(包括远程和虚拟代理)和Adapter 模式)提供了替代的动态机制。
虽然这些模式不使用动态代理,只用普通的类就能够实现,但是在许多情况下,动态代理方式更方便、更紧凑。
2、JDK对动态代理技术实现的支持Java在JDK 1.3之后的版本中加入了协助开发动态代理功能的API 类,这样我们就不必为特定对象与其中的方法编写特定的代理程序,使用动态代理,可以使得一个处理程序handler(也就是我们的动态代理类)能够服务于各个不同的被代理类的对象。
(1)优点与静态代理类对照的是动态代理类,动态代理类的字节码在程序运行时由Java反射机制动态生成,无需程序员手工编写它的源代码。
动态代理类不仅简化了编程工作,而且提高了软件系统的可扩展性,因为Java 反射机制可以生成任意类型的动态代理类。
(2)ng.reflect 包中的Proxy类和InvocationHandler 接口提供了生成动态代理类的能力1) InvocationHandler接口:该接口中仅定义了一个方法Object:invoke(Objectobj,Method method, Object[] args)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于Struts+Spring+JDBC架构的课程设计实训教学示例项目——《网上银行账户管理系统》——系统概要设计中有关的各种UML图
1.1.1UML组件图
1、分析WebBank中的有哪些组件(J2EE Web技术)
(1)表示层
JSP’s页面组件、JavaBean组件、JSTL标签组件、Filter组件和Listener组件、AJAX DWR 组件
(2)控制层
Servlet组件
(3)业务层
用户管理组件、帐户管理组件、业务实体(VO)组件
(4)持久层
DAO组件、数据连接组件、PO组件及DBCP组件
2、在Rose中建立出项目的组件图
(1)建立出各个组件所在的包
(2)在各个包中添加组件
(3)建立出组件图
并命名该组件图
(4)在该组件图中添加各个组件
整理和调整它们的位置
(5)设置它们之间的关系
(6)设置某个组件所实现的接口
1.1.2UML包图
1、新建出项目中的各个包及各个子包(在Logical View节点下)
2、建立出包图
输入包图的名称
最和产生出一个空的包图
然后再分别拖动各个包及其子包到文档窗口中
3、设计包之间的关系
(1)泛化关系
(2)依赖关系
4、最后的结果
1.1.3UML类图
1、在项目中的各个包中添加各个类
2、新建出类图
(1)系统中的持久层的类图
将产生出一个空的类图
3、然后再设计其各种关系(1)组合关系的设计
将首先产生出下面的聚合关系
然后再进一步地修改为组合
最后为下面的结果
最后为下面的结果
(2)系统中的业务(服务)层的类图
(3)系统中的控制层的类图
(4)系统中的表示层的类图
5、详细设计中的类图
(1)添加成员方法
(2)设计方法的参数和数据类型
(3)为方法提供异常声明
(4)最后的结果为下面的状态
(5)也可以通过控制显示方式来隐藏一些无关的信息。