使用语言
- 后端:java
- 前端:HTML+javascript
使用框架
- 后端:springboot+springmvc+mybatis
- 前端:semantic ui+jQuery
模板引擎
- thymeleaf
插件
- 编辑器 Markdown
- 内容排版 typo
- 动画 animate
- 代码高亮 prism
- 平滑滚动 jquery.scrollTo
- 目录生成 Tocbot
- 分页 pageHelper
- 音乐器 aplayer
技术点
- 标签的多对多查询使用中间表存储blogId与tagId,将blog表、tag表、type表连接;
- 使用resultMap的子查询解决pageHelper的一对多查询bug;
- 评论以及留言采用递归算法查询所有子级回复,通过父子昵称进行递归;
- 采用拦截器,拦截/admin下的session中没有user的所有请求;
- mvc三层架构,当增加内容时,从dao层往上加,一些附加方法加在service层
细节
- resultMap的column与sql语句中的别名对应,否则查询不到相应数据;
- resultMap的column存在多个相同名称时会发生冲突,导致查询失败,应该使用别名来避免;
- 推荐使用resultMap而不是resultType;
- 在service层给所有增删改增加事务注解;
- 当删除blog时同时删除对应的comment表下的数据,避免储存无效数据;
- 当修改或删除blog时应同时删除中间表中的对应数据,避免存储大量重复数据或无效数据;
- 配置文件中的数据库配置需要设置serverTimezone=Asia/Shanghai,否则数据库存储的时间比实际晚8小时;
- 配置文件中数据库的密码应和云端的一致,否则数据库连接失败;
- 部署网站到云服务器时,官方推荐使用jar包方式,我个人尝试了war包,发现运行程序有某些问题,比如Markdown插件的一些js,css文件无法加载,可能因为服务器的tomcat和springboot的不太一致;
- 后台管理页面的url应与普通页面的一致,都是www开头或都是域名方式,否则,普通页面获取不到管理页面session数据;
部署云服务器
- 设置云服务器安全组和防火墙
- 宝塔面板需要在远程登录云端并执行相应的linux代码安装宝塔面板,并获取宝塔面板url以及初始账户信息,在宝塔面板的安全栏处开放与关闭云端的端口
- 通过宝塔面板数据库一栏处修改数据库的root密码
- 通过宝塔面板安全栏处设置ssh登录方式
- 打jar包
<!-- 这里打成war包 若打jar,需将war改为jar -->
<packaging>jar</packaging>
- 解析域名,我选的是A类型,添加两个,分别是www @
- 申请ssl证书,springboot选择tomcat Jks类型,并在配置文件中配置,端口选择https默认的443,这样以后不需要加端口号就能访问
server:
port: 443
ssl:
key-store: classpath:证书名称
key-store-password: xxx
key-store-type: JKS
- 将jar包上传到云服务器根目录,在根目录下运行终端,执行一下代码
lsof -i:443
kill <pid>
nohup java -jar xxx.jar
其中lsof查询那些进程占用了443端口,并使用kill结束改进程;使用nohup进行后台运行