版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上信息工程学院博客系统的设计与实现组 长:郭亚京组 员:白园园 梅蕊 楚静静付志强 史金磊指导老师:陆廷荣完成时期:2011年12月26日目 录1 绪论1.1 项目开发的背景 Blog博客网站致力于为广大博客提供优质博客页面服务的商业网站。每个博客都希望借助自己的博客页面宣传自己,而博客数量越多,网站的点击率越高就越能够吸引广大的企业客户选择该商业网站作为媒介,将自己的产品展现给客户。可以说,对这些博客网站而言:为博客提供良好的服务就意味着为网站带来更多的商业客户。因此,在具体设计实现该博客网站时,主要考虑了主流博客网站的几个主要功能。1. 博客的注册、登录验证功能2.
2、 普通用户浏览文章和发表评论的管理3. 文章详细内容及相关评论显示4. 博客个人文章管理维护功能5. 博客个人文章分类管理维护功能6. 博客个人友情链接维护功能7. 博客个人基本信息管理维护功能8. 个人上传图片和相册管理的功能9. 管理员对博主的管理10.管理员对个人信息的管理11. 管理员对网站在线人数的统计1.2 研究的目的和意义 博客(Blog)作为Web 2.0的典型代表,已风靡网络世界。那么,博客究竟是什么?简单一点的Blog记载了日常发生的事情和自己的兴趣爱好,把自己的思想和知识与他人分享、交流,同时又通过个人博客结识更多志同道合的朋友,使大家在网上可以进行各种信息的交流,博客系
3、统为大家提供了学习交流、工作交流、情感交流的平台,使人们的工作更加简单快捷,使人们的生活更加丰富多彩。1.3 研究的内容 按照规范设计的方法,考虑数据库及其应用系统开发全过程,将研究内容分为以下几个方面:(1)需求分析(2)概念结构设计(3)逻辑结构设计(4)物理结构设计(5)数据库实施(6)数据库的运行与维护1.4 目前博客的国内研究现状 2005年9月8日新浪开始为亿万网民提供博客产品Blog Beta 2.0服务,由此中国博客门户网站拉开帷幕。9月26日,新浪网发起了“中国首届博客大赛”。 与此同时,另一门户网站搜狐也宣布推出酝酿已久的博客服务,并随即启动了它自己的“首届全球中文博客大奖
4、赛”。由此中国博客行业得以迅猛发展,从2008年8月中国博客网站Alexa平均排名走势图可以看出,中国博客网站逐渐发展壮大,并日益被世界所关注。由此可见,博客的发展是乐观的。2 数据库设计的关键理论和实现方法2.1 数据库设计的理论 数据库设计是指对于一个给定的应用环境,构造(设计)优化的数据库逻辑模式和物理结构,并据此建立数据库及其应用系统,使之能够有效地存储和管理数据,满足各种用户的应用需求。 数据库设计的目标是为用户和各种应用系统提供一个信息基础设施和高效率的运行环境。高效率的运行环境有:数据库数据的存取效率、数据库存储空间的利用率、数据库系统运行管理的效率等都是高的。 数据库设计的特点
5、:(1)三分技术、七分管理、十二分基础设计 (2)结构设计和行为涉及相结合2.2 数据库设计的方法 数据库设计的方法有三种: (1)新奥尔良方法 (2)基于ER模型的数据库设计方法 (3)第三范式的设计方法3 需求分析3.1 数据需求 (1)数据表的设计 1. 用户信息表表1 UserInfo表字段名数据类型字段含义是否为空注释usernamevarchar(20)用户名否主键passwordvarchar(20)用户密码否sexvarchar(8)性别否emailvarchar(20)邮箱否favoritevarchar(50)爱好是imagevarchar(50)头像是blogatitle
6、varchar(50)博客标题是bulletinvarchar(100)公告是 2. 文章信息表表2article表字段名数据类型字段含义是否为空注释aidint(4)文章编号否主键atitlevarchar(80)文章标题否cidint(4)类别编号否外键adatevarchar(20)发表日期否zhaiyaovarchar(300)文章摘要是acontentntext(16)文章内容否usernamevarchar(20)用户名否外键viewcountbigint(8)浏览次数否3. 分类信息表表3category表字段名数据类型字段含义是否为空注释cidint(4)类别编号否主键cnam
7、evarchar(20)类别名称否usernamevarchar(20)用户名否外键4. 评论信息表表4comment表字段名数据类型字段含义是否为空注释idint(4)评论编号否主键authorvarchar(20)评论人名字否主键ccontentvarchar(50)评论内容否createdatevarchar(50)评论日期否aidint(4)文章编号否外键backcontentvarchar(50)回复内容是backdatevarcgar(50)回复日期是5. 管理员信息表表5admin表字段名数据类型字段含义是否为空注释idint(4)管理员编号否主键adminnamevarchar
8、(20)管理员名称否adminpasswordvarchar(20)管理员密码否blogbulletinvarchar(80)网站公告是6. 特殊文章信息表表6 spArticle表字段名数据类型字段含义是否为空注释spIDvarchar(20)特殊文章编号否主键spcnamevarchar(20)特殊分类名称否aidint(4)文章ID否外键titlevarchar(20)文章标题否7. 相片信息表表7 Photo表字段名数据类型字段含义是否为空注释idint(4)相片编号否主键photonamevarchar(20)相片名称是主键usernamevarchar(8)用户姓名否(2)博客系统
9、数据项的描述1. 博主描述数据项名:博主描述:博客的注册用户,对博客具有最高管理权限别名:无定义:用户id+用户名+密码+性别+邮箱+头像+权限数据量:1峰值:无其他说明:凡是普通用户已完成注册的,都是博主2. 普通用户描述数据项名:普通用户描述:博客的非注册用户,对博内容有一定浏览、评论权限别名:无定义:用户id+用户名+密码+性别+邮箱+头像+权限数据量:10000峰值:随时其他说明:普通用户不具发表博文、上传照片等权利3. 博客管理员描述数据项名:博客管理员描述:实现对注册博主的管理和特殊文章的管理别名:无定义:用户名+密码数据量:1峰值:无其他说明:博客管理员,其账号是系统初始化的时候
10、创建的4. 博文描述数据项名:博文描述:发表在博客中的博文别名:无定义:id+标题+摘要+内容+浏览数+回复数+发表时间数据量:10000峰值:随时其他说明:每篇博文不能超过1000个字符5. 评论描述数据项名:评论描述:博主或者普通用户对博文的评论别名:无定义:评论id+发表评论用户id+评论对象id+评论内容+评论时间数据量:10000峰值:随时其他说明:无6. 文章类别描述数据项名:文章类别描述:发表不同的博文可以属于不同的类别别名:无定义:类别id+发表评论用户id+类别名称 数据量:10000峰值:随时其他说明:无3.2 完整性需求 由于系统的数据是共享的,要解决数据一致性问题,要有
11、一定的人员维护数据,在数据录入处控制数据的去向,并且要求对数据库的数据完整性进行严格的约束。对于输入的数据,要为其定义完整性规则,如果不能符合完整性约束,系统应该拒绝该数据。3.3 功能需求 本系统分为前台设计和后台设计,其中前台设计针对的用户身份是普通用户和博主,后台设计针对的用户身份是管理员。(1)前台设计前台设计主要实现的功能有:对普通用户来说,主要有注册、登录、浏览文章和发表评论;对博主来说,主要有管理博文、管理评论、管理分类、相册管理、用户管理等功能。前台功能模块图如图所示。博客前台普通用户博主登录注册浏览文章发表评论管理文章管理分类管理相册管理个人信息发表文章修改文章删除文章增加分
12、类修改分类删除分类上传照片浏览照片更新公告修改基本信息(2) 后台设计后台设计实现的功能主要功能有:对博主的管理,网站公告的管理,和在线人数的统计。后台功能模块图如图所示。博客后台管理员用户管理更新公告在线人数统计删除博主冻结博主3.4 性能需求(1)精度 在精度需求上,根据使用需要,控制各项输入、输出数据的长度。确保保证用户正常使用的同时节省系统空间。(2)时间特性要求 用html语言写博客首页,做到响应时间在3秒内。对附件上传做好文件大小限制,保证满足一般需求并且传输通畅,同时节约空间。(3)灵活性要求系统可以在各种主流浏览器上正常运行,对不同分辨率的显示器具有良好适应性。针对用户的新需求
13、可以做到系统灵活修改。3.5 接口需求 用户接口:本系统采用图形用户接口,以鼠标和键盘为用户接口,方便用户对博客系统的有效操作。更好地在博客里进行交流。内部接口:内部是页面和数据库连接,对应的页面输入框和显示框的内容在数据库得到显示。3.6 出错处理需求 列出可能的软件、硬件故障以及对各项性能而言所产生的后果和对故障处理的要求。(1)软件故障:系统异常,IIS不稳定,此系微软公司提供的产品,无法对其进行改进。(2)硬件故障:网络不应负载超荷:大部分时间内应保证在线用户数量小于设定极限数量,通过编码或服务器功能实现。(3)在系统中,数据的录入往往是大量的,因此系统要有一定的处理能力,以保证迅速的
14、处理数据。(4)数据的一致性与完整性 由于系统的数据是共享的,要解决数据一致性问题,要有一定的人员维护数据,在数据录入处控制数据的去向,并且要求对数据库的数据完整性进行严格的约束。对于输入的数据,要为其定义完整性规则,如果不能符合完整性约束,系统应该拒绝该数据。(5)数据的共享与独立性 整个博客系统的数据是共享的。然而,从系统开发的角度上看,共享会给设计和调试带来困难。因此,应该提供灵活的配置,使各个分系统能够独立运行,而通过人工干预的手段进行系统数据的交换。这样,也能提供系统的强壮性。4 概念结构设计4.1 博客系统局部ER图 根据以上各节对系统的需求分析和功能模块的分析,规划出本系统使用的
15、数据库的关键实体是用户实体、文章实体、评论实体、分类实体。下面将一一列出各个关键实体的E-R图。 (1)用户实体 在博客系统中,用户实体是管理员和普通用户。用户实体主要包括用户名字、用户密码、邮箱等属性。用户实体的E-R图如11所示。管理员主要包括管理员名、管理员密码、管理员ID等属性。管理员实体的E-R图如图12所示。用户性别姓名密码邮箱ID管理员ID密码名字公告(2)文章实体 在博客系统中,用户文章实体是指博主发表的文章中所包含的属性。文章实体主要包括文章的ID、文章标题、类别ID、发布日期、摘要、内容、作者、浏览次数。文章实体的E-R图如所示。文章文章ID文章标题类别ID内容作者浏览次数
16、发布日期摘要(3)评论实体 在博客系统中,评论实体是指系统中的普通用户者和已经注册过的博主对博主发表过的文章进行评论。评论实体主要包括评论ID、评论人的名字、评论内容、评论时间、文章ID。评论实体的E-R图如所示。评论评论ID评论人名字文章ID评论内容评论时间(4)类别实体 在博客系统中,类别实体是对文章的分类。类别实体主要包括类别ID、类别名字、博主名字。类别实体的E-R图如所示。类别类别ID博主名字类别名字4.2 博客系统整体ER图 系统总体E-R图说明了实体与实体之间的关系,实体用矩形表示,属性用椭圆表示,联系用菱形表示,如图所示。管理员用户评论文章类别相册管理1n发表1n属于n发表1n
17、创建1n1添加1n5 逻辑结构设计5.1 关系模式 根据概念结构设计的E-R图,将ER图转换为关系模式,一个实体型转换成一个关系模式。实体的属性就是关系的属性,实体的码就是关系的码。根据转换原则,用横线将关系的码标出,如下: (1)用户(ID,用户名,密码,性别,邮箱,爱好,头像,博客主题,公告) (2)博文(文章编号,文章标题,类别编号,发表日期,文章摘要,文章内容,用户名,浏览次数) (3)分类(类别编号,类别名称,用户名) (4)评论(评论编号,评论人名字,评论内容,评论日期,文章编号,回复内容,回复日期) (5)管理员(管理员编号,管理员名称,密码,网站公告) (6)特殊文章分类(特殊
18、文章编号,特殊分类名称,文章ID,文章标题) (7)相片(相片ID,相片名称,发送相片的人的名称)5.2 外模式 外模式对应于视图: 5.3 完整性约束 为保证实体完整性,也就是第2范式,表中主键或唯一键是一定要有的,否则就可能出现重复纪录。当然外键也是不可缺少的。通常矛盾在于:参照完整性及实现参照完整性的性能问题。(1)用外键实现参照完整性,保证数据的一致性;(2)海量数据的情况下,参照完整性检查的成本很大;6 物理结构设计6.1 访问方法选择 访问方法有三种: (1)索引存取方法 (2)聚簇存取方法 (3)HASH存取方法6.2 存储结构选择 确定数据的存放位置和存储结构要综合考虑存取时间
19、、存储空间利用率和维护代价三个方面的因素。这3个方面常常识相互矛盾的,因此需要权衡。 本系统中数据库是存放在F盘的数据库文件夹下,系统的源代码是存放在E盘的工程目录下。6.3 物理结构评价 (1)时间效率:可以实现。 (2)空间效率:可以实现。 (3)维护代价:可以实现。7 安全性设计7.1 身份验证模式 使用用户名来标明身份,并输入用户密码。数据库内部记录着所有合法用户的用户名,以登陆页面为入口,鉴别此用户是否为合法用户,并核实用户密码的匹配,若是,则可以进入到下一步的操作。7.2 权限管理 SQL Server提供了非常灵活的授权机制,拥有对数据库中所有对象的所有权限,并可以根据不同的权限
20、角色授予不同的用户。 用户权限:没有用户名的用户可以通过注册获得。用户登陆后,能进行文章的查看和发表评论的功能。 管理权限:管理者可以进行对文章和普通用户的管理。8 博客系统的实现与测试8.1 博客系统的实现与测试1. 管理员对用户管理的界面2. 普通用户的主界面3.博主的主界面4. 发表文章的界面5. 分类的管理界面6. 相册管理的主界面9 结论至此,博客项目系统的设计与开发已经顺利完成。在几天的试运行的过程中,在连接数据库时一度出现过错误,经过调试改正后错误点全部清除,此系统可以按着设计思想和需求功能正常运行。通过开发博客项目系统,不仅掌握了对数据库需求分析有了了解,而且懂得了对概念结构和
21、逻辑结构的设计,而且熟练掌握了集成开发环境MYEclipse 8.5的使用,还学会了Tomcat 5.0服务器、SQLServer数据库及相关组件的应用,培养和锻炼了独立从事开发项目系统的能力,而且通过对博客项目系统管理的操作,加深了对管理信息系统的原理、技术、方法、工具、步骤和有关理论知识的理解和认识,为今后在工作岗位上更好的利用jsp技术开发网站打下了良好的基础。但是还有更多更复杂的功能要求。该博客系统在界面美化、权限控制、程序优化及自定义扩展功能方面还需进一步完善。由于开发周期短等局限性,不能将本套系统尽善尽美。希望在以后能够博客做更深一步的调研,在原有系统的基础上不断添加新功能参考文献
22、1. 徐进明、但正刚,JSP网站开发技术,清华大学出版社,2007年6月2. 贾素玲、王强,JSP应用开发技术,清华大学出版社,2009年4月 3. 李宁,Java Web 开发技术大全,清华大学出版社,2010年8月4. 吕凤顺,SQLServer数据库基础与实训教程,清华大学出版社,2009年4月5. 江文,软件建模技术,北京邮电大学出版社,2009年8月6. 邓振杰、何丽娟,网页制作技术,人民邮电出版社,2009年8月7. 张伟,Java SE 实践教程,电子工业出版社,2008年4月8. 张伟,Java 语言程序设计,电子工业出版社,2008年4月附录1. 连接数据库的代码实现DBUt
23、il类:private static Connection conn = null; /能够返回数据库的连接public static Connection getConnection()try Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");/获取数据库的JDBC驱动conn=DriverManager.getConnection("jdbc:microsoft:sqlserver:/loca lhost:1433;DatabaseName=BlogDB","sa&q
24、uot;,""); catch (ClassNotFoundException e) e.printStackTrace(); catch (SQLException e) e.printStackTrace(); return conn;/关闭连接的静态方法public static void close(Connection con)try if(con!=null)con.close(); catch (SQLException e) e.printStackTrace();2. JavaBean的代码实现由于本系统中涉及的JavaBean比较多,所以只以Catego
25、ry为例,说明JavaBean的代码实现。package cn.kfu.entity;public class Category private String username; /博主的名字private int cid;/类别的IDprivate String cname;/类别的名称public int getCid() return cid;public void setCid(int cid) this.cid = cid;public String getCname() return cname;public void setCname(String cname) ame = cn
26、ame;public String getUsername() return username;public void setUsername(String username) this.username = username; 3. Dao层的实现Dao层是用于前台页面与后台数据库的交流,主要是用于查询数据用的,通常的方法有增,删,改,查。由于代码比较多,所以在此也以Category为例,说明Dao层的实现。由于篇幅的限制,只写了部分代码。public class CategoryDao private Connection conn;private ResultSet rs;private
27、 PreparedStatement pstm;public List<Category> findAll()List<Category> l=new LinkedList<Category>();conn=DBUtil.getConnection();String sql="select * from category"try pstm=conn.prepareStatement(sql);rs=pstm.executeQuery();while(rs.next()Category c=new Category();c.setCid(r
28、s.getInt("cid");c.setCname(rs.getString("cname");c.setUsername(rs.getString("username");l.add(c); catch (SQLException e) e.printStackTrace();return l;4 实现管理员对用户冻结的代码public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOEx
29、ception response.setContentType("text/html;charset=gb2312");PrintWriter out = response.getWriter();request.setCharacterEncoding("gb2312");response.setCharacterEncoding("gb2312");String type=request.getParameter("type");String username=request.getParameter(&quo
30、t;username");UserDao ud=new UserDao();DongJieDao djd=new DongJieDao();if("delete".equals(type)if(ud.delete(username)response.sendRedirect("/Blog/Admin/ManageUser.jsp");elseout.print("<html><body background='/Blog/images/beijing.jpg'></html>&quo
31、t;);out.println("<script >alert('删除用户败!')</script>"); else if("dongjie".equals(type)if(djd.insert(username)response.sendRedirect("/Blog/Admin/ManageUser.jsp");elseout.print("<html><body background='/Blog/images/beijing.jpg'>&
32、lt;/html>");out.println("<script >alert('冻结用户败!')</script>"); else if(djd.delete(username)response.sendRedirect("/Blog/Admin/ManageUser.jsp");elseout.flush();out.close();5管理员实现在线用户统计的代码public class SessionListener implements HttpSessionBindingListenerp
33、ublic static int number=0;public void valueBound(HttpSessionBindingEvent arg0) number=number+1; public void valueUnbound(HttpSessionBindingEvent arg0) number=number-1; 6. 发表文章的代码: <form action="servlet/Article_EditorServlet" name="EditArticle" method="POST"> <t
34、able align="center"width="70%"> <tr><td>标题:</td> <td><input name="atitle" type="text"></td></tr> <tr> <td>类别:</td> <td> <select name="leibie"> <option value="0"&g
35、t;请选择类别</option> <% String username=(String)session.getAttribute("username"); Category c=new Category(); CategoryDao cdao=new CategoryDao(); List<Category> li=cdao.findAllByUsername(username); Iterator<Category> iterator=li.iterator(); while(iterator.hasNext() c=iterat
36、or.next(); %> <option value=<%=c.getCid() %>> <%=c.getCname() %></option> <% %> </select> </td> </tr> <tr><td>摘要:</td> <td><textarea name="zhaiyao" rows="5" cols="60"></textarea></
37、td></tr> <tr> <td>内容:</td> <td> <textarea name="acontent" id="acontent" style="width:100%; height:400px;"></textarea><script type="text/javascript">var oFCKeditor = new FCKeditor( 'acontent' ) ;oFCKedi
38、tor.BasePath = 'FCKeditor/' ;oFCKeditor.ToolbarSet = 'Default' ;oFCKeditor.Width = '100%' ;oFCKeditor.Height = '400' ;oFCKeditor.Value = '' ;oFCKeditor.ReplaceTextarea(); </script> </td> <td><input type="hidden" name="viewco
39、unt" value="0"></td> </tr> <tr><td><input type="submit" name="submit" value="发表"></td> <td><a href="/Blog/Article/ManageArticle.jsp">返回列表</a></td></tr> </table></form&
40、gt;7. 管理分类的静态页面代码: <body background="/Blog/images/bgb.jpg"> <table width="600" border="0" align="center"> <tr> <td align="right"><font size="4" color="blue"><a href="/Blog/Category/AddCategory
41、.jsp">增加分类</a></font> </tr> </table> <hr align="right" color="#49A0F8" /> <table width="600" align="center" border="1"> <tr align="center"> <td>序号</td> <td>分类ID</td>
42、<td>分类名称</td> <td>修改和删除</td> </tr> <% int i=0; CategoryDao cdao=new CategoryDao(); String username=(String)session.getAttribute("username"); List<Category> li=cdao.findAllByUsername(username); Iterator<Category> iterator=li.iterator(); while(ite
43、rator.hasNext() i=i+1; Category c=iterator.next(); %> <tr align="center"> <td><%=i %></td> <td><%=c.getCid() %></td> <td><%=c.getCname() %></td> <td ><a href="/Blog/Category/AlterCategory.jsp?cid=<%=c.getCid()
44、%>&cname=<%=c.getCname() %>">修改</a> <a href="servlet/Category_DeleteServlet?cid=<%=c.getCid() %>" onclick="return confirm('你确定要删除吗?')">删除</a></td> </tr> <% %> </table> </body>8. 上传相片的Servlet代码:request.setCharacterEncoding("gb2312");response.setCharacterEncoding("gb2312");PrintWriter out = response.getWriter();SmartUpload SmartUpload = new SmartUpload();SmartUpload.initialize(getServletConfig() , request,respon
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 585-2026船用法兰铸钢截止止回阀
- T/ZMDS 30004-2023口腔正畸活动矫治器
- T/JQR 13-2023高等教育 互动智慧教室 使用管理规范
- T/CNCA 156-2025煤矿用掘锚一体机再制造技术规范
- T/CAWAORG 058-2026基于长寿医学的老年健康服务规范
- T/CSPIA 002-2020手机音视频紧急求助与报警系统技术要求
- GB/T 223.3-2026钢铁及合金磷含量的测定分光光度法、滴定法和重量法
- 2025~2026学年广东省深圳市龙岗区北师大版六年级上册12月阶段性试卷【附答案】
- AI赋能电子元器件生产全流程质量管控
- 钻杆热处理调质操作工规程
- 河南华师联盟2027届高三上学期10月质量检测语文+答案
- 2026年高级会计师考试题+参考答案
- 湖南省自然科学基金学科分类目录及代码(新申报版)
- 2026年人教版新教材数学五年级上册第二单元《小数乘法》检测题(含答案)
- 2026年秋季四年级数学人教版第二单元单元检测卷(含答案)
- 《对比之魅》教学课件-2026-2027学年人美版(新教材)小学美术四年级上册
- 我国食品安全存在的问题及对策
- 2026语文新教材 六年级上册第3课 古诗词三首 教学课件
- 2026年上海农林职业技术学院高职单招笔试职业适应性测验试题库含答案解析3套试卷
- 2026年动物防疫专员试题(附答案)
- 河南农商行审计考试试题及答案
评论
0/150
提交评论