解释spring,struts,hibernate优缺点

解释spring,struts,hibernate优缺点

Struts优点:对视图层进行封装 更好的分离视图层和控制层 对数据进行封装
缺点: 1 、转到展示层时,需要配置forward,每一次转到展示层,相信大多数都是直接转到jsp,而涉及到转向,需要配置forward,如果有十个展示层的jsp,需要配置十次struts,而且还不包括有时候目录、文件变更,需要重新修改forward,注意,每次修改配置之后,要求重新部署整个项目,而tomcate这样的服务器,还必须重新启动服务器,如果业务变更复杂频繁的系统,这样的操作简单不可想象。现在就是这样,几十上百个人同时在线使用我们的系统,大家可以想象一下,我的烦恼有多大。2 、Struts 的Action必需是thread-safe方式,它仅仅允许一个实例去处理所有的请求。所以action用到的所有的资源都必需统一同步,这个就引起了线程安全的问题。 3、 测试不方便. Struts的每个Action都同Web层耦合在一起,这样它的测试依赖于Web容器,单元测试也很难实现。不过有一个Junit的扩展工具Struts TestCase可以实现它的单元测试。 4、 类型的转换. Struts的FormBean把所有的数据都作为String类型,它可以使用工具Commons-Beanutils进行类型转化。但它的转化都是在Class级别,而且转化的类型是不可配置的。类型转化时的错误信息返回给用户也是非常困难的。 5、 对Servlet的依赖性过强. Struts处理Action时必需要依赖ServletRequest 和ServletResponse,所有它摆脱不了Servlet容器。 6、 前端表达式语言方面.Struts集成了JSTL,所以它主要使用JSTL的表达式语言来获取数据。可是JSTL的表达式语言在Collection和索引属性方面处理显得很弱。 7、 对Action执行的控制困难. Struts创建一个Action,如果想控制它的执行顺序将会非常困难。甚至你要重新去写Servlet来实现你的这个功能需求。 8、 对Action 执行前和后的处理. Struts处理Action的时候是基于class的hierarchies,很难在action处理前和后进行操作。 9、 对事件支持不够. 在struts中,实际是一个表单Form对应一个Action类(或DispatchAction),换一句话说:在Struts中实际是一个表单只能对应一个事件,struts这种事件方式称为application event,application event和component event相比是一种粗粒度的事件。 
Spring优点: 用依赖注入模式大幅度的减少了程序之间的耦合性 并很好的实现了各种JAVA的设计模式 强制使用者养成用接口编程的习惯
缺点: 使用人数不多、jsp中要写很多代码、控制器过于灵活,缺少一个公用控制器
Hibernate: 用操作对象的方式操作数据库 将对数据库的操作面向对象化 并对一些数据库操作进行了封装
缺点: 它限制您所使用的对象模型。(例如,一个持久性类不能映射到多个表)其独有的界面和可怜的市场份额也让人不安,尽管如此,Hibernate 还是以其强大的发展动力减轻了这些风险。其他的开源持久性框架也有一些,不过都没有 Hibernate 这样有市场冲击力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/399129.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java单例模式的七种写法_Java设计模式之单例模式的七种写法

什么是单例模式?单例模式是一种常见的设计模式,单例模式的写法有很多种,这里主要介绍三种: 懒汉式单例模式、饿汉式单例模式、登记式单例 。单例模式有以下特点:1、单例类只能有一个实例。2、单例类必须自己创建自己唯…

在Hadoop集群上,搭建HBase集群

(1)下载Hbase包,并解压:这里下载的是0.98.4版本,对应的hadoop-1.2.1集群 (2)覆盖相关的包:在这个版本里,Hbase刚好和Hadoop集群完美配合,不需要进行覆盖. 不过这里写了个覆盖的脚本,可以留着备用. find -name hadoop*jar | sed s/2.2.0/2.3.0/g | sed s/.\///g > f.log rm .…

java js跳出循环_[Java教程]js循环的总结

[Java教程]js循环的总结02016-10-07 15:00:14js原生的循环有两种&#xff0c;一般的for循环和for...in循环。还有一种常用jQuery.each()循环。一. js原生循环a. for循环&#xff0c;代码如下&#xff1a;var myArray [1,2,3];for (var i 0; i < myArray.length; i) {conso…

Beta版本冲刺

1.凡事预则立&#xff0c;在Beta开始前&#xff0c;以小组为单位&#xff0c;在敏捷冲刺前发布一篇博客&#xff0c;描述&#xff1a; a. 下一阶段需要改进完善的功能&#xff1a; 无 b. 下一阶段新增的功能 修改密码功能 管理员功能 生成表格的优化 c. 需要改进的团队分工&…

Struts2国际化

一&#xff1a;简单理解 国际化简称i18n&#xff0c;其来源是英文单词 internationalization的首末字符i 和n。18为中间的字符数。 随着全球经济的一体化&#xff0c;软件开发者应该开发出支持多国语言、国际化的Web应用。对于Web应用来说&#xff0c;同样的页面在不同的语言环…

NOI经验谈

对于NOI来说&#xff0c;甚至比硬实力更加重要。我觉得一场考试这么几件事要做&#xff1a;看题&#xff0c;选题&#xff0c;分析&#xff0c;编码&#xff0c;调试&#xff0c;测试&#xff0c;骗分。 1、看题 拿到试卷以后的第一件事就是看题。看题不是看小说&#xff0c;要…

