cms真实问题的来源以及模拟解决方案
先来描述一下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 ...
随机推荐
- 【记录】从客户端()中检测到有潜在危险的 Request.Path 值。
从客户端()中检测到有潜在危险的 Request.Path 值. 错误信息: Application_Error Url: www.cnblogs.com/%E5%BA%.... UserAgent: ...
- VS Extract Method
前言 看重构6.4Replace Temp with Query(以查询取代临时变量)中提到Replace Temp with Query往往是你运用Extract Method之前必不可少的一个步骤 ...
- 【JUC】JUC线程池框架综述
一.前言 在分析完了JUC的锁和集合框架后,下面进入JUC线程池框架的分析,下面给出JUC线程池的总体框架,之后再逐一进行分析. 二.JUC线程池框架图 说明:从上图可知,JUC线程池框架中的其他接口 ...
- Android应用底部导航栏(选项卡)实例
现在很多android的应用都采用底部导航栏的功能,这样可以使得用户在使用过程中随意切换不同的页面,现在我采用TabHost组件来自定义一个底部的导航栏的功能. 我们先看下该demo实例的框架图: 其 ...
- 资源等待类型sys.dm_os_wait_stats
动态管理视图 sys.dm_os_wait_stats 返回执行的线程所遇到的所有等待的相关信息.可以使用该聚合视图来诊断 SQL Server 以及特定查询和批处理的性能问题. 列名 数据类型 说 ...
- maven 插件
一直没注意看maven执行过程中的打印日志,今天突然发现一段话,说编译以及resource未指定编码,默认gbk.于是,百度了设置编码的方式: <plugin> <groupId&g ...
- jQuery-1.9.1源码分析系列(二)jQuery选择器续1
在分析之前说一点题外话. ownerDocument和 documentElement的区别 ownerDocument是Node对象的一个属性,返回的是某个元素的根节点文档对象:即document对 ...
- null和undefined的一些区别
读了阮一峰的博客,自己总结一下,便记录一篇博客 在javacript的基本类型中,有2种基本类型,只有1个值,便是null和undefined,都表示的是"无".在一定程度上是相等 ...
- 如何设计一个优秀的API(转载)
最近在整理框架的一些 API,觉得很有必要总结一下 API 兼容性的设计.下图是我自己当下的一些总结,慢慢维护: 网上搜索了一下,一个多月前,“标点符”已经发布了下面这篇文章,觉得写得非常不错,转载于 ...
- Microsoft Visual Studio 2008 未能正确加载包“Visual Web Developer HTML Source Editor Package” | “Visual Studio HTM Editor Package”
在安装Microsoft Visual Studio 2008 后,如果Visual Studio 2008的语言版本与系统不一致时,比如:在Windows 7 English System 安装Vi ...