已阅读5页,还剩26页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
学 号:姓 名:学 院:计算机与信息工程班 级: 指导老师:目录一、设计技术及开发环境- 2 -1.1开发环境- 2 -1.2运行环境- 2 -1.3开发模式- 2 -1.4开发语言- 3 -二、 系统概要- 3 -2.1系统需求概述- 3 -2.2功能层次图- 4 -2.3 业务实体说明- 4 -三、系统构架设计- 5 -四、 数据库设计- 7 -五、 各功能模块的实现- 7 -5.1 系统运行环境配置- 8 -5.2 编写实用类- 9 -5.3 编写抽象基类- 11 -5.4 模型层的实现- 17 -5.5 业务层的实现- 21 -5.6 视图层的实现- 22 -六、运行效果截图- 28 -七、总结- 31 -一、设计技术及开发环境1.1开发环境Windows 2003、 MyEclipse 6.5 、SQL server 2005、Tomcat6.0。1.2运行环境服务器:Windows NT/2000/2003 Server(推荐)及以上版本。客户端:IE 6.0以上、FF等目前主流浏览器。1.3开发模式采用B/S模式1.4开发语言Java二、 系统概要2.1系统需求概述djune新闻发布系统可以提供基于互联网的新闻服务,会员可以互联网上查看各类新闻信息,也可发布系新闻供其他会员查看。普通会员只能发布和查看新闻,而新闻管理员除此之外还可以修改和添加会员或新闻管理员。普通用户需要在新闻发布系统中注册后方可成为djune新闻发布系统的会员,因此系统必须为所有用户提供会员注册和系统登录的功能。通过以上需求分析,可以总结出系统涉及的用户类型,主要包括以下两类: 普通会员 新闻管理员其中,需要为普通会员实现的功能主要有: 会员注册与系统登陆 新闻浏览 发布新闻发布 从系统中注销新闻管理员实现的功能主要有: 系统登陆与注销 新闻管理,包括修改、删除新闻信息 发布新闻 添加普通会员或者新闻管理员同时,通过需求分析,可以知道系统所涉及的各类业务实体,包括: 会员 新闻表 新闻类别表2.2功能层次图用户登录界面用户后台界面新闻管理会员注册新闻首页新闻发布新闻管理注册会员1-1新闻发布系统功能层次图2.3 业务实体说明新闻发布系统的业务实体主要包括会员(Sys_User)、新闻表(Inf_News)和新闻类别(Inf_NewsType),下面详细介绍一下这些业务实体: 会员(Sys _User):代表一个新闻会员实体,主要属性包括会员号自动编号ID、登录帐号、登录密码、姓名、性别、Email、是否新闻管理员(用于表示该会员是否新闻管理员)。 新闻表(Inf_News):代表一个新闻实体,主要属性包括新闻字段编号ID、新闻标题、新闻内容、发表时间、点击率、作者、新闻类别ID。 新闻类别(Inf_NewsType):代表一个新闻类别实体,主要属性包括新闻类别自动编号ID、新闻类别名称、排序ID。会员、新闻表和新闻类别实体之间的业务实体关系如图1-2所示:图 1-2 新闻发布系统业务实体关系图三、系统构架设计主要功能明确之后,开始对新闻发布系统进行必要的系统设计。整个系统采用多层的构架模式,从上到下依次为视图层、业务层、DAO层和数据库层。如图1-3所示:图 1-3 新闻发布系统的构架视图层负责向用户展现数据,在新闻发布系统中视图层主要有JSP页面构成。设计JSP页面的原则是尽量减少JSP页面中的JSP代码量,把具体的业务逻辑放在业务层实现,JSP页面只负责显示业务层实现的结果。对于一些公用的视图资源(如JSP页面中的图片、公用文字等),应当使用“”的形式包含,提高代码的可重用性。业务层负责具体业务逻辑的实现,在新闻发布系统中通过编写专门的业务类来实现。各业务类从同一个抽象业务基类继承,例如分别负责处理会员、新闻和新闻类别相关业务逻辑的业务类UserBiz、NewsBiz和NewsTypeBiz都继承自抽象业务基类BaseBiz.,如图1-4所示:BaseBizUserBizNewsBizNewsTypeBiz图1-4 业务类的继承关系所有业务类都从一个抽象的业务基类继承,这种做法使得业务类更加规范、可扩展性更强。例如BaseBiz中定义一些抽象的变量和方法,其子类必须实现这些变量和方法,BaseBiz类中已经实现的一些公用的方法,其子类会自动继承。模型层包含了系统中所涉及的业务实体、业务规则以及对数据库层的访问方法,模型层主要由各业务实体类和DAO类构成。在新闻发布系统中,业务实体主要包含会员、新闻和新闻类型,每个实体都有一个相应的实体类,这些实体类本质上是JavaBean,其中封装了实体的各项属性。实体类的作用是依据面向对象的原则描述一个业务实体,DAO模式的实现必须依赖这些实体对象。和业务类类似,各实体类也由同一个抽象实体基类BaseEntity继承而来,图1-5描述了这种继承关系:BaseEntityUserEntityNewsEntityNewsTypeEntity图 1-5 实体类的继承关系DAO类负责实现各实体类的业务规则以及对数据库的访问(例如实现在数据库中添加一个会员实体对象),因而也可以称之为“实体的DAO实现类”。DAO类也是由一个抽象的基类继承而来,所有的DAO类必须实现基类所定义的抽象方法,所有的DAO类都自动继承基类已经实现的方法,如图1-6所示: BaseDaoUserDaoNewsDaoNewsTypeDao图 1-6 DAO类的继承关系四、 数据库设计每个实体在数据库中都有对应的表,图1-7显示了新闻发布系统中的数据库表的关系模型。各表中的ID都设置为int自增长型字段,用作各表的主键。ID字段本身不具有任何业务上的含义,因此不会随着具体业务的变化而改变,适于作为主键。图 1-7 新闻发布系统数据库表的关系模型新闻发布系统采用的是MS SQLServer数据库,根据图1-6所示模型直接在SQL Server管理工具中创建各表。五、 各功能模块的实现系统构架设计和数据库设计完成之后,就可以开始立足实现系统各项功能模块。系统是依据多层构架模式实现的,为了更好的体现这一构架,尽量按层次进行实现。按顺序首先是实现数据库层,即在数据库中创建各物理表。其次是实现模型层,主要工作是编写各实体类和DAO类。模型层实现后是编写相应业务类,实现业务层。最后是编写视图层的JSP页面。但在这些工作开展之前,还需要先完成两项必要的任务,即: 系统运行环境的配置新闻发布系统采用Tomcat 6.5 作为Web服务器,因此需要对Tomcat进行正确的安装和配置,主要包括数据库连接池的配置、虚拟目录的创建等。 实用类的编写除了各业务类、DAO类和实体类外,还需要编写一些实用工具类,主要包括数据库工具类、日期处理类和字符串处理类。JSP页面、业务类、DAO类和实体类都需要访问这些工具类所包含的方法。5.1 系统运行环境配置图1-8新闻发布系统的目录结构:图 1-8新闻发布系统的目录结构其中各类JSP页面分别位于user、news、newstypes目录以及news根目录下,css目录、js目录和img目录放到content目录下面,包含的是系统需要的样式表和图片,WEB-INF目录的classes子目录中包含了各Java类文件,例如biz子目录中包含了各业务类,model子目录中包含了业务实体类和相应的DAO类。tools目录的base子目录中包含了一些抽象的基类,database和util子目录中包含了基本的实用类。5.2 编写实用类实用类位于tools目录的database和util子目录中,database子目录中包含了DataBaseTool.class文件,该Java类文件负责处理数据库相关的各类操作,其源文件(DataBaseTool.java)如下所示:DataBaseTool.javapackage tools.database;import java.sql.*;import javax.naming.Context;import javax.naming.InitialContext;import javax.sql.DataSource;public class DataBaseTool private static Connection con = null; /该类的构造函数,因为该类对外提供方法都是静态的,所以不需要实例化,/因此该构造方法为private private DataBaseTool() /通过数据库连接池获得数据库连接 public static Connection getConnection() throws SQLException try InitialContext context = new InitialContext(); DataSource ds = (DataSource) context.lookup(java:/comp/env/news); con = ds.getConnection(); catch (Exception e) throw new SQLException(从连接池中获取数据库连接发生异常 : + e.getMessage(); return con; /关闭数据库资源 public static void close(ResultSet rs, Statement st, Connection con) close(rs); close(st, con); /关闭数据库资源 public static void close(Statement st, Connection con) close(st); close(con); /关闭数据库连接,由于采用连接池方式,数据库连接不会被实际关闭 public static void close(Connection con) try if(con != null)con.close(); catch (Exception e) /关闭数据库资源 public static void close(ResultSet rs) try if(rs != null) rs.close(); catch (Exception e) /关闭数据库资源 public static void close(Statement st) try if (st != null) st.close(); catch (Exception e) BaseUtil.java/* *BaseUtil.java *该类用于对字符串等进行必要处理 */package tools.util;import java.sql.Date;public class BaseUtil /过滤日期 public static Date avoidNullDate(Date str) if (str = null) return Date.valueOf(1980-1-1); else return str; /判断字符是否为空 public static boolean isNull(String s) if (s = null) | (s.trim().length() = 0) | (s.equals(null) return true; else return false; /过滤字符串空值 public String avoidNullString(String s) if (s = null) | (s.trim().length() = 0) | (s.equals(null) return ; else return s; 5.3 编写抽象基类实用类编写完成后,开始实现新闻发布系统各层的基类文件,包括实体基类文件BaseEntity.java、DAO实现基类文件BaseDao.java和实体业务类文件BaseBiz.java。这些类文件需要调用实用类中的有关方法,详细的文件及其源代码如下所示:BaseEntity.java/* * BaseEntity.java * 该类是实体模型的基类,各实体模型类都从该类继承 * 该类及其子类本质上属于JavaBean,因而实现了Serializable接口 */package tools.base;import java.io.Serializable;import java.lang.reflect.AccessibleObject;import java.lang.reflect.Field;public abstract class BaseEntityimplements Serializable /该方法采用反射机制把对象各项属性打印出来,程序调试时非常有用 public String toString() StringBuffer buffer = new StringBuffer(); Class c = getClass(); buffer.append(c.getName(); buffer.append(); Field fields = c.getDeclaredFields(); try AccessibleObject.setAccessible(fields, true); for (int i = 0; i 0) users = new UserEntityresult.size(); result.toArray(users); return users; /更新一条会员记录 public void update(Connection con, UserEntity user) throws SQLException PreparedStatement ps = null; StringBuffer buffer = new StringBuffer(); try /构造更新sql语句 buffer.append(UPDATE Sys_User SET ); buffer.append(Account = ? ,); buffer.append(Password = ? ,); buffer.append(Name = ? ,); buffer.append(Sex = ? ,); buffer.append(Email = ? ,); buffer.append(IsAdmin = ? ,); buffer.append( WHERE ID = ?); ps = con.prepareStatement(buffer.toString(); /设置参数 int index = 1; ps.setString(index+, user.getAccount(); ps.setString(index+, user.getPassword(); ps.setString(index+, user.getName(); ps.setString(index+, user.getSex(); ps.setString(index+, user.getEmail(); ps.setBoolean(index+, user.getIsAdmin(); ps.setInt(index+, user.getID(); /执行 ps.executeUpdate(); catch (Exception e) throw new SQLException(更新表(Sys_User)时发生异常 : + e.getMessage(); finally DataBaseTool.close(ps); 5.5 业务层的实现业务层实现了对各类业务的处理,业务层处理的对象是各业务实体,而不是数据库中的各字段,需要涉及到数据库的操作,一律在DAO实现类中完成。业务层只是对DAO类中相应方法的进一步封装,代码如下:UserBiz.java/* *UserBiz.java *会员相关的业务类,该类继承自业务基类BaseBiz */package ;import tools.base.*;import user.model.*;import tools.database.*;import java.sql.Connection;public class UserBiz extends BaseBizUserDao newUserDao = new UserDao();/创建UserDao对象/构造函数public UserBiz()this.baseDao = newUserDao;/覆盖基类定义的抽象变量baseDao/注册一个新会员public void saveUser(UserEntity user) throws Exception Connection con = DataBaseTool.getConnection();try/调用DAO层的insert方法newUserDao.insert(con , user);catch(Exception e)throw e;finallyDataBaseTool.close(con);/修改会员信息public void updateUser(UserEntity user) throws Exception Connection con = DataBaseTool.getConnection();try/调用DAO层的update方法newUserDao.update(con , user);catch(Exception e)throw e;finallyDataBaseTool.close(con);5.6 视图层的实现1会员注册与系统登陆根目录下的login.jsp实现了会员注册与系统登陆功能。其源代码如下所示:login.jsp%/action用来判断表单是否被提交String action=request.getParameter(“action”);/如果表单被提交if(action != null)if(action.equals(“submit”)/获取会员帐号String account = request.getParameter(“Account”);/获取会员密码String password = request.getParameter(“Password”);String txtYZM = request.getParameter(“txtYZM”);String checkCode = request.getParameter(“checkCode”);if(account.length()=0)out.print(“alert(请输入登录帐号!);history.go(-1);”);return;if(password.length()=0)out.print(“alert(请输入登录密码!);history.go(-1);”);return;if(txtYZM.length()=0)out.print(“alert(请输入验证吗!);history.go(-1);”);return;if(txtYZM.toLowerCase().compareTo(checkCode.toLowerCase()!=0)out.print(“alert(你输入的验证码不正确!);history.go(-1);”);retur
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年药械不良反应事件培训试题及答案
- 乌海市法院系统招聘考试真题及答案2025年
- 2025年药品经营质量管理规范考试试题及答案
- 2025年医疗器械质量管理体系内审员培训考试在线题库含答案
- 坏账核销专员工作流程规范
- 摄影师年度作品规划与客户开发方案
- 综掘机检修合同范本
- 电器样机销售协议书
- 白糖进出口合同范本
- 电子设施租赁协议书
- 肝性脑病内科护理要点
- 体育安全教育题库及答案
- 废旧塑料再生利用项目市场调研报告
- 佳木斯大学教师招聘考试历年真题
- 门窗工程监理实施细则
- 第六单元 管弦和鸣 -梦幻曲 课件 2023-2024学年人教版初中音乐七年级上册
- 《广东省数据资产合规登记规则(试行)》(征求意见稿)
- GB/T 17911-2018耐火纤维制品试验方法
- 了不起的狐狸爸爸-全文打印
- 拼多多商家协议
- 内蒙古铅锌矿分布
评论
0/150
提交评论