毕业设计(论文)基于SpringMVC的云笔记系统.doc

上传人:laozhun 文档编号:3979861 上传时间:2023-03-30 格式:DOC 页数:26 大小:4.13MB
返回 下载 相关 举报
毕业设计(论文)基于SpringMVC的云笔记系统.doc_第1页
第1页 / 共26页
毕业设计(论文)基于SpringMVC的云笔记系统.doc_第2页
第2页 / 共26页
毕业设计(论文)基于SpringMVC的云笔记系统.doc_第3页
第3页 / 共26页
毕业设计(论文)基于SpringMVC的云笔记系统.doc_第4页
第4页 / 共26页
毕业设计(论文)基于SpringMVC的云笔记系统.doc_第5页
第5页 / 共26页
点击查看更多>>
资源描述

《毕业设计(论文)基于SpringMVC的云笔记系统.doc》由会员分享,可在线阅读,更多相关《毕业设计(论文)基于SpringMVC的云笔记系统.doc(26页珍藏版)》请在三一办公上搜索。

1、河南科技学院 2015 届本科毕业论文(设计) 论文(设计)题目:基于SpringMVC的云笔记系统 学生姓名: 所在院系: 信息工程学院 所学专业: 计算机科学与技术 导师姓名: 完成时间: 2015-05-10 摘要本课题所实现的云笔记系统改变了传统的记录笔记的模式,采用云笔记系统,这种新式的方式使得用户在学习中更加方便快捷的记录,分享,收藏笔记。本系统采用b/s开发模式,分为服务器端和浏览器端。在服务器端主采用MySQL数据库使用MyBatis技术访问数据库。使用Spring框架管理组件,整合MyBatis,处理一些通用通用的业务。使用MVC分层思想,将代码分为控制层,业务层,持久层和视

2、图层,实现了登陆模块,笔记本模块,和笔记模块。登陆模块的主要包括登陆,注册,修改密码和退出登陆功能。笔记本模块主要包含新增,修改,删除功能。笔记模块包含查询,新增,修改,删除功能。在浏览器端主要采用Ajax处理客户端逻辑以及发送异步请求并实现了系统界面的一些动态效果。关键词 :Ajax,MySQL,MyBatis,SpringMVC,Spring,Java。ABSTRACT关键词 JQuery,MySQL,MyBatis,SpringMVC,Spring,JavaThe article notes cloud system changed the pattern of traditional

3、note taking, the cloud notes system, this new way allows users to more easily and quickly in the study record, share, used notes.The system uses the b/s developmentmodel,divided into serverand browser.At theend of the mainserverusing MySQL databaseaccess tothe database using MyBatis technology.The i

4、ntegration of MyBatisusing the Spring framework,management component,somegeneralbusiness.Using the MVC hierarchical thinking, the code is divided into control layer, business layer, persistence layer and view layer, to achieve the login module, module of notebook, and notes module.The landing module

5、includeslogin,registration,modify the passwordandexit thelogin function.The notebookmodule mainly consists ofadd,modify,delete function.Notemodulecontains the query,add,modify,delete function.At the end of the browser uses Ajax client-side logic and sends an asynchronous request and the system inter

6、face of some of the dynamic effect.Keywords:SpringAjax,MySQL,MyBatis,SpringMVC,Spring,Java.目录1. 绪论.51.1项目背景及意义51.2项目现状及趋势概述52. 系统理论和技术路线.52.1 Java语言概述52.2 b/s和c/s体系52.3 JavaScript与Ajax.62.4系统主要路线.72.5 运行环境要求72.5.1 硬件环境.72.5.2 软件环境.73. 系统需求分析.83.1各模块关系图83.2数据库设计83.2.1 数据库列表83.2.2数据库连接的实现.93.3 主要开发工具.

7、124.功能模块.124.1登陆模块124.2笔记本模块224.3笔记模块.255.结论.27谢词.27参考文献.271. 绪论1.1项目背景及意义 因为互联网的快速发展,人们获得新知识的方法也变得多样化,在线学习应运而生,为了让使用在线学习的人能更方便的记录笔记,云笔记项目因此诞生,云笔记是用于用户在进行学习时随时记录,分享,收藏笔记。云笔记系通过分布式解决方案使用户空间被无限放大。系统贴近贴近用户的使用习惯,期望达到达到无处不学习无处不笔记的效果。1.2项目现状及趋势概述 就目前来看云笔记市场呈现的特点是用户群较小但是没有什么行业竞争其目前主要用于教育市场。但是互联网发展速度迅速,今后的生

