前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一个纯Servlet和JSP实现的小博客系统的开发心得

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

作者头像
乐百川
发布2022-05-05 19:41:46
5510
发布2022-05-05 19:41:46
举报

心得

在学了一点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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-01-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 心得
    • dao
      • 测试
        • 单例
          • 性能
            • 显示
              • 前端
              • 开发和调试
              • 总结
              • 已知问题
              相关产品与服务
              云数据库 MySQL
              腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档