[思考] 闲时随笔一篇
最近又一个项目快要 Launch 真是够忙的,还不容易熬到周末,终于能轻松一下 ... 下午打了会儿球,身子终于舒展了点,晚上闲暇,写篇日志练练笔杆子也不错。
说到最近网上广泛流传着的,都是关于 LAMP 的好消息,PHP 占到 WEB 开发语言平台总数的67.54%,MYSQL 也在所有开发者使用的数据库中获得了25%的市场份额,以前在国内被视为“稀有物种”的 PHP 程序员现在也渐渐多了起来,前一段在和一位印度的同行聊天,得到的信息也是 "PHP & .NET is Booming in india Now" ... 一时之间 LAMP 阵营可谓风光无限 ...
说实话,如果让我选择 WEB 开发平台,我相信我会也更倾向于 LAMP 。基于 C 语言的特性已经使其具备了高效的潜质,再加上支持页面模板技术的 Smarty 引擎、提供强大代码重用能力的 PEAR 类库、可替代循环的正则表达式等,使其在服务器端执行效率得到了加强。其应用范围之广、适应能力之强、运行效率之高保证了 PHP 成为 WEB 开发领域里最稳定高效的轻骑兵。另外,对 MYSQL5 和数十种主流数据库的强大支持,极大丰富的函数库支持,以及日益完善的文档和社区支持,越来越多优秀项目涌现 ... 看到这些就不难理解 "Why LAMP is Booming" 了 ...
回顾一下这几年的开发经历,Perl、JAVA、PHP 甚至 Ruby on Rails 这些工具里,如果综合考虑 WEB 项目开发的效率、成本、周期、质量多个方面,PHP 无疑是不二的选择。然而,我绝不是说其他的语言就不重要了。这些都是非常优秀的开发工具,各有千秋,Perl 的精炼语法、Java 的架构思想、RoR 的敏捷易用 ... 若能将他们融会贯通、学以致用,你会看到更新的编程境界,还有很长的路要走啊 ...
另外一件很令人兴奋的事情就是 Struts2.0 的问世,试用了一下,觉得真的是一个非常棒的开发框架,虽说很多人说他只是 Webwork2.3 而已,但是我要说,对于我们开发人员来说拥有这么强大而周到的开发框架是多么幸福的事情,它是如此的 Elegant And Powerful ! 以下是 Struts2.0 比 Struts1.x 的对比文档:
Action 类:
• Struts1要求Action类继承一个抽象基类。Struts1的一个普遍问题是使用抽象类编程而不是接口。
• Struts 2 Action类可以实现一个Action接口,也可实现其他接口,使可选和定制的服务成为可能。Struts2提供一个ActionSupport基类去实现 常用的接口。Action接口不是必须的,任何有execute标识的POJO对象都可以用作Struts2的Action对象。
线程模式:
• Struts1 Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。单例策略限制了Struts1 Action能作的事,并且要在开发时特别小心。Action资源必须是线程安全的或同步的。
• Struts2 Action对象为每一个请求产生一个实例,因此没有线程安全问题。(实际上,servlet容器给每个请求产生许多可丢弃的对象,并且不会导致性能和垃圾回收问题)
Servlet 依赖:
• Struts1 Action 依赖于Servlet API ,因为当一个Action被调用时HttpServletRequest 和 HttpServletResponse 被传递给execute方法。
• Struts 2 Action不依赖于容器,允许Action脱离容器单独被测试。如果需要,Struts2 Action仍然可以访问初始的request和response。但是,其他的元素减少或者消除了直接访问HttpServetRequest 和 HttpServletResponse的必要性。
可测性:
• 测试Struts1 Action的一个主要问题是execute方法暴露了servlet API(这使得测试要依赖于容器)。一个第三方扩展--Struts TestCase--提供了一套Struts1的模拟对象(来进行测试)。
• Struts 2 Action可以通过初始化、设置属性、调用方法来测试,“依赖注入”支持也使测试更容易。
捕获输入:
• Struts1 使用ActionForm对象捕获输入。所有的ActionForm必须继承一个基类。因为其他JavaBean不能用作ActionForm,开发者经常创建多余的类捕获输入。动态Bean(DynaBeans)可以作为创建传统ActionForm的选择,但是,开发者可能是在重新描述(创建)已经存在的JavaBean(仍然会导致有冗余的javabean)。
• Struts 2直接使用Action属性作为输入属性,消除了对第二个输入对象的需求。输入属性可能是有自己(子)属性的rich对象类型。Action属性能够通过web页面上的taglibs访问。Struts2也支持ActionForm模式。rich对象类型,包括业务对象,能够用作输入/输出对象。这种ModelDriven 特性简化了taglib对POJO输入对象的引用。
表达式语言:
• Struts1 整合了JSTL,因此使用JSTL EL。这种EL有基本对象图遍历,但是对集合和索引属性的支持很弱。
• Struts2可以使用JSTL,但是也支持一个更强大和灵活的表达式语言--"Object Graph Notation Language" (OGNL).
绑定值到页面(view):
• Struts 1使用标准JSP机制把对象绑定到页面中来访问。
• Struts 2 使用 "ValueStack"技术,使taglib能够访问值而不需要把你的页面(view)和对象绑定起来。ValueStack策略允许通过一系列名称相同但类型不同的属性重用页面(view)。
类型转换:
• Struts 1 ActionForm 属性通常都是String类型。Struts1使用Commons-Beanutils进行类型转换。每个类一个转换器,对每一个实例来说是不可配置的。
• Struts2 使用OGNL进行类型转换。提供基本和常用对象的转换器。
校验:
• Struts 1支持在ActionForm的validate方法中手动校验,或者通过Commons Validator的扩展来校验。同一个类可以有不同的校验内容,但不能校验子对象。
• Struts2支持通过validate方法和XWork校验框架来进行校验。XWork校验框架使用为属性类类型定义的校验和内容校验,来支持chain校验子属性
Action执行的控制:
• Struts1支持每一个模块有单独的Request Processors(生命周期),但是模块中的所有Action必须共享相同的生命周期。
• Struts2支持通过拦截器堆栈(Interceptor Stacks)为每一个Action创建不同的生命周期。堆栈能够根据需要和不同的Action一起使用。
Well, Good ... 真没想到,收笔之时已经写了这么多,伸个懒腰,心情不错,接下来还是去洗个热水澡吧, 真是美妙的周末啊 Relax Yourself as much as u like : )
[思考] 闲时随笔一篇相关推荐
- java——自己实现基础的线程池及带有任务数过多拒绝策略、线程池销毁、自动扩充线程数量及闲时自动回收线程等操作的改进版线程池
1. 实现第一版基础的线程池 1.1 首先我们定义一个线程池类ThreadPool,然后线程池有一个容器存放我们创建的线程,另一个容器则是存放当前线程池需要处理的任务队列,线程容器用ArrayList ...
- phpcms内容页 ( $inputtime ) 去掉发布时间的时分秒 - 代码篇
phpcms内容页 ( $inputtime ) 去掉发布时间的时分秒 - 实例如下 原来的时间格式是 {$inputtime} ,页面显示为 1970-01-01 21:20:35 这样似的格式. ...
- 柴柴随笔第二篇:当肌肉有了记忆能力——“做中学”
当肌肉有了记忆能力 2016.12.16 20155236 范晨歌 "做中学"的感悟 学习需要思考和实践同时进行,了解原理及其行为背后的理论支撑. 技能是分层次的,不要止步于高级初 ...
- 《Head First Java》的思考总结:第三篇
前言: 今天要分享的是关于 <Head First Java>这本书的读后感,这本书有点小厚差不多有七百页左右,所以我花了几乎整个国庆的时间去阅读,学习.读完之后发现,受益颇多.正如书名所 ...
- 一个通用的单元测试框架的思考和设计02-设计篇
第一节里介绍了我们框架设计的目标,这篇主要介绍的是这个框架主要的设计思路和关键技术点 1.如何扩展junit的功能,使junit在启动时可以做一些我们定制化的功能? junit4建立了以Runner为 ...
- 闲鱼python_自动化篇 | 你想要的闲鱼日常操作,Python 给你实现了
image 阅读文本大概需要 8 分钟. 1.目 标 场 景 前篇文章讲了如何在 iOS 端使用 Airtest 实现自动化的操作,本篇将继续带大家做 iOS 端的自动化项目. 如果你经常用闲鱼,应该 ...
- 八人过河思考策略_在思考云时平衡策略与战略
八人过河思考策略 这一直是一个问题-那些将IT体系结构视为可以为单个应用程序或小型系统域提供服务的事物. 如今,许多组织无法选择一种云技术来为整个企业IT服务. 他们处理一系列具有一次性云架构的战术应 ...
- 【Kafka】kafka AdminClient 闲时关闭连接
1.概述 原文:https://www.cnblogs.com/allenwas3/p/10289039.html AdminClient 类提供了创建.删除 topic 的 api. 在项目中创建了 ...
- 搜索android RAM ROM SD区别时找到一篇分析不错的文章
最近入手一部Android手机,使用后发现系统总会在后台自动启动一些程序,而这些程序都是平时不怎么用的.做过实验,刚开机时系统只有5个程序启动,RAM剩余288M,待机半个小时候有10个程序被启动,R ...
- 今天逛博客时看到一篇不错的C语言知识点总结,借来看看
总体上必须清楚的: 1)程序结构是三种: 顺序结构 .选择结构(分支结构).循环结构. 2)读程序都要从main()入口, 然后从最上面顺序往下读(碰到循环做循环,碰到选择做选择),有且只有一个ma ...
最新文章
- 小程序在wxml里转数字_2020年利用名片小程序开启数字化营销的方法
- 关于“INS-40922 Invalid Scan Name – Unresolvable to IP address”
- linux java连接redis_java 连接linux的redis 报错。但是linux 客户端可以连接redis
- 网络Socket,ServerSocket
- Acrobat Pro DC 教程,如何发送电子签名文件?
- Android动画总结
- PT100热电阻简单介绍
- OSPF之Stub区域
- Spark 用代码实现求分位数Percentile(Quentile)的方法
- nodebb部署开发记录
- libxml2的参考手册
- NoSQL从小白到码神 火推08
- 多线程是啥?有啥用?(上)
- Python回归预测建模实战-随机梯度下降法预测房价(附源码和实现效果)
- 100条超搞笑的“雷人”QQ/MSN 签名
- vscode虚拟环境运行文件报错ImportError: DLL load failed: 找不到指定的模块的问题
- 增删改查最终总结—2.1.1(单表-增删改查)
- 市场调研-全球与中国导电硅橡胶管市场现状及未来发展趋势
- e人e本t6驱动 android,支持发送彩信 E人E本T6系统1.2版发布
- w10虚拟服务器,利用win10自带虚拟机功能轻松打造家用nas
热门文章
- Win7开机自动拨号上网
- 2021年最新独立版橙色去水印微信小程序-更新2021.8.31
- Meta元宇宙副总裁离职了...『Go语言圣经』终于汉化啦;德云社失业警告!AI要说相声了;一键就能AI绘图的网站;前沿论文 | ShowMeAI资讯日报
- 2年工作经验杂谈(java开发)
- 计算机共享输入命令是什么意思,笔记本电脑共享WiFi命令怎么使用
- 进入IT行业,你后悔过吗?
- Power BI——关系函数(RELATED和RELATEDTABLE)
- 云服务器复现PointRCNN代码踩坑总结
- 基于python3的百度街景地图爬虫
- Winsock API编程之UDP小结