




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
“班级设置”模块设计与编程示例按照MVC设计模式【模型(model)视图(view)控制器(controller)】,每个模块逻辑上按三层结构(数据访问层,业务层,Web层)依次从左到右进行设计。下面是以“班级设置”模块为例介绍设计思路。数据访问层业务层表示层(Web)Dbconnection(数据库连接)ClassinfoServiceImp(业务处理对象)ClassinfoServlet(视图显示对象)数据接口:ClassinfoDao数据访问对象: ClassinfoImp数据访问层:用于与数据库的连接以及各种数据操作,包括增加、删除、查询、修改等。该部分主要包括数据库连接、数据实体接口、数据访问对象。其中“数据访问对象”是对“数据实体接口”的具体实现。例如,数据库连接对象(Dbconnection)主要定义了数据库的访问连接等方法;抽闲数据接口(ClassinfoDao)抽象地定义了操作“班级信息”的各种接口方法(增删查修);而数据访问对象(ClassinfoImp)实现了ClassinfoDao接口中的所有方法,达到数据操作与访问的目的。业务层:用于业务数据的处理,主要通过“数据访问对象”(ClassinfoImp)中提供的各种数据操作,完成相应的“业务层”功能。例如,ClassinfoServiceImp(班级模块的业务处理对象)调用ClassinfoImp中的各种数据处理方法,以实现业务数据的处理。表示层:采用可视化的界面形式显示各种业务处理上的数据,它主要调用业务层中的ClassinfoServiceImp来完成数据的显示。该层模块通常使用Servlet技术来实现,以动态显示。例如:ClassinfoServlet(班级模块的视图显示对象)调用 ClassinfoServiceImp中的各种操作服务或方法,实现“表示层”功能。注意:该“学生成绩管理系统”中的每个模块都需要定义上述4种对象或文件(除Dbconnection外)。下面将以“班级设置”模块为例,详细介绍具体设计过程。第一步.因为每个模块都要连接数据库。所以编写一个Dbconnection.java公共类(只需写一次)。第二步.每一模块的功能都需要操作数据,可以将数据存取操作都存放在javabean之中。例如,本例是Classinfo.java第三步.首先编写抽象数据接口ClassinfoDao.java(代码如下所示),然后编写该接口的实现对象-数据访问对象(Classinfoimp.java)。使用该接口的目的是为了让业务层与数据访问层分离。public interface ClassinfoDao void add(Classinfo classinfo);void delete(String classID);void uptate(String classID, String gradeID, String className);Classinfo find(String classID);List getAll();List fenyeList(int page);int findCount();第四步.编写业务层.业务层用于业务数据的处理并完成相应的“业务层”功能。本例中的业务层是ClassinfoServiceImp.java。业务层编写完后以提供web层调用。第五步.编写表示层(web层).表示层是采用可视化的界面形式显示各种业务处理上的数据,它主要调用业务层中的ClassinfoServiceImp来完成数据操作功能,如增加、删除、查询、修改等。本例Web层程序是ClassinfoServlet.java。下面是核心代码解释:因为在修改时要解决中文乱码问题,所以先设置request的编码格式。protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException request.setCharacterEncoding(UTF-8);String method= request.getParameter(method);if(method.equals(add)add(request,response);else if(method.equals(delete)delete(request,response);else if(method.equals(listall)listall(request,response);else if(method.equals(update)update(request,response);else if(method.equals(fenye)fenyelistall(request, response);在增删改查中稍有困难的是删除和修改在一块实现。主要代码如下。function CheckAll(elementsA, elementsB) for (i = 0; i elementsA.length; i+) elementsAi.checked = true;if (elementsB.checked = false) for (j = 0; j elementsA.length; j+) elementsAj.checked = false;/判断用户是否选择了要删除的记录,如果是,则提示“是否删除”;否则提示“请选择要删除的记录”function checkdel(delid, formname) var flag = false;for (i = 0; i delid.length; i+) if (delidi.checked) flag = true;break;if (!flag) alert(请选择要删除的记录!);return false; else if (confirm(确定要删除吗?) formname.submit();班级编号年级编号班级名称删除修改$c.classID$c.gradeID$c.className修改 全选/反选 删除$bar注:一个jsp里可以有多个表单。本例中还有一个值得学习的地方是把数据分页。用mysql和sqlserver数据库实现的方式是不同的。本例还有两个filter类。CheckLoginFilter.java是用来阻止没有登录的用户进入后台管理。后来发现一个问题,就是在登录后,然后退出,再在浏览器里访问main.jsp还是可以进入后台,然后创建一个Nocachefilter.java来阻止浏览器缓存。对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。附录:1. 数据库连接对象(Dbconnection.java)package stu.utils;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import org.junit.Test;public class Dbconnection protected static String dbClassName = com.microsoft.sqlserver.jdbc.SQLServerDriver;protected static String dbUrl = jdbc:sqlserver:/:1433;+ DatabaseName=DB_Student;protected static String dbUser = sa;protected static String dbPwd = 1234;public Connection connect = null;public Statement stmt=null;public ResultSet rs=null;Testpublic Connection getConnection() Connection conn = null;try if (conn = null) Class.forName(dbClassName).newInstance(); catch (Exception ee) /System.exit(0);try conn=DriverManager.getConnection(dbUrl,dbUser,dbPwd);if(conn=null)System.out.println(数据库名称错误);Statement st=conn.createStatement(); catch (SQLException e) / TODO Auto-generated catch blocke.printStackTrace(); System.out.println(数据库连接错误);return conn;public ResultSet executeQuery(String sql) try connect=getConnection();stmt=connect.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);rs=stmt.executeQuery(sql); catch (SQLException e) / TODO Auto-generated catch blockSystem.err.println(e.getMessage();e.printStackTrace();return rs;/执行添加public int executeUpdate(String sql)int result=0;try connect=getConnection();stmt=connect.createStatement();result=stmt.executeUpdate(sql);/System.out.print(添加成功); catch (SQLException e) / TODO Auto-generated catch block/e.printStackTrace();result=0;try stmt.close(); catch (SQLException e) / TODO Auto-generated catch blocke.printStackTrace();return result;public void close()try if(rs!=null)rs.close(); catch (SQLException e) / TODO Auto-generated catch blocke.printStackTrace();try if(stmt!=null)stmt.close(); catch (SQLException e) / TODO Auto-generated catch blocke.printStackTrace();try if(connect!=null)connect.close(); catch (SQLException e) / TODO Auto-generated catch blocke.printStackTrace();2. 数据实体JavaBean(Classinfo.java)package stu.domain;public class Classinfo public static final int PAGE_SIZE = 2;private String classID;private String gradeID;private String className;public String getClassID() return classID;public void setClassID(String classID) this.classID = classID;public String getGradeID() return gradeID;public void setGradeID(String gradeID) this.gradeID = gradeID;public String getClassName() return className;public void setClassName(String className) this.className = className;3. 抽象数据接口(ClassinfoDao.java)package stu.dao;import java.util.List;import stu.domain.Classinfo;public interface ClassinfoDao void add(Classinfo classinfo);void delete(String classID);void uptate(String classID, String gradeID, String className);Classinfo find(String classID);List getAll();List fenyeList(int page);int findCount();4. 数据访问层(Classinfoimp.java):实现了ClassinfoDao接口package stu.dao.imp;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.util.ArrayList;import java.util.List;import stu.dao.ClassinfoDao;import stu.domain.Classinfo;import stu.domain.User;import stu.utils.Dbconnection;public class Classinfoimp implements ClassinfoDao public void add(Classinfo classinfo)Dbconnection conn=new Dbconnection();String sql=Insert into tb_classinfo values(+classinfo.getClassID()+,+classinfo.getGradeID()+,+classinfo.getClassName()+);conn.executeUpdate(sql);conn.close();public void delete(String classID) Dbconnection conn=new Dbconnection();String sql=delete tb_classinfo where classID=+classID+;conn.executeUpdate(sql);conn.close();public void uptate(String classID,String gradeID,String className)Dbconnection conn=new Dbconnection();String sql=update tb_classinfo set gradeID=+gradeID+,className=+className+where classID=+classID+;conn.executeUpdate(sql);conn.close();public Classinfo find(String classID)Classinfo cl=new Classinfo();Dbconnection conn=new Dbconnection();String sql=select * from tb_classinfo where classID=+classID+;ResultSet rs=conn.executeQuery(sql);try while(rs.next() cl.setClassID(rs.getString(1); cl.setGradeID(rs.getString(2); cl.setClassName(rs.getString(3); catch (SQLException e) / TODO Auto-generated catch blocke.printStackTrace();cl.setClassID(classID);return cl;public List getAll()Dbconnection conn=new Dbconnection();String sql=select * from tb_classinfo;ResultSet rs=conn.executeQuery(sql);List list=new ArrayList(); try while(rs.next() Classinfo cl=new Classinfo(); cl.setClassID(rs.getString(1); cl.setGradeID(rs.getString(2); cl.setClassName(rs.getString(3); list.add(cl); catch (SQLException e) / TODO Auto-generated catch blocke.printStackTrace();return list;/SELECT TOP 30 * FROM ARTICLE WHERE ID NOT IN(SELECT TOP 45000 ID FROM ARTICLE ORDER BY YEAR DESC, ID DESC) ORDER BY YEAR DESC,ID DESC public List fenyeList(int page)List list = new ArrayList();Dbconnection conn=new Dbconnection();String sql = select top +Classinfo.PAGE_SIZE+ * from tb_classinfo where classID not in(select top +(page - 1) * Classinfo.PAGE_SIZE+ classID from tb_classinfo order by classID desc) order by classID desc;try ResultSet rs=conn.executeQuery(sql);while(rs.next()Classinfo cl=new Classinfo();cl.setClassID(rs.getString(1);cl.setGradeID(rs.getString(2);cl.setClassName(rs.getString(3);list.add(cl);rs.close(); catch (SQLException e) / TODO Auto-generated catch blocke.printStackTrace();return list;public int findCount()int count=0;Dbconnection Dbconn=new Dbconnection();Connection con=Dbconn.getConnection();String sql = select count(*) from tb_classinfo;try Statement stmt = con.createStatement();ResultSet rs = stmt.executeQuery(sql);if (rs.next() / 光标向后移动,并判断是否有效count = rs.getInt(1); / 对总记录数赋值rs.close(); / 关闭ResultSetcon.close(); / 关闭Connection catch (SQLException e) / TODO Auto-generated catch blocke.printStackTrace();return count;5.数据处理业务类(ClassinfoServiceImp.java)package stu.service.imp;import java.util.List;import stu.dao.ClassinfoDao;import stu.dao.imp.Classinfoimp;import stu.domain.Classinfo;public class ClassinfoServiceImp private ClassinfoDao dao=new Classinfoimp();public void addClassinfo(Classinfo classinfo) dao.add(classinfo); public void deleteClassinfo(String classID) dao.delete(classID); public void uptateClassinfo(String classID,String gradeID,String className) dao.uptate(classID, gradeID, className); public Classinfo findClassinfo(String classID) return dao.find(classID); public List getAllClassinfo()return dao.getAll(); public List fenyeListClassinfo(int page)return dao.fenyeList(page); public int ClassinfofindCount() return dao.findCount();6. 视图显示模块(ClassinfoServlet.java)package stu.web.controller;import java.io.IOException;import java.io.UnsupportedEncodingException;import java.util.List;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import stu.domain.Classinfo;import stu.service.imp.ClassinfoServiceImp;/* * Servlet implementation class ClassinfoServlet */WebServlet(/ClassinfoServlet)public class ClassinfoServlet extends HttpServlet private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException request.setCharacterEncoding(UTF-8);String method= request.getParameter(method);if(method.equals(add)add(request,response);else if(method.equals(delete)delete(request,response);else if(method.equals(listall)listall(request,response);else if(method.equals(update)update(request,response);else if(method.equals(fenye)fenyelistall(request, response);private void update(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException request.setCharacterEncoding(UTF-8);String classID=request.getParameter(classID);String gradeID=request.getParameter(gradeID);String className=request.getParameter(className);ClassinfoServiceImp service=new ClassinfoServiceImp();service.uptateClassinfo(classID, gradeID, className);listall(request, response);private void fenyelistall(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException request.setCharacterEncoding(UTF-8);int currPage = 1;if(request.getParameter(page) != null) / 判断传递页码是否有效currPage = Integer.parseInt(request.getParameter(page);/ 对当前页码赋值ClassinfoServiceImp service= new ClassinfoServiceImp();List Classinfos=service.fenyeListClassinfo(currPage);request.setAttribute(Classinfos, Classinfos);int pages ;int count = service.ClassinfofindCount();if(count % Classinfo.PAGE_SIZE=0)pages=count/Classinfo.PAGE_SIZE;elsepages=count/Classinfo.PAGE_SIZE+1;StringBuffer sb = new StringBuffer();if(currPage1)int c=currPage-1;sb.append( + 首页);sb.append();sb.append( + 上一页);sb.append();elsesb.append(首页);sb.append();sb.append(上一页);sb.append();for(int i=1;i=pages;i+)if(i=currPage)sb.append( + i + );elsesb.append( + i + );sb.append();if(currPagepages)int c=currPage+1;sb.append( + 下一页);sb.append();sb.append( + 尾页);sb.append();elsesb.append(下一页);sb.append();sb.append(尾页);sb.append();request.setAttribute(bar, sb.toString();request.getRequestDispatcher(/banjishezhi.jsp).forward(request, response);private void listall(HttpServletRequest request,HttpServletResponse response) ClassinfoServiceImp cs=new ClassinfoServiceImp();List Classinfos=cs.getAllClassinfo();request.setAttribute(Classinfos, Classinfos);try request.getRequestDispatcher(/banjishezhi.jsp).forward(request, response); catch (ServletException e) / TODO Auto-generated catch blocke.printStackTrace(); catch (IOException e) / TODO Auto-generated catch blocke.printStackTrace();private void delete(HttpServletRequest request, HttpServletResponse response) / TODO Auto-generated method stubString ID=request.getParam
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 环境工程建设项目进度控制方案
- 磁性材料生产线项目施工方案
- 2025年医院核心制度查对制度考试练习题及答案
- 2025年国际形势与中国对外政策考试卷及答案
- 格力新媒体营销方案模板
- 低空经济产业园建设工程施工方案
- 浙江运营营销咨询方案
- xx镇天然气管线及附属设施建设项目可行性研究报告
- 崇孝颐养中心营销方案
- 早餐店抢客流营销方案
- GH/T 1451-2024调配蜂蜜水
- 12S108-2 真空破坏器选用与安装
- 移动宽带注销委托书模板需要a4纸
- 合同续签的请示格式
- DZ∕T 0227-2010 地质岩心钻探规程(正式版)
- 闭合性颅脑损伤重型个案护理
- 紫金矿业员工工作手册
- 消费者市场与购买行为课件
- 民政信访业务培训课件
- 行政检查业务培训课件
- 个人独资企业章程样本
评论
0/150
提交评论