回想起之前写的项目,内容管理系统,写的第一个项目,现在对于该项目做简单的总结。需求(到底要完成什么样的功能)→实现思路(运用什么框架或者技术)→代码实现。内容管理系统先分为后台管理系统和前台展示。
后台管理
后台管理,对数据库中的数据进行增删改查,只允许管理员进入。所以要有登录,配置拦截器,判断是否有登录信息,在没有登录信息的时候拦截,重定向到登录界面,存在登录信息的时候,才可以进入后台管理界面。
登录信息放在session作用域中。 该登录信息在session中存放时间为多久?暂时看以下三个方面。
在tomcat中的web.xml中有<session-config><session-timeout>30</session-timeout></session-config>配置,即默认时间为30分钟,我们也可以在项目中的web.xml文件中再配置以覆盖默认值。
而session是一次会话,即打开浏览器到关闭浏览器之间的一段时间,当我们关闭浏览器之后session中的数据也自然不存在。
我们也可以在后端用Java代码操作session,用session.invalidate();销毁session中的数据。
记住我,每一次登录都要自己手动填写用户名和密码,有些麻烦。希望该登录页面可以记住上一次成功登录时的用户名和密码。要有一个参数信息让后端判断,该参数信息就不能在放在session中,因为session中的数据一旦关闭浏览器就不复存在,此时要将记住我的参数信息存放在cookie中,可以设置它的存活时间,关闭浏览器并不会影响cookie中信息的存在。 设置cookie的路径,可以直接设置到项目的根路径中,然后添加到浏览器。取消记住我,就是将cookie中相应的信息重置即可,直接修改存活时间为0,原地死亡。
登录之后,内容管理界面,有许多的模块。这许多的模块在页面上展示的时候有相同的部分,所以进行公共资源抽取,然后再在相应的页面去引用公共资源即可。
页面上的数据是从数据库查来的,要在加载页面之时就看到数据。需要页面加载事件发送异步请求,这样就要写JavaScript代码,js代码太多,所以进行js抽取,再在该页面引入相应的js。
数据显示到页面上,以什么样的方式呢?表格,又嫌弃自己写的表格很丑,所以导入gridmanager表格插件。既然我们选择了gridmanager表格插件,那么我们要按照人家定的规矩来,返回的数据格式为totals、data。当我们进行添加数据,修改数据,想要弹出模态框来操作而不是跳转到其他页面,此时借鉴bootstrap框架,找到自己喜欢的示例,将代码拷贝过来修修改改。在添加数据的时候,又觉得纯粹的文本输入并不能足够形象地表达,此时又借鉴了ueditor,富文本编辑器。里面可以添加图片,表情等等。
上传图片视频等文件时,在后端要用mutipartfile来接收,记得在applicationContext-mvc.xml文件中配置上传解析器。说起来现在用的ssm集成,即spring,springmvc,mybatis三大框架。
各个模块之间都是增删改查,有许许多多的重复代码。先复制,再修改,在修改的时候就一定注意要彻底,否则一个属性,一个单词没有改过来,即使没有报错,也会出现一些奇怪的现象。
前台展示
前台的展示是公开的,所以在配置拦截器的时候,不要拦截前台的请求,前台查询最好也不要走后台的请求。好奇地点开了一篇文章,结果它半天才显示出来,这些数据是从数据库查来的。当有许多的人同时访问,每一个请求都要去从数据库查询,拖慢速度,用户体验不好,对于服务器也是负担,在高并发的情况下,也可能崩溃。所以用页面静态化技术,以空间换时间,每次后台管理系统添加或修改一篇文章的时候,就生成一个静态页面存放在项目里面,当前台点击该文章的时候就访问的是静态的html页面,不再去数据库中查找数据。借鉴FreeMarker,给它一个模板ftl文件,路径,数据,生成文件的后缀名即可。
一个项目只有一个管理员有些分身乏术,此时想把数据库中的用户信息下载下来,又想把Excel这类文件中的用户信息到入数据库。数据的导入导出,借鉴POI。
在代码实现的过程中难免出现些bug,在浏览器合理利用F12排bug,在eclipse合理地观察控制台的异常信息。修改代码之后常常清除浏览器缓存,重启eclipse,有时甚至重启一下电脑。