8、活,工作,学习也许都要和互联网打交道,但是互联网毕竟不是现实世界一些重要的信息,知识不能随时随地的记录,但是云笔记却解决了这些烦恼。云笔记起初用于在线学习的人群记录笔记,但是我相信不远的将来云笔记必将推向大众,成为人们日常生活不可或缺的一部分。2. 系统理论和技术路线2.1 Java语言概述Java是SUN公司开发最初命名为Oak是一种小型系统的编程语言,随着互联网发展SUN公司改造了Oak并以“Java”名称正式发布。Java编程风格接近于C,C+语言,但不同的是Java是完全的面向对象程序设计语言,继承了C+语言面向对象技术的核心但是舍弃了指针,增加了垃圾回收机制。 JDK(Java De

9、velopment Kit)是Java开发工具包,除了包含JRE(Java Runtime Environment) 外还包含运行Java程序所需要的工具JDK。所以JDK=JRE+编译、运行等开发工具。JRE:Java运行时环境 除了包含JVM(Java Virtual Machine)外还提供了运行Java程序所需要的环境。JRE=JVM+Java系统类库 JVM是Java虚拟机。Java开发过程简而言之就是首先使用一个文本编辑器编写扩展名为.Java的源文件,然后用Java编译器把扩展名为.Java的源文件编译为.class,最后JVM加载.class并运行.class。不同的平台使用不

10、同的JVM所以,JVM屏蔽了平台之间的差异,所以实现了跨平台一次编译到处使用。2.2 b/s和c/s体系 b/s即浏览器/服务器端结构,如果说b/s就最好和c/s作比较,那具体的项目举例就是网页版的qq是b/s结构,而需要下载的qq客户端属于c/s模式。从安全性来说,c/s模式对于每个用户都有一个客户端,而b/s模式的客户端是被所有用户公用,而且不固定,所以来说,c/s比较b/s来说安全性相对较高。从维护成本角度来讲c/s结构中需要用户下载专有的客户端软件,而b/s模式,客户端不需要下载任何用户界面,软件系统的改进和升级越来越频繁,b/s架构的产品明显体现着更为方便的特性。b/s架构的软件只需

11、要管理服务器就行了,所有的客户端只是浏览器,根本不需要做任何的维护。无论用户的规模有多大,有多少分支机构都不会增加任何维护升级的工作量,所有的操作只需要针对服务器进行。所以客户机越来越“瘦”,而服务器越来越“胖”是将来信息化发展的主流方向。今后,软件升级和维护会越来越容易,而使用起来会越来越简单,这对用户人力、物力、时间、费用的节省是显而易见的,惊人的。从这一方面来说节约了开发成本。2.3 JavaScript与AjaxJavaScript是Netscape开发的一种在客户端运行的、解释性的脚本语言,最早是在HTML网页上使用,用来为网页增加动态功能。为了统一规格,JavaScript兼容于E

12、CMA(European Computer Manufactures Association)标准,因此也称为ECMAScript。JavaScript的关键字var、if、for、switch、break、continue、while支持数据类型的自动转换和强制转换。Ajax (Asynchronous JavaScript and Xml)是异步的JavaScript和Xml,是一种用来改善用户体验的技术,它的实质是利用浏览器提供的一个特殊对象(Ajax对象)异步的向服务器发送请求,服务器送回部分数据(一般不再需要返回完整的页面),浏览器利用这些数据更新当前页面。整个过程,页面无需刷新,不

13、打断用户的操作 获得Ajax对象要区分浏览器。function getXhr()var xhr = null;if(window.XMLHttpRequest)/非IE浏览器xhr = new XMLHttpRequest();else/IE浏览器xhr = new ActiveXObject(MicroSoft.XMLHttp);return xhr;2.4系统主要路线 在数据库方面,我所设计的云笔记系统用到的是MySQL数据库,大致包括用户表,笔记本类型表,笔记本表,笔记表,笔记状态表,分享笔记表。对于浏览器器端的设计,主要用HTML、CSS来实现,其中对于数据库的请求和获取数据库的信息并

14、显示,主要会用到Ajax。服务端代码主要采用Spring MVC(Model View Controller)来实现的。MVC一种设计思想,是根据职责不同将程序中组件分成以下三个部分:M(Model) 模型负责业务处理(数据和逻辑),V(View) 视图负责与用户的交互界面(可以接收和呈现数据),C(Controller) 控制器负责协调M和V工作。 MVC思想现在有很多实现,可以自己使用JSP+Servlet+JavaBean搭建,也可以使用主流框架,例如Spring Web MVC,Struts2,WebWork,JSF等。2.5 运行环境要求 2.5.1 硬件环境 服务端:有足够大的内存