ReactiveCocoa源码拆分解析(四)

&#xff08;整个关于ReactiveCocoa的代码工程可以在https://github.com/qianhongqiang/QHQReactive下载&#xff09; 上一章节简要的说明了如何实现的热信号。但是像那么写&#xff0c;貌似不是非常优雅。这一章节我们会把冷热信号转换写的跟ReactiveCocoa一样优雅。 Reactive…

用Emacs编写mybatis

<?xml version"1.0" encoding"utf-8"?> 用Emacs编写mybatis用Emacs编写mybatis Table of Contents 1. 效果图2. 配置1 效果图 2 配置 现在web开发&#xff0c;最流行的orm框架非mybatis莫属了&#xff0c;它功能强大&#xff0c;编写简单灵活&…

lambda显式声明返回值

10.21 编写一个lambda&#xff0c;捕获一个局部int变量&#xff0c;并递减变量值&#xff0c;直至它变为0.一旦变量变为0&#xff0c;再调用lambda应该不再递减变量。lambda应该返回一个bool值&#xff0c;指出捕获的变量是否为0. #include<iostream> #include<algori…

【Codeforces Round #452 (Div. 2) C】 Dividing the numbers

【链接】 我是链接,点我呀:) 【题意】 在这里输入题意 【题解】 n为偶数。 l 1, r n (l,r)放在一组 l,r-- 新的l,r放在另外一组 直到l1r 这个时候,判断两组的和,如果一样的话,分散在两组 差为1否则差为0n为奇数 l 2,r n (l,r)放在一组 l,r-- 新的l,r放在另外一组 直到l1r…

java中reject方法作用_Java BindingResult.rejectValue方法代碼示例

本文整理匯總了Java中org.springframework.validation.BindingResult.rejectValue方法的典型用法代碼示例。如果您正苦於以下問題&#xff1a;Java BindingResult.rejectValue方法的具體用法&#xff1f;Java BindingResult.rejectValue怎麽用&#xff1f;Java BindingResult.r…

java方法参数

Java程序设计语言总是采用值调用。也就是说&#xff0c;方法得到的是所有参数的一个拷贝&#xff0c;特别是方法不能修改传递给它的任何参数变量的内容。 基本类型参数 1&#xff09;X被初始化为percent值的一个拷贝&#xff1b; 2&#xff09;X被乘以3等于30。但是percent仍然…

SaltStack源码分析之:master端执行salt模块大致流程

2019独角兽企业重金招聘Python工程师标准>>> ##JOB执行流程 先看下官网对于master端的工作流程的介绍&#xff1a; The Salt master works by always publishing commands to all connected minions and the minions decide if the command is meant for them by ch…

myecplise新建Maven项目Filter选什么,使用myeclipse建立maven项目

myecplise新建Maven项目Filter选什么 使用myeclipse建立maven项目 1234567分步阅读maven是管理项目的&#xff0c;myeclipse是编写代码的。第一次写项目都要配置好多东西&#xff0c;很麻烦&#xff0c;now 来看看怎样新建一个maven项目。 工具/原料 myeclipsemaven方法/步骤 1…

python参数传递时不构造新数据对象_关于函数的参数传递(parameter passing),以下选项中描述错误的是_学小易找答案...

【单选题】下面代码的输出结果是: a [] for i in range(2,10): count 0 for x in range(2,i-1): if i % x 0: count 1 if count 0: a.append(i) print(a)【单选题】Python3.0正式发布的年份是【单选题】以下选项中,对于函数的定义错误的是【单选题】关于函数的参数传递(pa…

关于TCP/IP与数据传输

一、TCP/IP的具体含义&#xff1a; 从字面意思来讲&#xff0c;很多人会认为TCP/IP是指TCP与IP这两种协议。有时确实也可以说是这两种协议&#xff0c;但是大部分情况下所说的是利用IP进行通信时所必须用到的协议群的统称。具体来说IP,ICMP,TCP,UDP,FTP以及HTTP等都属于TCP/IP协…

geohash php_空间索引-geohash算法实现

算法简介geohash是实现空间索引的一种算法,其他实现空间索引的算法有:R树和其变种GIST树、四叉树、网格索引等算法基本原理geohash算法将地球理解为一个二维平面&#xff0c;将平面递归分解成更小的子块&#xff0c;每个子块在一定经纬度范围内拥有相同的编码&#xff0c;这种方…

ActiveReports 报表控件V12新特性 -- 新增JSON和CSV导出

ActiveReports 报表控件V12新特性 -- 新增JSON和CSV导出 ActiveReports 是一款专注于 .NET 平台的报表控件&#xff0c;全面满足 HTML5 / WinForms / ASP.NET / ASP.NET MVC / WPF 等平台下报表设计和开发工作需求&#xff0c;作为专业的报表工具为全球超过 300,000 开发人员提…

Codeforces Round #112 (Div. 2)---A. Supercentral Point

Supercentral Pointtime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputOne day Vasya painted a Cartesian coordinate system on a piece of paper and marked some set of points (x1, y1), (x2, y2), ..., (xn,…