一、大宇想说的话

大宇大学毕业已经四个月了,这四个月有懒惰的时候,有努力的时候。回首自己走过的路,只有毕业设计最能浓缩我的所学。我早就有这个打算:把自己的毕业设计与大家分享,但一直没有用行动落实。这个周末我下决心,牺牲一些游戏的时间,要把这个事情落实了。

这个毕设投入了我很多心血,但最终的结果也证明这是值得的。大宇的毕设幸运的被答辩老师评为了‘优秀’,因此幸运的获得了"优秀毕业生"称号。获此殊荣的同组答辩的五十人中仅有不到五人。我始终坚信,写过的代码不应该丢弃,应该精心维护。

虽然此毕设倾注了大宇的努力,但由于大宇水平有限、时间仓促,代码中难免有写的不好的地方,请各位看官谅解。如果遇到问题或有意见或者建议,欢迎在CSDN下方留言。

想要本项目的抓紧时间了,赶紧联系我吧。VX:hairdryre,QQ:1137214912

演示环境请访问:http://tyzhou.cn/blogspace

二、毕设效果展示

我的毕业设计的题目是:《基于Java的个性化博客空间的设计与实现》。

为了感谢CSDN平台,我在毕设的选题上选择了制作一个类似CSDN一样的博客。毕设中的大部分文章都来自于自己的CSDN博客。

比如JDK1.7 HashMap集合源代码探索 、揭秘双向链表LinkedList源码、单例设计模式

下面是一些大宇毕设的效果截图(点击图片可以看到更加清晰的效果):

三、开发环境

开发工具:

JDK版本:1.8

数据库是MySQL

Maven版本:3.5.2

后端Java框架:

Spring、SpringMVC、Mybaits、Shiro

前端框架:

Bootstrap

四、设计思路

本小节,大宇将详细探讨毕设的一些关键技术难题,以及相关的设计思路。我将用“关注点”来标识重要的知识或者技巧。如果你乐意的话,可以一边看代码,一边阅读大宇的讲解。毕设源码中已经定位好了相关关注点,大家可以直接找到相关源码查看。

前排准备好瓜子了吗?Here we go!

提示:下面的所有关注点,均在源码中可以找到,可以在Eclipse或Idea中使用全区搜索快速定位。

-------------------------------------------------------------------启动后的流程-----------------------------------------------------------

关注点1:在web.xml中定义了项目启动后跳转的路径,本毕设直接跳转当前根目录的index.jsp页面。

关注点2:此页面在0秒后,立即刷新到指定的URL。为什么这里要立即刷新并发送'actions/article/list'请求,并由SpringMVC的ArticleController处理此请求,最终返回一个ModelAndView,解析到一个新的JSP页面中。这是因为JSP本质上是动态页面,它的数据由服务器组装。我们发送actions/article/list的目的就是向服务器请求文章的数据,并将查询数据库得到的文章数据,渲染到指定的JSP页面上。最终呈现给用户的是 /WEB-INF/pages/article/list.jsp页面。至于是如何跳转的,可以查看关注点3的配置。

关注点3:视图解析器,定义ModelAndView的前缀与后缀。这用于指定当前请求应该跳转哪个页面。

关注点4:SpringMVC拦截入口。本毕设的所有请求均以 ‘/actions/’ 开头。SpringMVC能够捕获到以/actions开头的请求,并将其映射到相关的Controller中处理。

关注点5:以关注点2中的index.jsp页面为例子,这个页面会刷新并发送一个新的请求,这个请求的路径为‘actions/article/list’。此路径定义在了META标签中的URL属性,最终会被浏览器解析为发送 /actions/article/list 请求。所以这个请求就像关注点4中解释的那样,会被SpringMVC捕获。SpringMVC会将此请求的标识去掉,即真正SpringMVC需要将此请求映射到处理 'article/list'这个请求的Controller中。

关注点6:大家可以看到我把所有的请求都抽取为了常量,这样其实便于维护,如果多个地方需要用到这个请求,只需要改字符串常量即可。同样返回的ModelAndView也定义为了常量。