15、可以运行数据库,MyEclipse和Chrome浏览器。2.5.2 软件环境(1)浏览器端:Chrome浏览器。(2)服务端:MySQL数据库、MyEclipse 。3. 系统需求分析3.1各模块关系图此系统设计主要由以下各功能组成,包括用户的登陆、用户对笔记以及笔记本信息的管理、用户退出登录及修改密码。系统所包含的模块如图3-1所示: 图3-1 功能模块3.2数据库设计3.2.1 数据库列表数据库我们采用MySQL数据库,所需要建立的表有:(1)用户表(cn_user)存储登录系统的用户信息。其中包括主键用户ID(cn_user_id)、用户名(cn_user_name)、密码(cn_use

16、r_password)、说明(cn_user_desc)。(2)笔记本表(cn_notebook)笔记存储在笔记本中,笔记本存储在笔记本表中。每个用户都可以有很多不同的笔记本,分别存储不同类别的笔记。笔记本表中包括主键笔记本ID(cn_notebook_id)、用户ID(cn_user_id)、笔记本类型ID(cn_notebook_id)、笔记本名(cn_notebook_name)、笔记本说明(cn_notebook_desc)、创建日期(cn_notebook_createtime)。(3)笔记本类型表(cn_notebook_type)笔记本有不同的类型,这些类型存储在笔记本类型表中,

17、目前预置的所有笔记本类型包括收藏、回收站、活动、正常。其中包括主键笔记本类型ID(cn_notebook_type_id)、笔记本类型名(cn_notebook_type_name)、笔记本类型说明(cn_notebook_type_desc)。(4)笔记表(cn_note_id)是用来存储用户创建的所有笔记,在保存时需要存储用户的ID还有当前笔记所在的笔记本的ID。笔记表中包括主键笔记ID(cn_note_id)、笔记本ID(cn_notebook_id)、用户ID(cn_user_id)、笔记标题(cn_note_tatle)、笔记内容(cn_note_body)、笔记创建时间(cn_no

18、te_createtime)。(5)分享笔记表(cn_share)用户对于自己的笔记可以进行分享,分享后的笔记存储到此分享笔记表中。其中包括主键共享ID(cn_share_id)、共享标题(cn_share_title)、共享内容(cn_share_body)、笔记id(cn_note_id)。3.2.2数据库连接的实现对于数据库的连接,本系统主要用到的是Spring整合MyBatis技术,IBatis是Apache组织推出的一款数据库操作框架。2010该框架由Apache迁移到Google,变更为MyBatis。MyBatis也是对JDBC技术的一个封装,可以简化数据库访问代码。封装了获取连

