UJCMS采用前后端分离的开发模式,即后端提供API接口,前端(Vue)调用API接口。
前台网站除了以API提供接口外,还提供了传统的Freemarkder模板引擎生成页面的方式,有利于搜索引擎优化(SEO)。
后端主要技术栈:
- Spring Boot:提供开箱即用的Spring功能
- Spring MVC:MVC框架
- Spring Security:安全组件
- MyBatis:持久化框架
- MyBatis Pagehelper:MyBaties分页插件
- Lucene:全文检索组件
- Flowable:工作流引擎
- Liquibase:数据库版本管理组件
- Freemarker:前台页面生成模板引擎
- Caffeine:Java缓存组件
后端分层结构
后端采用三层结构:Controller
-> Service
-> Mapper
Controller用于响应客户端的请求,Service用于处理业务逻辑,Mapper则操作数据库。
- Controller对应包名:
com.ujcms.cms.*.web.backendapi
com.ujcms.cms.*.web.api
com.ujcms.cms.*.web.frontend
- Service对应包名:
com.ujcms.cms.*.service
- Mapper对应包名:
com.ujcms.cms.*.mapper
- Domain(实体类)对应包名:
com.ujcms.cms.*.domain
完整流程
SpringSecurity(权鉴过滤器)
-> Controller(接收请求)
-> Service(业务逻辑)
-> Mapper接口(数据库操作接口)
-> mapper.xml(数据库操作接口对应的SQL语句)
后台接口
提供给管理后台的接口,包名为com.ujcms.cms.*.web.backendapi
。
该部分接口提供给后台前端,用于管理系统。使用JWT认证模式。
前台接口
提供给网站前台的接口,包名为com.ujcms.cms.*.web.api
。
该部分接口提供给前台前端(即网站前端),用于普通用户浏览网站。
支持两种认证模式,一种是传统的Session认证模式(以/frontend
地址开头),一种是JWT认证模式(以/api
地址开头)。
前台页面标签
网站前台使用API获取数据对搜索引擎不是很友好,在有搜索引擎优化(SEO)需求的情况下,可以使用传统的模板引擎,由服务器通过Freemarker模板引擎生成HTML。
此时需要使用系统中提供的自定义Freemarker标签获取后台数据,而不是用API获取后台数据。
包名为com.ujcms.cms.*.web.directive
。
前台页面Controller
区别与前后端分离的前台(通过API获取数据),通过传统模板引擎生成的页面,也需要一个入口地址(即Controller)。
由前台页面Controller接收到请求后,返回到模板页面,模板页面再通过系统提供的自定义Freemarker标签获取数据,生成HTML后返回给浏览器。
包名为com.ujcms.cms.*.web.frontend
。
源码目录结构说明
- src
- main
- java
- com/ujcms/cms
- core
- domain:实体类
- generator:生成功能(包括静态页生成,全文索引生成)
- listener:监听类(包括数据删除的监听)
- lucene:全文检索功能
- mapper:MyBatis Mapper Java 文件
- security:安全相关功能
- service:服务层功能
- support:各种支持类
- web
- api:前台API接口
- backendapi:后台API接口
- directive:前台Freemarker自定义标签
- frontend:前台页面Controller
- support:Web支持类(包括web拦截器等)
- ContextConfig.java:Context配置类
- LuceneConfig.java:全文索引配置类
- ShiroConfig.java:Shiro安全配置类
- TaskExecutorConfig.java:任务执行器配置类
- Application.java 启动类
- com/ujcms/util:公共工具类
- resources
- com/ujcms/cms/core/mapper:MyBatis Mapper XML 配置文件。
- db
- changelog:数据库表结构更新日志文件。
- data.mysql.sql:数据库初始化数据SQL脚本。
- application.yaml:程序配置文件。包括数据库URL、数据库用户名、数据库密码等信息。
- messages.properties:国际化资源文件。
- webapp:
- cp:后台前端页面。
- templates:网站前台模板。
- uploads:用户上传文件。
- WEB-INF/lucene:全文检索索引文件。
- .editorconfig:设置编辑器文件的格式,如缩进方式、最大行数等。
- .gitignore:设置不需要提交到git管理的文件和目录。
- CHANGELOG.md:版本更新日志。
- LICENSE:许可协议。
- gulpfile.js:前台构建文件。具有拷贝jquery、bootstrap等文件至前台模板目录
/src/main/webapp/template/1/default/_files
等功能。 - package.json:前台模板依赖的js、css组件,如jquery、bootstrap等。
- pom.xml:Maven配置文件。