先来描述一下cms问题的来源:
- 初始需求:
在开发的过程中有这样的一个处理时间显示的需求:
如果时间小于1分钟显示秒,
如果时间小于1小时显示分钟,
如果时间小于1天显示小时,
如果大于1天显示日期。 - 需求演化一:
每一个显示时间的地方后台开发人员都要编写一个处理这样的一个程序。
于是想起在后台创建工具类解决这个问题。 需求演化二:
但是使用工具类又带来了另外一个问题,每次都要取出这个字段显示调用工具类
然后再塞进去,这样造成代码重复臃肿。- 需求演化三:
后台开发不想用代码实现就可以替换成功,换句话说显示和业务不要耦合在一起。 - 需求演化四:
如果整站出现类似于时间这种字符串处理的地方很多该如何处理?? 最终需求:
到这里最终需求就确定啦,相同概念的字符串在页面展示时不希望展示的逻辑每个人都关注,有框架统一提供实现该如何实现???
分析问题:
我们需要确定在哪里进行字符串替换比较合适?
无论是json还是ftl还是jsp的字符串替换我们都必须在没有真正返回给浏览器之前来做字符串替换的工作。
大致思路:
发送一个http请求经过解析域名找到对应的tomcat服务,由tomcat决定调用哪一个应用程序响应,
然后应用程序找到对应的jsp或者html,我们通过某种方式获取到jsp或者html的内容通过规则匹配
就可以进行字符串替换。
其实,最简单的方式我们可以创建一个filter,在url请求过来的时候在doFilter()方法中根据某种url规则(比如以.jsp结尾的请求)
获取请求的文件(jsp,ftl,html), 然后读取文件内容进行匹配,最终可以完成替换。
我们要确定哪些内容需要被替换也就是说我们需要一个标识?
定义一个规则凡是符合规则的就进行字符串替换工作,
可以定义一个特殊的标签:比如:
那我们就规定在jsp或者ftl中以"<cms"开头的标签都进行字符串替换。
那么多种类的cms我们怎么确定使用哪一个cms处理类进行处理呢??
中的xxx就是这个处理的类的ioc容器的key,我们可以通过xxx作为
key获取ioc容器中的cms处理器的实例,然后调用这个处理器的处理方法完成字符串替换。
如何让使用者用的简单??
我们可以抽取一个cms处理器接口,提供一个针对这个接口的抽象实现类,让其处理相同逻辑的实现并约定好必需要实现的方法,
使用者可以通过实现这个抽象类进行字符串替换逻辑编写。
替换相同意义的字符串,那我们怎么确定哪些是相同意义的呢??
这个由使用者去做,去抽象。
如何在框架上进行集成??
在框架上使用这个的时候需找两个点:
1.框架在视图层有没有提供可以让我们对url访问的资源(文件)进行处理的入口?
2.框架有没有可以让我们的cms相关处理类放到ioc容器管理的方法??
cms真实问题的来源以及模拟解决方案的更多相关文章
-
CMS收集器产生的问题和解决方案
垃圾收集器长时间停顿,表现在 Web 页面上可能是页面响应码 500 之类的服务器错误问题,如果是个支付过程可能会导致支付失败,将造成公司的直接经济损失,程序员要尽量避免或者说减少此类情况发生. 提升 ...
-
[转]使用CMS垃圾收集器产生的问题和解决方案
在之前的一篇文章<CMS vs. Parallel GC>里通过实验的方式对比了并行和并发GC的优缺点,在文章结尾提到,CMS并行GC是大多数应用的最佳选择,然而, CMS并不是完美的,在 ...
-
强化学习(十八) 基于模拟的搜索与蒙特卡罗树搜索(MCTS)
在强化学习(十七) 基于模型的强化学习与Dyna算法框架中,我们讨论基于模型的强化学习方法的基本思路,以及集合基于模型与不基于模型的强化学习框架Dyna.本文我们讨论另一种非常流行的集合基于模型与不基 ...
-
“云中论道”之——使用开源技术和Azure公有云服务快速搭建云端IoT解决方案(上)
“云中论道”技术课堂第一课开讲啦!微软各路技术咖们齐聚一堂,为大家带来干货不断!作为“云中论道“课堂的开课之作,我们首先邀请到了微软Azure专家级的架构师:槐长清,他为我们带来了关于“使用开源技术和 ...
-
剖析Unreal Engine超真实人类的渲染技术Part 2 - 眼球渲染
目录 三.眼球渲染 3.1 眼球的构造及理论 3.1.1 眼球的构造 3.1.2 眼球的渲染理论 3.2 眼球的渲染技术 3.2.1 角膜的半透和光泽反射 3.2.2 瞳孔的次表面散射 3.2.3 瞳 ...
-
AI解决方案:边缘计算和GPU加速平台
AI解决方案:边缘计算和GPU加速平台 一.适用于边缘 AI 的解决方案 AI 在边缘蓬勃发展.AI 和云原生应用程序.物联网及其数十亿的传感器以及 5G 网络现已使得在边缘大规模部署 AI 成为可能 ...
-
react-native 常见问题 及 解决方案
一.报错 Warning:Navigator:isMounted is deprecated. Instead, make sure to clean up subscriptions and pen ...
-
Nginx反向代理后应用程序获取客户端真实IP
Nginx反向代理后,Servlet应用通过request.getRemoteAddr()取到的IP是Nginx的IP地址,并非客户端真实IP,通过request.getRequestURL()获取的 ...
-
cms系统视频分享
cms_001-CMS系统功能需求简介-1.avicms_002-如何采用用例分析方法来理解需求-1.avicms_003-后台管理系统用例-1.avicms_004-实现验证码的初步思路-1.avi ...
随机推荐
-
论文笔记之: Person Re-Identification by Multi-Channel Parts-Based CNN with Improved Triplet Loss Function
Person Re-Identification by Multi-Channel Parts-Based CNN with Improved Triplet Loss Function CVPR 2 ...
-
(centos)linux下访问双系统windows7文件系统
fdisk -l 无法挂载 NTFS格式的分区:mount: unknown filesystem type ‘ntfs’. 问题: # mount –t ntfs /dev/sdb1 ...
-
线程操作API
线程操作API 1.currentThread 2.getId() .getName().getPriority().getStart.isAlive().isDaemon().isInterrupt ...
-
Linux内核中影响tcp三次握手的一些协议配置
在Linux的发行版本中,都存在一个/proc/目录,有的也称它为Proc文件系统.在 /proc 虚拟文件系统中存在一些可调节的内核参数.这个文件系统中的每个文件都表示一个或多个参数,它们可以通过 ...
-
[CocoaPods]如何使用CocoaPods插件
CocoaPods +插件 CocoaPods是一个由极少数维护者运营的社区项目,需要维护大量的表面区域.可以肯定地说CocoaPods永远不会支持Xcode支持的每个功能,即使这样,团队也必须对许多 ...
-
vue2.0学习笔记之路由(二)路由嵌套
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
-
CSS只是进化的一部分
Bert Bos是一位计算机科学家,他也是CSS的创始人之一.在CSS的发展过程中,Bos是最早与Håkon Wium Lie(CSS之父)合作的人之一.在1996年,他加入了World Wide W ...
-
Python描述器引导(转)
原文:http://pyzh.readthedocs.io/en/latest/Descriptor-HOW-TO-Guide.html 1. Python描述器引导(翻译) 作者: Raymond ...
-
GC详解及Minor GC和Full GC触发条件总结
GC,即就是Java垃圾回收机制.目前主流的JVM(HotSpot)采用的是分代收集算法.与C++不同的是,Java采用的是类似于树形结构的可达性分析法来判断对象是否还存在引用.即:从gcroot开始 ...
-
TabActivity 、fragemnt+fragment 和 Fragment+Viewpager 优缺点
1 TabActivity : 1 过时了 . 2 activity . 是作为android的四大组件... 重量级的家伙 ViewGroup : 特别麻 ...