版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1个人博客系统的设计与实现年级专业:学号:姓名:计算机科学与技术学院摘要:随着手机、平板等手持终端访问设备的普及,越来越多的用户希望通过网络平台进行互动交流,同时展现自己的个性,传播自己的思想,而通过个人博客发布信息是一个使用频率较高的方式。本课题建立一个交互简捷的博客系统,方便在校学生发布信息进行交流,可以将个人生活经验或学习笔记心得等发布到系统中,方便其他同学的查看讨论。这能极大地促进同学间思想交流和互动,扩大了同学的交际圈,并且在扩大获取信息的渠道的同时,还能提高学习兴趣,增加生活情趣。系统使用Java+JSP+Tomcat+MySQL技术实现。关键词:个人博客,Blog,Web应用,J
2、SP,MySQL随着手机、平板等手持终端访问设备的普及,普适计算越来越渗入人们的生活。跟随发展的就是个性化服务,如网络发布、签名、预约等都被极大地赋予了个人特色,越来越多的用户希望通过网络平台进行互动交流,同时展现自己的个性,传播自己的思想。著名的网站包括Facebook等。很多人对发生在自己身边的事以及对生活的一些感悟愿意用文字或图片的方式记录下来发到网络上与他人分享交流,其中通过个人博客发布是一个使用频率较高的方式。本课题拟建立一个交互简捷的博客系统,方便在校学生发布信息进行交流,可以将个人生活经验或学习笔记心得等发布到系统中,方便其他同学的查看讨论交流。1系统设计指导思想由于系统需要具有
3、普适的特性,因此建立以Web服务为中心的系统是最优的架构。使用传统的B/S架构能接纳多种终端设备的访问,如使用笔记本电脑、台式计算机、手机、平板电脑等设备。结合实际的需要,技术实现上将以普通Web结合Wap的方式实现系统功能的访问,并且这两种技术架构相近,可以统一到Web服务器中一起管理。2系统需求论述根据前面的分析与定位,本博客系统主要用于校内同学的使用,因此需求的重点也反映在同学平时生活中的明显的和一些潜在的期望。就主要功能来说,核心在于创建自己的博客空间,在博客空间中方便的发表博文,支持他人在线评论互动,同时能方便地查阅他人的博文并添加评论。同时由于潜在的需求期望增加获取信息的渠道,系统
4、中增加创建兴趣小组的功能,将小组的最新消息自动发布到组员,并提供小组讨论的页面空间。另外系统提供站内信功能,帮助简化互发消息的管理,这样系统能自主控制所有消息,并能保留消息的历史信息,方便消息维护。系统的功能性需求如下图。查看博文创建小组小组交流评论主题浏览搜索-评论博文搜索小组vvextend空间信息维护模块管理关键字管理分类管理其中各功能性需求简要说明如下:简单的系统登入登出及注册功能在这里不再详述。其他重要的功能主要集中在博客访问和博主访问这两个角色上,其中博主角色具有博客角色具备的所有的系统功能。博客可以进入系统浏览查看某博主的博文并回复,或根据关键字搜索得到相关的博文信息,另外可以进
5、入小组空间查看小组的最新信息,同样可以利用搜索功能查询小组中的相关信息。如果没有找到相关主题的小组信息,则可以创建新的小组并接纳成员访问。在小组中可以浏览发帖信息并回帖参与交流。博主角色能操作的功能主要集中于自己的博客空间方面,主要包括:发布博文管理,空间信息管理,回复管理,空间模块管理,外观方案管理,设置头条或置顶管理,分类管理,关键字管理,好友管理,常用链接管理,背景音乐管理。这几个模块的访问一般是博客主人身份才能操作。对于系统管理员角色的操作,主要侧重于系统的运营与维护方面的功能。主要包括系统级别的用户管理、系统级别的博客与小组信息维护、系统属性设置、系统状态检查与监测、系统数据的导出与
6、导入、系统的启动与关闭,具体如下面的用例图所示。系统状态检查与监测系统后台数据维护3系统分析与设计基于系统的需求,这个章节主要陈述分析得出系统的分析模型和设计模型,从逻辑上理解系统的实现方式和操作方式。下面叙述中没有严格按分析和设计划分小节,而是大体按照几个主题进行了陈述,将分析结果与设计结果大体连贯起来,后续的章节将介绍具体的实现。3.1系统的总体分析本系统使用常见的三层架构,即界面表示层、业务逻辑层、数据持久层。其中表示层的职责主要集中于处理Web页面的数据显示、接收用户输入和各类操作,属于整个系统的最前端,但其中没有系统的操作逻辑,仅仅包含简单的页面交互方面的处理逻辑,一般使用JS脚本来
7、生成浏览器端的交互逻辑,并使用脚本将输入数据或操作结果反馈到后台业务逻辑层。3.2分析类的获取确定了主要的系统用例,接下来需要得出分析类模型,用于评估整个系统,也起到了承接分析与启下设计的作用。归纳一下系统的功能,并综合操作特性,得到如下几个综合的操作界面类型(这里统一以UI为后缀,表示用户界面):主页面(MainUI):是系统的首页面,主要呈现登录模块、搜索模块、所有博客空间最新更新情况统计、所有小组更新情况统计、推荐的博客与小组的内容展示、讨论热烈的话题汇总、博客和小组排行榜、广告模块等信息。个人主页面(UserMainUI):用于用于个人有关的信息设置与管理,包括个人博客汇总信息(一个用
8、户可以有多个博客空间)、创建小组管理、参与小组的最新情况、书签管理(用于记录一些常用链接)、个人信息管理模块、搜索模块、登录模块。博客页面(BlogUI):即个人博客空间,包括个人信息模块、搜索模块、登录模块、标题模块、书签模块、访客模块、发帖信息模块、近况模块、推荐小组模块、推荐博客模块、通告模块、广告模块(系统内用户发布、非商业广告)。博客管理主页面(BlogMgmtUI):用于对当前博客空间进行设置,包括标题设置、界面设置、模块设置、访问性设置、发帖设置、回复设置、访客信息管理模块。小组主页面(GroupUI):主要呈现某小组的信息,包括标题、简介、空间发帖、成员、搜索模块、登录模块、提
9、示栏个人信息显示模块、近况模块、推荐小组模块、推荐博客模块、通告模块、广告模块(系统内用户发布、非商业广告)。小组管理主页面(GroupMgmtUI):用于小组内的信息管理。包括标题设置、界面设置、成员及访问性设置、发帖设置、回复设置。搜索页面(SearchUI):主要用于站内的信息搜索,包括用户、博客空间、小组、主题、关键字、一般包含信息的搜索及其结果。系统管理页面(AdminUI):汇总了系统的管理功能,包括系统开关机模块、系统属性设置模块、系统数据管理模块、系统用户管理模块、状态显示模块、统计信息模块。控制类的作用集中体现了系统的业务逻辑,因此最终的控制类大部分都映射到了业务逻辑层,根据
10、用例模型中的系统功能性描述,经过统筹安排,得出系统中的控制类如下:登录控制类(LoginWorkflow):专门负责登录的控制逻辑。登出控制类(LogoutWorkflow):针对登出系统专门进行处理。虽然网页型访问一般设有30分钟会话有效期,但这里还是单独进行处理,保证数据的一致性。注册控制类(RegisterWorkflow):专门处理新用户注册的问题。查找功能在各个对象上都有体现,最终界面将分类显示,因此查找功能这样组织:综合查找控制类(FindWorkflow):用于统一各类查询及汇总各查询结果。小组查询(FindGroupWorkflow):针对小组进行筛选查询的控制类。用户查询(F
11、indUserWorkflow):用于对用户进行各类信息进行筛选查询。博客空间查询(FindBlogWorkflow):基于输入值查询满足条件的博客空间。发帖查询(FindItemWorkflow):针对发帖回帖进行筛查,可以对博客空间和小组内的发帖同时筛选。针对发帖管理的控制类组织为发帖、显示、回复三个控制类。创建新帖控制类(CreateItemWorkflow):博客空间和小组空间里面使用相同的控制逻辑,因此统一为CreateItemWorkflow控制类,不同的就是发往的空间不同而已。显示发帖控制类(ListItemWorkflow):针对显示自定义的要求较多,因此单独设计显示控制逻辑,
12、在博客空间和小组空间中使用相同的控制类,最终显示在界面类中加工生成不同的页面风格。回帖控制类(ReplyItemWorkflow):用于管理回帖的过程控制,与创建新帖很相近,但地位不同。另外几个控制类集中于管理功能,包括:发帖条目的管理控制类(ItemMgmtWorkflow):对空间中所有的发帖进行管理的控制类,体现在对条目的增删改查,对回复的管理,附加信息以及状态的管理。博客管理控制类(BlogMgmtWorkflow):对博客空间的信息进行配置,对各模块进行配置与显示,以及置顶发帖、管理链接关键字、背景音乐处理等。小组管理控制类(GroupMgmtWorkflow):针对小组的各管理功能
13、,包括设置小组状态、批复加入请求、任命管理者、发帖管理等。用户管理控制类(UserMgmtWorkflow):针对用户自身进行管理,包括更改信息,管理好友等操作。系统管理控制类(SysMgmtWorkflow):所有针对系统的管理和操作都纳入这个控制类中,当然设计阶段可以对设计类进行调整,划分出分角色的管理类实现。3.3系统关键抽象概念的获取与分析下面分析系统的领域模型。在这个系统中领域模型的重要作用是显而易见的,所有用户都围绕着这个模型在工作。匿名用户可以浏览系统中的各种信息,包括浏览博客空间和小组空间的信息;普通博客可以查看其它博客空间的信息,并能够进入小组进行讨论;而博主则可以在自己的博
14、客空间发布博文并进入小组讨论,所有人都在围绕领域模型浏览信息或操作信息。因此根据前面的假设和扩展,初步得出下面的领域模型结构。4成员f分熒an+父分崟01博客空间乐主.元卫屁访R迪址小组怎小爼宕称乐小爼访何迪址館小组跑主豐,岂当旳状态宅主題名称小组发帖弘较表时医用户肠评论时三分类状态1博文分类回帖根据前述需求,一个用户可以创建多个博客空间,并可以发布多条博文,每条博文具有一个特定的主题,并且可以具有多个分类关系,可以包含多条回复的评论,并且具有一个特定的状态。用户可以创建一个小组,并且小组可以加入多个用户,小组中可以发帖、回帖。由于博客空间和小组内的消息发布在操作和结构的性质上是一致的,不同之
15、处在于小组内任何人都可以发帖,而博客空间内只允许博主发帖,这在设计实现中只要检查当前是博客还是小组,操作者是否拥有当前博客空间即可解决权限问题,因此在系统设计中将两者统一处理,将消息发布对象统称为发帖条目(PostItem),回复统一为回帖条目(Replyltem)。每个发帖条目关联一个主题(Subject),并具有零到多个关键字(分类)(Keyword)。当然发帖条目有不同的状态(Status),如草稿、扣留发布、正常发布、置顶发布、隐藏、删除、允许回复、禁止回复。另外博客博主仅仅在检查操作时有区分权限的关系,因此将两者统一为用户(User)。用户新建发帖后,键入的内容自动保存,此时发帖属于
16、草稿状态;编辑完成点击发布后,发帖进入待发布状态;进入待发布状态的帖子由系统自动判断是否有违规定的地方,进入审批状态,结果若通过则进入发布状态,若未通过则进入待发布状态,此时用户可以继续编辑或丢弃帖子,因此在待发布状态下的帖子都是没有审核通过的帖子;处于发布状态的帖子是可以显示在空间里面的,当然如果用户选择隐藏则不显示在空间内;超过时限的帖子则进入存档状态,存档状态下的帖子都将被移到到备份库中压缩存储。3.4分析类交互下面选取一个简单的登录过程和发布帖子这两个用例来说明分析类的交互过程分析。登录过程在所有系统中都有体现。一般在操作的设计中,首次登录的时候只需要输入用户标识和密码即可登录,当用户
17、名或密码不正确时,在后续的界面上加入验证码来防止破解攻击,多次无效后(一般控制在10次)账户便被锁定。本系统中由于没有太大的安全性需求,因此即使多次登录失败账户也不需要锁定,只需加入验证码即可。下面分析发布帖子的交互过程。界面中使用CKEditor控件可以完成文字修饰、上传图片及编排版式的功能,最终在浏览器上生成一个HTML的描述文本,提交后服务器端接收这个HTML描述文本,设计中将这个描述文本直接存入数据库中即可。浏览帖子的时候只要取出此描述文本放入页面中即可显示原先编辑好的效果。提交此数据后,首先确认并检查用户权限,是否可以发帖,通过后将发帖内容交给系统检查,这里由ItemChecker接
18、口来完成检查工作,最终设计中只要实现这个接口就可以完成多种检查方法。检查通过后,发帖内容存入数据库,同时用户可以浏览最终的效果。4系统设计整个系统使用Java语言作为开发的基础语言,Web界面部分搭配使用HTML、CSS、J送JS以及JSP技术来实现。最终发布的系统对平台没有特别大的强制要求,因为基于Java开发的Web型服务项目,可以选用流行的Tomcat服务器搭建,这些都是开源免费的平台。数据库可以使用MySQL数据库,它也是免费使用的数据库,很多大型网站都选用了MySQL作为自己的数据库支持平台。开发过程中,选择平台搭建于Windows系统下,当然发布时可以选择Windows平台或Lin
19、ux平台,两者的环境下都有上述的开源软件。硬件平台没有强制性要求。4.1系统数据库的结构设计根据前面的需求描述及领域模型的系统关键数据抽象,分析得出系统的数据库表结构如下面的关系图所示,其中基本表(Table)用于记录底层的核心的信息。另外,必须基于基本表在其上层创建一些视图(View)以方便某些角度的数据的操作。整体的逻辑结构如图所示:数据库表的总体关系图5系统实现系统实现中,主要是根据设计模式实现其中定义的方法和功能即可。在软件项目中实现的工作量比设计要轻很多,这里选取之前的介绍的登录实现与发帖相关部分的实现来介绍具体实现过程。5.1登录的实现登录页面的实现首先是判断登录名和密码是否为空,
20、如果都不为空,提交给UserServlet处理,并且连接数据库并判断post传过来的数值内容是否与数据库中的内容一致,如果一致就允许用户登录相应界面。页面组件HTML代码组织如下:div用户登录/pStringmessage=(String)request.getAttribute(message);If(message!=null)out.print(fontcolor二red+message+/trtrtd密码/tdtdinputname=passwordtype=passwordid=password/td/trtr0)user=(User)list.get(0);HttpSession
21、session=request.getSession();session.setAttribute(user,user);request.getRequestDispatcher(/main.jsp).forward(request,response);elserequest.setAttribute(message,用户名或密码不正确);request.getRequestDispatcher(/login.jsp).forward(request,response);/退出publicvoidlogout(HttpServletRequestrequest,HttpServletRespo
22、nseresponse)throwsServletException,IOExceptionHttpSessionsession=request.getSession();session.invalidate();response.sendRedirect(/main.jsp);/修改密码publicvoidchangePassword(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOExceptionStringoldPassword=request.getParameter(old
23、Password);StringnewPassword=request.getParameter(newPassword);StringreNewPassword=request.getParameter(reNewPassword);HttpSessionsession=request.getSession();Useruser=(User)session.getAttribute(user);if(!user.getPassword().equals(oldPassword)request.setAttribute(message,您输入的原密码错误);request.getRequest
24、Dispatcher(/result.jsp).forward(request,response);elseif(newPassword.equals(reNewPassword)Stringsql=updatet_usersetpassword=?whereid=?;Stringparams=newPassword,user.getId().toString();QueryRunnerqr=DbHelper.getQueryRunner();tryqr.update(sql,params);catch(SQLExceptione)e.printStackTrace();response.se
25、ndRedirect(/main.jsp);elserequest.setAttribute(message,两次输入密码不一致);request.getRequestDispatcher(/reult.jsp).forward(request,response);5.2发帖的实现帖子的基本信息设置项分为几部分内容,核心包括如下部分。privateintid;privateStringtitle;privateStringcontent;privateDatecreateDate;privateStringcategoryName;privateIntegercategoryId;发帖前的验证
26、工作由下面代码实现。publicclassPreAddBlogServletextendsHttpServletprivatestaticfinallongserialVersionUID=-4836172756151206293L;publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOExceptionlist(request,response);publicvoidlist(HttpServletRequestrequest,HttpServletResp
27、onseresponse)throwsServletException,IOExceptionHttpSessionsession=request.getSession();if(session=null)response.sendRedirect(/login.jsp);elseStringsql=selectid,content,rankfromt_keywordorderbyrankdesc,iddesc;QueryRunnerqr=DbHelper.getQueryRunner();Listlist=null;trylist=(List)qr.query(sql,newBeanList
28、Handler(Category.class);catch(SQLExceptione)e.printStackTrace();request.setAttribute(list,list);request.getRequestDispatcher(/addItem.jsp).forward(request,response);具体发帖操作由如下代码实现。publicclassAddBlogServletextendsHttpServletprivatestaticfinallongserialVersionUID=1L;protectedvoiddoGet(HttpServletReques
29、trequest,HttpServletResponseresponse)throwsServletException,IOExceptiondoPost(request,response);protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOExceptionrequest.setCharacterEncoding(utf-8);HttpSessionsession=request.getSession();if(session=null)resp
30、onse.sendRedirect(/login.jsp);elseStringtitle=request.getParameter(title);Stringcontent=request.getParameter(content);Log.println(title);Log.println(content);intresult=0;Stringsql=insertintot_postitem(title,content)values+(?,?);Stringparams=title,content;QueryRunnerqr=DbHelper.getQueryRunner();tryre
31、sult=qr.update(sql,params);/query()catch(SQLExceptione)e.printStackTrace();Stringmessage=;if(result=0)message二添加帖子失败;elsemessage二添加帖子成功;request.setAttribute(message,message);request.getRequestDispatcher(/result.jsp).forward(request,response);5.3查看帖子模块查看发帖包括查看所有发帖和按发帖编号查看一篇帖子,相关操作提交给HomeServlet执行。pub
32、licclassHomeServletextendsHttpServletprivatestaticfinallongserialVersionUID=-481044148316500873L;publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOExceptionrequest.setCharacterEncoding(utf-8);Stringmethod=request.getParameter(method);if(method=null)main(r
33、equest,response);request.getRequestDispatcher(/main.jsp).forward(request,response);elseif(method.equals(get)main(request,response);get(request,response);request.getRequestDispatcher(/displayItems.jsp).forward(request,response);/根据id读取一篇帖子publicvoidget(HttpServletRequestrequest,HttpServletResponseres
34、ponse)throwsServletException,IOExceptionStringid=request.getParameter(id);QueryRunnerqr=DbHelper.getQueryRunner();Stringsql=selectid,title,content,createdatefromt_postitemwheried=+id;/根据id读取一篇帖子PostItemitem=null;tryListlist=(List)qr.query(sql,newBeanListHandler(PostItem.class);item=(PostItem)list.ge
35、t(0);catch(SQLExceptione)e.printStackTrace();/根据id读取帖子所有评论sql=selectid,username,content,createdtimefromt_replyitem+whereitem_id=+id+orderbyiddesc;ListcommentList=null;trycommentList=(List)qr.query(sql,newBeanListHandler(Comment.class);catch(SQLExceptione)e.printStackTrace();request.setAttribute(post
36、item,item);request.setAttribute(commentList,commentList);/读取所有帖子publicvoidmain(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOExceptionStringcid=request.getParameter(cid);Stringsql=null;if(cid=null)sql=selectb.idasid,title,content,createdate,+nameascategoryname,c.idascategoryid+fromt_blogb,t_keywordcwhereb.id=c.id+orderbyb.iddesclimit0,4;elsesql=selectb.idasid,title,content,createdate,+nameascategoryname,c.idascategoryid+fromt_blogb,t_keywordcwhereb.id=+cid+orderbyb.iddesclimit0,4;/DButils中核心类,生成对象时传递数据源对象QueryRunnerqr=DbHelper.getQu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 儿科患者猝死应急预案(3篇)
- 农村拆除斜坡施工方案(3篇)
- 中式糕点新年活动策划方案(3篇)
- 农资店铺的营销方案(3篇)
- 1-1-Diethyl-4-4-bipyridine-1-1-diium-bromide-Ethylviologen-dibromide-生命科学试剂-MCE
- 华为UPS故障应急预案(3篇)
- 同行外出参观活动方案策划(3篇)
- 嘉兴窗台拆除施工方案(3篇)
- 地产周末营销活动方案(3篇)
- 培训学校开业活动策划方案(3篇)
- 2025年全国中小学校党组织书记网络培训示范班在线考试题库及答案
- 国内在线教育的发展状况研究论文3000字
- 英语四级单词表4500
- 新人教版一年级数学下册全册同步练习一课一练
- 豆瓣酱质量通则
- 盘古开天地 公开课一等奖创新教案(2课时)
- 统编版七年级历史下册期末知识点复习提纲
- 《房地产开发与经营》全套教学课件
- DL-T5153-2014火力发电厂厂用电设计技术规程
- (高清版)DZT 0339-2020 矿床工业指标论证技术要求
- 国开《农村环境保护形成性考核册》形考1-3答案
评论
0/150
提交评论