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 ...
随机推荐
- linux中断与异常
看了<深入理解linux内核>的中断与异常,简单总结了下,如果有错误,望指正! 一 什么是中断和异常 异常又叫同步中断,是当指令执行时由cpu控制单元产生的,之所以称之为异常,是因为只有在 ...
- linux下的常用命令
1 fg切换前后台作业 将后台作业转换为前台作业,”fg %作业号“ 2 stty改变和打印终端行设置 tostop 阻止后台作业写终端,stty -a显示终端的所有选项 3 uname查看机子信息 ...
- spring boot源码分析之SpringApplication
spring boot提供了sample程序,学习spring boot之前先跑一个最简单的示例: /* * Copyright 2012-2016 the original author or au ...
- JS详细教程(下)
五.数组 数组是数据的有序列表,每个元素在数组中都有数字位置编号,也就是索引.JS中的数组是弱类型,每一项都可以保存任何类型的数据. 创建数组 ①使用Array构造函数 var arr=new Arr ...
- Kooboo CMS - @Html.FrontHtml().HtmlTitle() 详解
首先我们找到这个类. 这个类有如下的方法: #region Title & meta [Obsolete("Use HtmlTitle")] public IHtmlStr ...
- 百度地图、ECharts整合HT for Web网络拓扑图应用
前一篇谈及到了ECharts整合HT for Web的网络拓扑图应用,后来在ECharts的Demo中看到了有关空气质量的相关报表应用,就想将百度地图.ECharts和HT for Web三者结合起来 ...
- React Native系列文章
React Native版本升级的正确姿势 WebView JS与RN进行通讯 用API网关把API管起来 React-Native 给客户端来个「同音词模糊搜索」 30天React Native从零 ...
- httpRuntime与ASP.NET 运行时及IIS处理模型
配置 ASP.NET HTTP 运行时设置,以确定如何处理对 ASP.NET 应用程序的请求,配置节及其描述如下所示. <httpRuntime executionTimeout="1 ...
- C#编程总结--总目录
C#编程总结--总目录 多年的C#实战经历,希望通过一个系列课程对C#编程做系统总结. 总结过去,展望未来.新的一年,新的征程,新的开始! 希望我们在2014梦想成真,马到成功! 1.C#编程总结(一 ...
- C# 特性学习之一、CallerMemberName、CallerFilePath和CallerLineNumber
在开发中经常会写个公有静态类记录日志,如下: /// <summary> /// Writes the error. /// </summary> /// <param ...