关注点7:本ModelAndView返回的是artice/list,也就是 /WEB-INF/pages/article/list.jsp页面。这个list.jsp页面上就是你们看到的项目启动后的页面。数据从哪里来的,数据是从数据库中查询出来的。而这些数据是如何传递到页面上的呢?可以像大宇一样处理,把数据放到一个map中,然后可以在页面上使用EL表达式,也就是用美元符号取出map中的数据。

关注点1到关注点7主要阐述了项目启动后的跳转过程,大家应该不难理解吧。

----------------------------------------------------------前端如何与后台交互--------------------------------------------------------------

下面回到我们的首页。点击右上角的登录,输入管理员帐号:admin / admin。登录成功后,即可发现页面上方的导航栏发生了一些变化。新增了写文章与个人中心。那个"留言"的导航栏没有实现,算是偷懒吧。

点击阅读第一篇文章,发送/actions/article/readArticle/X请求。这个X是这篇文章在数据库t_article表的ID。源码的话查看关注点8。

关注点8:'article/readArticle/X'请求中的X,它是通过${article.id}解析出来的。在SpringMVC中,用于捕获这种由动态参数的URL,提供了一个注解@PathVariable解析。

关注点9:有动态参数的URL,SpringMVC应该怎么定义写呢。只需要把那个动态参数用{articleId}定义,然后在 Controller方法上用@PathVariable解析,最后映射到指定的变量上即可。如关注点10所示。

关注点10:解析动态参数。可参考大宇的博客:https://blog.csdn.net/yanluandai1985/article/details/79761027

关注点11:通过ajax方式向后端发送请求,发送的数据可以@RequestParam("参数名") 解析,如关注点12所示。

关注点12:@RequestParam("loginName") String loginName ,它把前端的数据解析并映射到了Java的字符串上了。

PS:大宇对前端其实也很头疼。就说这个ajax方式提交请求吧,大宇尝试了很多次想记住它,都失败了。最后都不得不再次查看相关的API文档,或者在项目中看别的同事的ajax请求格式。实在不行,就看自己的毕设^_^。如果你跟我一样主学的是Java,那么就应该掌握常用的解析前端过来的参数。常用的有@RequestParam、@RequestBody注解。遗憾的是,当前毕设中没有使用 @RequestBody 的情况,因为那个时候我还没有掌握@RequestBody的使用。感兴趣的朋友可以自己找资料学习。

关注点13:@ResponseBody可以把后台的Java对象解析为Json对象,作为ajax请求的响应。

----------------------------------------------------------Mybatis相关--------------------------------------------------------------

回到登录后的首页。在右侧我设计了'热门文章'与‘本栏推荐’模块。热门文章是点击量最多的几篇文章。

关注点14:热门文章其实就是:获取指定条数的文章,按照点击量降序排行。代码追踪下去,最终执行的SQL语句在关注点15处。

关注点15:SELECT * FROM t_article ORDER BY click DESC LIMIT 0,#{limit}        click字段是在数据库中的意思是点击量。在MySQL中,排序使用的是ORDER BY 。升序用的是ASC,降序用的是DESC。分页是通过 LIMIT来控制。 LIMIT A ,B  说明的是从第A条数据开始,查询B条数据。

点开某一篇文章,在文章的最下面,有可以提交评论的地方。在提交评论的上方,有“上一篇文章”与“下一篇文章”、“相似文章”。上一篇文章就是获取 文章id小于当前文章id的第一篇文章,下一篇文章是文章id大于当前文章id的第一篇文章。相似文章通过模糊查询当前文章的标签,取得相似的文章。

关注点16:mybatis中使用模糊查询。可参考:https://blog.csdn.net/yanluandai1985/article/details/79757088

关注点17:mybatis动态排序。可参考:https://blog.csdn.net/yanluandai1985/article/details/79756561

关注点18:mybatis中不能直接写 大于号 小于号,因为会被解析成XML配置文件,因此需要使用CDATA转义。

