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

一、大宇想说的话

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

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

       虽然此毕设倾注了大宇的努力,但由于大宇水平有限、时间仓促,代码中难免有写的不好的地方,请各位看官谅解。如果遇到问题或有意见或者建议,欢迎在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之路----盘点从学校走向公司的点点滴滴

 

  

 

 

 

 

.

 

posted @ 2022-07-17 12:15  小大宇  阅读(137)  评论(0编辑  收藏  举报