做这个在线投稿系统的时候,技术选型花了一些时间。最初考虑用SSH,但Struts2的配置和调试实在太繁琐了,后来转而看SpringMVC,轻量是轻量,可团队对MyBatis更熟悉,也希望能直接写SQL调优。最终选了SSM(Spring + SpringMVC + MyBatis),算是平衡了扩展性和上手难度。
整个项目前端用了Vue,配合Element UI做管理后台,前后端分离,接口通过JSON交互。下面聊聊几个关键的设计和实现点。
Web系统采用B/S架构,核心逻辑放在服务端,浏览器只负责展示。部署的时候只需要一台服务器,客户端零安装,维护起来省事。

数据库选了MySQL,免费、社区活跃、性能足够中小型项目用。它的架构(图2.2)简单清晰,默认InnoDB引擎处理日常事务完全够用。建表的时候注意字符集选utf8mb4,否则存emoji会报错。

管理后台的实现比较常规。一个典型的用户管理页面(图5.1),支持查询、新增、修改、删除,用户名支持模糊检索。当初做查询的时候,MyBatis的动态SQL用着很舒服,写标签就搞定了条件拼装。

编辑信息管理(图5.2)主要是对投稿内容的审阅流程,管理员可以修改或作废稿件。这部分权限控制要注意,只有审核角色才能操作,我们用Spring的拦截器实现,匹配URL路径,再查角色表,逻辑不复杂但容易漏测。

整个系统做下来,SSM在中小项目里确实灵活,前期多写几个配置文件,后期改动成本比SSH低很多。前端Vue工程化之后,打包部署也顺手,唯一遗憾的是最初没考虑移动端适配,后续迭代再补。