解决办法:https://blog.csdn.net/yanluandai1985/article/details/79758275

关注点19:mybatis中使用分页插件:https://blog.csdn.net/yanluandai1985/article/details/79759253

mybatis的更多关注点,如批量操作、为实体生成主键,可以查看:https://blog.csdn.net/yanluandai1985/article/category/7550717

----------------------------------------------------------日志相关--------------------------------------------------------------

关注点19:控制控制台日志输入。几乎每个类都有日志的输入,为了避免控制台输入太多调试信息,可以把指定包下的输入等级提高。比如<logger name="domains" level="INFO" />修改为<logger name="domains" level="WARN" />。这样做的效果就是,domains包下的所有类需要打印大于等于WARN等级的日志,而一般我们输入的日志的等级是DEBUG或INFO,这类日志将会被忽略。本毕设用了大量的日志信息,大家可以直接模仿。

----------------------------------------------------------Shiro相关--------------------------------------------------------------

Shiro安全框架的东西,或许有些朋友没有用过,而且本毕设也仅仅用于权限控制。下面就简单说一下用到的地方吧。

(1)在未登录的情况下,不允许查看文章的具体内容。登录其实就是Shiro所说的认证。

(2)非管理员登录后,点击导航栏的“后台管理中心”,将会提示用户没有相关的权限信息。用到的是Shiro的授权。

(3)帐号密码的加密。

对Shiro感兴趣的朋友可以去涛哥的博客学习,我也是在那里学的。地址是:http://jinnianshilongnian.iteye.com/blog/2018398

----------------------------------------------------------分割线--------------------------------------------------------------

本来打算把这篇博客写完的,但是看了一下时间,诶。这个周末下的任务只能算是完成了一半,还有好多东西想跟大家分享。这也算大宇的一个坏习惯吧,做事拖拉,最终的结果就是任务总是打折完成。^_^,得改。

五、致谢

致谢的人与他们的链接:

杨青,一个潜心研究web前端技术女程序员            大宇的网站用的是青姐的开源模版,非常感谢青姐

倪升武,他的口号是:乐于分享共同进步               武哥的博客陪伴了我无数实习的时光

孤傲苍狼,只为成功找方法,不为失败找借口!    感谢孤傲苍狼的JavaWEB系列博客,让我明白分享也是一种进步

张开涛,跟我学系列的创始人                                 涛哥无私的分享Spring、Shiro等框架的知识,值得为他点赞

六、我的故事

我也曾经迷茫过,不知道应该学什么,如果你也跟大宇一样,在Java这条道路上有过不知所措的经历,我很愿意与你分享我的Java之路,希望能对迷茫的你有所帮助。

我的Java之路----盘点从学校走向公司的点点滴滴

.

