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 ...
随机推荐
- 【记录】ASP.NET XSS 脚本注入攻击
输入进行 Html 转码: HttpUtility.HtmlEncode(content); 输入保留 Html 标记,使用 AntiXSS 过滤: Install-Package AntiXSS M ...
- golang操作文件
1.读取文件信息: /* 读取文件信息 */ func readFile(path string) string { fi, err := os.Open(path) if err != nil { ...
- WebWorker的importScripts方法
简述 在<JavaScript高级程序设计(第三版)>中,提到WebWorker的importScripts方法是异步执行的,然而在 另一本书<Javascript权威指南>中 ...
- spring笔记--事务管理之声明式事务
事务简介: 事务管理是企业级应用开发中必不可少的技术,主要用来确保数据的完整性和一致性, 事务:就是一系列动作,它们被当作一个独立的工作单元,这些动作要么全部完成,要么全部不起作用. Spring中使 ...
- 用纯JS做俄罗斯方块 - 简要思路介绍(1)
大家都知道俄罗斯方块是一款大众化的游戏了,我很小的时候就玩过,今年已经25岁了,可以说俄罗斯方块确实是历史悠久,做俄罗斯方块是我上个星期开始的想法.也许是由于自己从来没有写过这种东西吧,所以有生疏.代 ...
- SqlServer基础之(触发器)
概念: 触发器(trigger)是SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触 ...
- SQL Server里的文件和文件组
在今天的文章里,我想谈下SQL Server里非常重要的话题:SQL Server如何处理文件的文件组.当你用CREATE DATABASE命令创建一个简单的数据库时,SQL Server为你创建2个 ...
- 前端必须了解的布局常识:普通流(normal flow)
目录 一.概述 二.块级元素和内联元素 常见的块级元素 BFC 常见的行内元素 IFC 三.哪些情况会脱离普通流 浮动 绝对定位 固定定位 display:none 四.总结 五.参考资料 一.概述 ...
- 11.Configure Many-to-Many(配置多对多关系)【Code-First系列】
现在学习EF Code-First多对多的配置. 这里我们举例:学生和班级实体,一个学生可以选修多个课程,多个学生也可以选修同一个课程. 一.使用数据注解特性,配置多对多的关系 using Syste ...
- C#~异步编程续~.net4.5主推的await&async应用
返回目录 之前写过两篇关于异步编程的文章,详细可以进入C#~异步编程和C#~异步编程在项目中的使用 .net的各个版本都有自己主推的技术,像.NET1.1中的委托,.NET2.0中的泛型,.NET3. ...