19、接、执行SQL、释放连接等过程封装了实体对象和SQL参数之间的自动映射(利用#属性名方式替代SQL中的?)封装了查询结果集和实体对象之间的自动映射(结果集字段和实体对象属性名称保持一致)将SQL语句定义到XML文件 因此使用MyBatis操作数据库,只要引入框架,定义实体类,提供SQL语句即可。MyBatis执行过如下:首先加载、解析配置文件(SqlMapConfig.xml和SQL定义的SqlMap.xml),然后将SQL语句提取封装成MappedStatement然后接收SQL参数利用SqlSession执行SQL操作 根据id名字调用对应的MappedStatement对象,根据规则设置

20、SQL参数,发送到数据库执行,如果是查询最后将结果集数据映射成Map,Enity对象返回。MyBatis基本使用方法是SqlSessionFactoryBuilder读取XML配置文件,构建SqlSessionFactory对象,SqlSessionFactory用于创建SqlSession对象, SqlSession封装了数据库增删改查方法。使用方法是引入mybatis和驱动开发包,src添加SqlMapConfig.xml主配,添加SqlMapper.xml定义SQL语句,根据表定义实体类获取SqlSession触发SQL操作。使用Mapper映射器通过一个接口调用SQL首先编写一个Emp

21、Mapper接口,将EmpMapper.xml定义SQL的文件中namespace指定为包名.接口名,在EmpMapper接口定义方法,方法名与XML操作的id属性一致,方法参数与XML操作的parameterType类型一致, 返回值参考resultType指定的类型,单行记录查询可以用resultType指定的类型,但是多行记录查询需要使用List。最后通过session.getMapper(EmpMapper.class)动态生成一个实现类,通过该对象触发SQL操作。Spring与MyBatis结合,主要是由Spring管理数据库访问组件Dao,数据库访问组件主要是基于MyBatis实现

22、,在Spring环境中使用MyBatis实现数据库访问组件过程是:首先需要引入一个Spring和MyBatis整合的开发包 mybatis-spring-1.2.2.jar。在Spring配置中定义SqlSessionFactoryBean,等价于SqlSessionFactory放入Spring容器管理。(不需要开发者利用手工创建SqlSessionFactory对象,需要开发者定义式注入连接信息和SQL定义的XML信息)在Spring配置中定义MapperFactoryBean,可以根据指定的Mapper接口生成一个Mapper实现类接口。需引入引入开发包:spring ioc,sprin

23、g aop,dbcp,mybatis,驱动,mybatis-spring.jar。添加Spring框架的配置文件主要有applicationContext.xml,根据user表编写实体类User,编写UserMapper.xml(定义SQL语句),并且编写UserMapper接口(与UserMapper.xml映射),在applicationContext.xml中配置组件SqlSessionFactoryBean,MapperFactoryBean。最后测试MapperFactoryBean生成的UserMapperDao实例。对于数据库的连接代码如下:(1)配置jdbc.properti

24、es文件:url=jdbc:mysql:/localhost:3306/cloud_note?useUnicode=true&characterEncoding=utf-8driver=com.mysql.jdbc.Driveruser=rootpassword=1234(2)在applicationContext.xml中配置组件MapperFactoryBean,SqlSessionFactoryBean,DataSource。 3.3 主要开发工具本系统的主要开发工具是MyEclipse如果想要了解MyEclipse,首先应该先了解Eclipse,Eclipse是基于Java语言开源的并

25、且可以扩展的操作平台。Eclipse内置了一个标准的插件库,包括Java Development Tools 即JDT, Eclipse首先来说源码是开放的,程序员都可以研究使用修改它,另外,Eclipse是可以扩展的,它不仅支持Java的开发,还包括PHP、C等很多语言的开发和使用,只需要下载相应的插件即可。而且很多平台如Linux,windows等都支持Eclipse。MyEclipse是Eclipse的加强版,它不仅继承了Eclipse的所有功能,而且能很好的处理在JavaEE和数据库的开发,因而我们能利用JavaEE中数据库和servlet来实现我们软件中后台的一些功能。而且MyEcl

26、ipse还内嵌了Tomcat,因此我们还可以直接将后台在其上进行发布。4.功能模块4.1登陆模块(1)注册功能:业务逻辑:用户名是3-20位字母、数字、下划线的组合,密码长度不能小于6位,确认密码和密码一致,用户名不能重复,在点击注册时验证所有的验证通过,则创建新用户注册成功后,自动跳转到登录页面。分析请求:在注册时发起请求,先验证用户名是否重复,若不重复则创建用户,否则则返回一些错误信息。注册界面如图4-1所示: 图4-1 注册界面开发步骤:首先在DAO中创建表cn_user,创建实体类User,创建UserMapper创建UserMapper.xml。然后在Service中创建LoginS

27、ervice,验证用户名是否重复,创建用户。最后在Controller中创建LoginController,并且调用LoginService处理请求并且给页面返回一些数据,该数据在控制层统一组装,最好所有Controller的方法返回的数据都有标准的格式。主要代码如下:UserMapper.xml:insert into cn_user values(#cn_user_id,#cn_user_name #cn_user_password,#cn_user_token,#cn_user_desc) LoginService:/*创建用户*/public boolean createUser(Us

28、er user) /校验用户名if(this.checkUserName(user.getCn_user_name() /校验通过,创建用户this.addUser(user);/给用户初始化笔记本this.initNoteBook(user.getCn_user_id();return true; else /校验失败return false;/* * 校验用户名 */public boolean checkUserName(String userName) if (userName = null)throw new BusinessException(用户名不能为空.);User user

29、 = userMapper.findByName(userName);if (user = null)return true;elsereturn false;/* * 初始化笔记本 */public void initNoteBook(String userId) if(userId = null)throw new BusinessException(参数为空.);/ 查询特殊的笔记本类型List noteBookTypes = noteBookTypeMapper.findSpecialType();/ 针对每种特殊类型,创建一个默认的笔记本for(NoteBookType type :

30、 noteBookTypes) NoteBook book = new NoteBook();book.setCn_notebook_id(UUIDUtil.getUID();book.setCn_user_id(userId);book.setCn_notebook_type_id(type.getCn_notebook_type_id();book.setCn_notebook_name(type.getCn_notebook_type_name();book.setCn_notebook_createtime(new Timestamp(System.currentTimeMillis(

31、);noteBookMapper.save(book);LoginController:/注册用户public Result register(User user) boolean b = userService.createUser(user);return new Result(b);(2)登录功能:业务介绍:点击登录按钮时,需要进行客户端验证,验证用户名、密码不能为空,发送异步请求,访问服务端组件,在服务端对用户名、密码进行验证判断其是否正确,如果验证通过,则登录成功,将用户信息存入session。如果验证不通过,则登录失败,给页面返回一些错误信息,并提示给用户。分析请求:包含一次请求,

32、即登录时进行验证,请求过程与注册过程一致。登录界面如图4-2所示:图4-2 登录界面开发步骤:首先在DAO中的UserMapper创建findByName方法,然后在Service的LoginService里增加验证用户名和密码的方法,该方法的逻辑为:根据用户名查询用户,判断查询结果是否为null,如果查询结果为null说明用户名不存在返回错误信息,如果查询结果不为null,继续判断密码是否正确,密码正确则登录成功,密码错误则返回错误信息。最后我们在Controller中的LoginController中调用LoginService对用户名、密码进行验证,如果验证成功,将用户信息存入sessi

33、on。主要代码如下:UserMapper.xml:select * from cn_user where cn_user_name=#userNameLoginService:/* * 校验用户名及密码 */public Map checkUser(String userName, String pwd) Map map = new HashMap();if(userName = null)throw new BusinessException(用户名为空.);if(pwd = null)throw new BusinessException(密码为空.);User user = userMa

34、pper.findByName(userName);if(user = null) map.put(flag, SystemConstant.LOGIN_PASSWORD_ERROR);map.put(msg, 用户名错误.); else if (!user.getCn_user_password().equals(Md5Util.md5(pwd) map.put(flag, SystemConstant.LOGIN_PASSWORD_ERROR);map.put(msg, 密码错误.); else map.put(flag, SystemConstant.LOGIN_SUCCESS);map

35、.put(msg, 登录成功.);return map;LoginController:RequestMapping(/login.do)ResponseBodypublic Result login(String userName, String password, HttpSession session) Map data = userService.checkUser(userName, password);if (0.equals(data.get(flag).toString() /登录成功User user = userService.findUser(userName);data

36、.put(user, user);session.setAttribute(user, user);return new Result(data);(3)退出登录: 业务逻辑:注销当前用户的session将页面跳转到登录页。开发步骤:Controller:在LoginController中增加一个退出登录的方法在该方法中将session注销。主要代码如下:LoginController:RequestMapping(/login.do)ResponseBodypublic Result login(String userName, String password, HttpSession se

37、ssion) Map data = userService.checkUser(userName, password);if (0.equals(data.get(flag).toString() /登录成功User user = userService.findUser(userName);data.put(user, user);session.setAttribute(user, user);return new Result(data);(4)修改密码:业务逻辑:原密码长度不能小于6位新密码长度不能小于6位确认新密码与新密码一致,发送异步请求访问服务端验证原密码是否正确如果原密码输入正

38、确则修改密码,在回调函数中将页面跳转至登录页。修改密码退出登录界面如图4-3所示:图4-3修改密码退出登录开发步骤:首先在DAO中的UserMapper中增加修改密码的方法,然后在Service中增加修改密码的业务需要先校验原密码再修改密码。最后在Controller中增加修改密码的方法该方法要接收页面传入的原密码和新密码,调用Service进行修改密码。主要代码如下:UserMapper.xml:update cn_user setcn_user_name=#cn_user_name,cn_user_password=#cn_user_password,cn_user_token=#cn_u

39、ser_token,cn_user_desc=#cn_user_descwhere cn_user_id=#cn_user_id LoginService:/* * 修改用户 */public void update(User user) userMapper.update(user);LoginController:RequestMapping(/changePassword.do)ResponseBodypublic Result changePassword(String lastPassword, String newPassword, HttpSession session) User user = (User) session.getAttribute(user);if(user.getCn_user_password().equals(Md5Util.md5(lastPassword) user.setCn_user_password(Md5Util.md5(newPassword);userService.update(user);return new Result(修改成功.); el

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号