毕业设计分享----基于Java的个性化博客空间的设计与实现相关推荐

  1. 基于JAVA大学生个人博客网站计算机毕业设计源码+系统+lw文档+部署

    基于JAVA大学生个人博客网站计算机毕业设计源码+系统+lw文档+部署 基于JAVA大学生个人博客网站计算机毕业设计源码+系统+lw文档+部署 本源码技术栈: 项目架构:B/S架构 开发语言:Java ...

  2. 计算机毕业设计系列基于SSM的个人博客管理系统

    目录 一.项目介绍 二.开题报告 三.项目截图 四.源码获取 一.项目介绍 计算机毕业设计系列基于SSM的个人博客管理系统 本项目是一款基于SSM的个人博客管理系统.该个人博客管理系统基于B/S架构, ...

  3. java gui论文_毕业设计论文-基于JAVA GUI的电子邮件客户端软件的设计与实现.doc

    毕业设计论文-基于JAVA GUI的电子邮件客户端软件的设计与实现.doc 还剩 41页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧, ...

  4. 基于ssm的个人博客系统的设计与实现(含源文件)

    欢迎添加微信互相交流学习哦! 项目源码:https://gitee.com/oklongmm/biye 进入二十一世纪,以Internet为核心的现代网络积水和通信技术已经得到了飞速的发展和广泛的应用 ...

  5. 【java毕业设计】基于java+Socket+Eclipse的坦克大战游戏设计与实现(毕业论文+程序源码)——坦克大战游戏

    基于java+Socket+Eclipse的坦克大战游戏设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+Socket+Eclipse的坦克大战游戏设计与实现,文章末尾附有本毕业设 ...

  6. 【java毕业设计】基于JAVA+JSP+strust2的电子政务网设计与实现(毕业论文+程序源码)——电子政务网

    基于JAVA+JSP+strust2的电子政务网设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于JAVA+JSP+strust2的电子政务网设计与实现,文章末尾附有本毕业设计的论文和源码下 ...

  7. 基于python的个人博客系统的设计开题报告_个人博客设计实现开题报告

    现在的毕业设计的开题报告是很难写吗,以个人博客设计为课题的开题报告怎么写?看下文是yjbys小编搜集整理的关于开题报告的相关资料,希望对大家有所帮助! 1本课题所涉及的问题在国内(外)的研究现状综述: ...

  8. 基于python的个人博客系统的设计开题报告_基于SSM的个人博客系统设计开题报告...

    本 科 毕 业 设 计(论文)开 题 报 告 题  目:基于SSM的个人博客系统设计与实现 专题题目(若无专题则不填): 本课题来源及研究现状: 关于博客的未来:在创办了博客中国(blogchina) ...

  9. 【java毕业设计】基于java+swing+Eclipse的推箱子游戏设计与实现(毕业论文+程序源码)——推箱子游戏

    基于java+swing+Eclipse的推箱子游戏设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+swing+Eclipse的推箱子游戏设计与实现,文章末尾附有本毕业设计的论文 ...

最新文章

  1. nodejs pm2使用
  2. Node.js复制/删除服务器端文件到指定目录文件夹下,并且预判是否存在该目录,如果没有,则递归创建该文件夹目录
  3. 本科-人工智能模拟卷
  4. “神经网络”的逆袭:80年AI斗争史
  5. docker 推送到本地仓库_Docker_学习笔记系列之仓库
  6. android 自定义正方形 绕中心点旋转
  7. 【Linux部署】【elasticsearch-6.4.3 单机版】【不能以root用户运行es 及 max_map_count 问题解决】(含 安装包+分词插件 云盘资源)
  8. 单身的原因终于找到了!原来是这几个......
  9. 怎么用计算机打分数,电脑excel中分数怎么打出来(图解excel分数输入法)
  10. spring的动态代理,碰到了一个类型转换的问题:java.lang.ClassCastException: com.sun.proxy.$Proxy16 cannot be cast to com.
  11. 资深系统管理员给Linux/Unix新人们的建议
  12. jbpm视频教程全集下载【21讲完整】
  13. SpringBoot 下 Mybatis 的缓存
  14. bash快捷建-光标移到行首、行尾等
  15. 史密斯圆图串并联口诀_最近终于把阻抗匹配和史密斯圆图搞懂了,总结了一下!...
  16. 网络安全/渗透测试工具AWVS14.7下载
  17. word 插入图片偏右问题
  18. leetcode 5855. 找出数组中的第 K 大整数(C++、java、python)
  19. 公司如何做好网页设计?
  20. postman时间参数化

热门文章

  1. 谈谈企业信息化 一种比较简单、灵活的产品物料多单位实现方案
  2. igxe本地机器人怎么用_IGXE自售机器人第四批申请开启
  3. rtthread 线程
  4. granfana密码重置
  5. Java学习——逻辑运算、双分支结构(if\else)
  6. ActionScript 大型网页游戏开发
  7. 计算机硬盘无法启动怎么办,电脑硬盘不读盘无法开机怎么办
  8. 如何搞好公司和员工的关系一:不要试图和下属做朋友
  9. js中对特殊字符进行转义
  10. 工业4.0:换热站最酷设计—— Web SCADA 工业组态软件界面