一个纯Servlet和JSP实现的小博客系统的开发心得

心得

在学了一点SSH框架之后,我就一直在想,如果完全不用任何框架,只使用Servlet和JSP的相关知识,来实现一个小系统,会是什么样的。这就是这个小程序,一个简单甚至简陋的博客系统,功能很简单,只有用户登录、注册,发表、修改文章,发表评论,用户信息这几个功能。不过只用Java EE的这些内容来做,还是稍微有些难度的。

dao

我遇到的第一个问题就是dao的编写。用惯了Hibernate的对象关系映射之后,要我手动编写SQL语句,然后将结果集转换成一个集合,工作量还是挺大的。由于一开始忘了JDBC的内容了,我会说我最开始的写法是用Statement拼接SQL字符串吗?然后有一天我又重看了一下JDBC的知识,才想起来有一个PreparedStatement,可以参数化查询。

用JDBC的话,就避免不了SQLException。由于Java有受检测的异常这么一个蛋疼的东西,所以怎么处理SQLException就是一个大问题了。我的办法很简单,把它包装成运行时异常在抛出,这样就不用强制捕获异常了。不然的话,要么出一堆try-catch块,要么在方法上添加异常声明,然后像病毒一样一层一层蔓延,最后所有方法上都有了一堆异常声明。

测试

一开始我的打算是没有测试的。因为这么一个小系统的话,不测试应该也没什么问题。结果证明我的想法很天真。除非代码的逻辑只有1+1=2,否则肯定会有出错的地方。这样的话,测试就是必须的。不过我就写了dao的单元测试,因为这个地方的错误和可改进之处是最多的。单元测试还帮我测试出了一个爆栈问题:查找文章的时候需要获取文章对应的评论,查找评论的时候需要查找所在的文章,由于我的错误,结果它们互相调用,然后内存就爆了。

单例

我们知道,有些对象在一个程序中只要一个就够了,比如数据库连接,项目配置等等。这些对象在实现的时候就需要设置成单例模式。但是单例模式实现起来还是有点麻烦。所以我直接偷懒,全弄成静态字段了。当然Java实践告诉我们这样做是不对的。这方面做得最好的就是Spring了,Spring的依赖注入是我见过最好的解决办法了。如果需要一个对象,直接注册成Spring Bean即可,默认情况下自动就是单例模式,这样我们在开发的时候完全不用考虑这些麻烦的问题了。

性能

说实话我一开始没想到我这个系统居然还会有性能问题。大部分性能问题都是代码实现的问题。一开始我没添加任何评论,所以性能问题没表现出来。后面我准备做分页功能,添加了200条评论。然后性能问题就出现了。做一次查询居然要30多秒。在一番研究之后,我发现就是我代码实现的问题,直接调用SQL查询就行了,我却先做了一个全表查询,然后用lambda表达式自己做的查询。修改之后查询速度基本变快了很多,但是还是需要1秒左右。这个地方还是需要继续改进。

显示

我这个项目应该算是一个MVC架构的吧。模型层是几个实体类,控制器是Servlet,显示层是JSP。默认情况下JSP还是不够用,所以我用到了JSTL作补充。虽然这两个东西应该都算过时了吧。用JSTL做显示确实方便很多,不用再写一堆循环代码了。但是JSTL局限性也挺大,有些地方不太灵活,页面上标签写的非常长。现在用其它模板引擎比如Thymeleaf的应该更流行吧?

前端

现在前端基本必用的就是Bootstrap和jQuery了吧。由于我想实现Markdown功能,还用到了Marked。前端相比与后端来说难度要低一些,基本上就是复制粘贴样例代码,然后改成自己的就行了。这没啥好说的。当然我只会一点基本的功能。像Csdn博客这样能做到博客和预览滚动同步我还暂时没啥想法。

开发和调试

因为我是个更新强迫症,所以几乎所有东西我都用的最新的。JDK用的1.8,集成开发环境用的Intellij IDEA。MySQL没有用最新的驱动,因为最新驱动有Bug,只能用稳定版的5.1。做查询的时候我还用了一点Lambda表达式,配合流类库非常好用。这里我要着重说一下Intellij IDEA,真的非常赞,所有学Java的人都应该用一下Intellij IDEA,各方面真的几乎完爆Eclipse,只能说谁用谁知道。Intellij IDEA的调试功能也非常强大,帮我减少了不少时间。

总结

自己做一个相对完整的系统还是稍微有点难度的。以前我最多就是照着人家的例子,自己写几行代码,能跑起来就完事了。现在自己写一个小系统,需要考虑的东西太多了。而且项目规模一旦变大,维护起来就麻烦了。我这仅仅十来个JSP,但是出了问题要在这十来个JSP和十来个Servlet中查找和调试,还是挺麻烦的。总的来说,这是一次很好的提高。以前看到的那些空洞的项目实践,自己来上一遍,才能深有体会。由于没用什么框架,所以代码写的还是比较乱,而且Servlet和JSP确实不适合实现大型项目,做起来太麻烦。这个项目仅仅是一个起点,之后我会逐渐用框架替代自己的实现,然后再添加新功能。

开发程序其实是一件很有成就感的事情。当自己的程序成功运行起来的时候,心情真的非常爽快。而且在自己的程序中,我就是主宰,想做什么就可以做什么。所以,我把默认难看的404页面换成了一张萌妹子。你们自己去看吧。

已知问题

  • 显示文章的时候XML代码块不能显示文字。
  • 显示用户页面的时候有性能问题,显示需要1秒左右。
  • 有时候样式文件失效,页面变回默认状态,原因不明。

源码下载地址:Csdn下载有兴趣的同学可以看看。

CSDN代码地址(会逐渐迭代版本):https://code.csdn.net/u011054333/simple-blog/tree/master

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页