您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据库 > JAVA课程设计模块设计与编程示例
“班级设置”模块设计与编程示例按照MVC设计模式【模型(model)-视图(view)-控制器(controller)】,每个模块逻辑上按三层结构(数据访问层,业务层,Web层)依次从左到右进行设计。下面是以“班级设置”模块为例介绍设计思路。数据访问层:用于与数据库的连接以及各种数据操作,包括增加、删除、查询、修改等。该部分主要包括数据库连接、数据实体接口、数据访问对象。其中“数据访问对象”是对“数据实体接口”的具体实现。例如,数据库连接对象(Dbconnection)主要定义了数据库的访问连接等方法;抽闲数据接口(ClassinfoDao)抽象地定义了操作“班级信息”的各种接口方法(增删查修);而数据访问对象(ClassinfoImp)实现了ClassinfoDao接口中的所有方法,达到数据操作与访问的目的。业务层:用于业务数据的处理,主要通过“数据访问对象”(ClassinfoImp)中提供的各种数据操作,完成相应的“业务层”功能。例如,ClassinfoServiceImp(班级模块的业务处理对象)调用ClassinfoImp中的各种数据处理方法,以实现业务数据的处理。表示层:采用可视化的界面形式显示各种业务处理上的数据,它主要调用业务层中的ClassinfoServiceImp来完成数据的显示。该层模块通常使用Servlet技术来实现,以动态显示。例如:ClassinfoServlet(班级模块的视图显示对象)调用ClassinfoServiceImp中的各种操作服务或方法,实现“表示层”功能。注意:该“学生成绩管理系统”中的每个模块都需要定义上述4种对象或文件(除Dbconnection外)。下面将以“班级设置”模块为例,详细介绍具体设计过程。第一步.因为每个模块都要连接数据库。所以编写一个Dbconnection.java公共类(只需写一次)。第二步.每一模块的功能都需要操作数据,可以将数据存取操作都存放在javabean之中。例如,本例是Classinfo.java数据访问层业务层表示层(Web)Dbconnection(数据库连接)ClassinfoServiceImp(业务处理对象)ClassinfoServlet(视图显示对象)数据接口:ClassinfoDao数据访问对象:ClassinfoImp第三步.首先编写抽象数据接口ClassinfoDao.java(代码如下所示),然后编写该接口的实现对象-数据访问对象(Classinfoimp.java)。使用该接口的目的是为了让业务层与数据访问层分离。publicinterfaceClassinfoDao{voidadd(Classinfoclassinfo);voiddelete(StringclassID);voiduptate(StringclassID,StringgradeID,StringclassName);Classinfofind(StringclassID);ListClassinfogetAll();ListClassinfofenyeList(intpage);intfindCount();}第四步.编写业务层.业务层用于业务数据的处理并完成相应的“业务层”功能。本例中的业务层是ClassinfoServiceImp.java。业务层编写完后以提供web层调用。第五步.编写表示层(web层).表示层是采用可视化的界面形式显示各种业务处理上的数据,它主要调用业务层中的ClassinfoServiceImp来完成数据操作功能,如增加、删除、查询、修改等。本例Web层程序是ClassinfoServlet.java。下面是核心代码解释:因为在修改时要解决中文乱码问题,所以先设置request的编码格式。protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{request.setCharacterEncoding(UTF-8);Stringmethod=request.getParameter(method);if(method.equals(add)){add(request,response);}elseif(method.equals(delete)){delete(request,response);}elseif(method.equals(listall)){listall(request,response);}elseif(method.equals(update)){update(request,response);}elseif(method.equals(fenye)){fenyelistall(request,response);}}在增删改查中稍有困难的是删除和修改在一块实现。主要代码如下。scripttype=text/javascriptfunctionCheckAll(elementsA,elementsB){for(i=0;ielementsA.length;i++){elementsA[i].checked=true;}if(elementsB.checked==false){for(j=0;jelementsA.length;j++){elementsA[j].checked=false;}}}//判断用户是否选择了要删除的记录,如果是,则提示“是否删除”;否则提示“请选择要删除的记录”functioncheckdel(delid,formname){varflag=false;for(i=0;idelid.length;i++){if(delid[i].checked){flag=true;break;}}if(!flag){alert(请选择要删除的记录!);returnfalse;}else{if(confirm(确定要删除吗?)){formname.submit();}}}/scriptformaction=${pageContext.request.contextPath}/ClassinfoServlet?method=deletemethod=postname=frmtableframe=borderwidth=60%trtd班级编号/tdtd年级编号/tdtd班级名称/tdtd删除/tdtd修改/td/trc:forEachvar=citems=${Classinfos}trtd${c.classID}/tdtd${c.gradeID}/tdtd${c.className}/tdtdinputname=delidtype=checkboxclass=nobordervalue=${c.classID}/tdtdahref=${pageContext.request.contextPath}/ChangeServlet?classID=${c.classID}&kind=banjitarget=right修改/a/td/tr/c:forEach/tablefooterinputname=checkboxtype=checkboxclass=noborderonClick=CheckAll(frm.delid,frm.checkbox)[全选/反选][astyle=color:red;cursor:pointer;onClick=checkdel(frm.delid,frm)删除/a]divid=chstyle=display:noneinputname=delidtype=checkboxvalue=0/divdivwidth=98%align=centerstyle=padding-top:10px;${bar}/div!--层ch用于放置隐藏的checkbox控件,因为当表单中只是一个checkbox控件时,应用javascript获得其length属性值为undefine--/footer/form注:一个jsp里可以有多个表单。本例中还有一个值得学习的地方是把数据分页。用mysql和sqlserver数据库实现的方式是不同的。本例还有两个filter类。CheckLoginFilter.java是用来阻止没有登录的用户进入后台管理。后来发现一个问题,就是在登录后,然后退出,再在浏览器里访问main.jsp还是可以进入后台,然后创建一个Nocachefilter.java来阻止浏览器缓存。对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。附录:1.数据库连接对象(Dbconnection.java)packagestu.utils;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.sql.Statement;importorg.junit.Test;publicclassDbconnection{protectedstaticStringdbClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver;protectedstaticStringdbUrl=jdbc:sqlserver://127.0.0.1:1433;+DatabaseName=DB_Student;protectedstaticStringdbUser=sa;protectedstaticStringdbPwd=1234;publicConnectionconnect=null;publicStatementstmt=null;publicResultSetrs=null;@TestpublicConnectiongetConnection(){Connectionconn=null;try{if(conn==null){Class.forName(dbClassName).newInstance();}}catch(Exceptionee){//System.exit(0);}try{conn=DriverManager.getConnection(dbUrl,dbUser,dbPwd);if(conn==null)System.out.println(数据库名称错误);Statementst=conn.createStatement();}catch(SQLExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();System.out.println(数据库连接错误);}returnconn;}publicResultSetexecuteQuery(Stringsql){try{connect=getConnection();stmt=connect.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);rs=stmt.executeQuery(sql);}catch(SQLExceptione){//TODOAuto-generatedcatchblockSystem.err.println(e.getMessage());e.printStackTrace();}returnrs;}//执行添加publicintexecuteUpdate(Strings
本文标题:JAVA课程设计模块设计与编程示例
链接地址:https://www.777doc.com/doc-2881581 .html