先大致介绍下struts1和struts2

struts:过去最流行的web MVC组件,apache项目组的一个开源项目。

struts2:现在非常流行的web MVC组件,是apache用struts1和webwork组合出来的产品。

两者都是web MVC组件,利用这两个组件都可以比较方便地开发web项目。不过struts1毕竟是老组件,在人们开发过程中,发现了如下问题:

1.struts1支持的表现层技术太单一,就只有jsp。不支持freemaker、velocity等当前比较流行的页面技术。

2.struts1的Action与servlet API过于耦合,难以测试。这一点对于初学者来说可能没什么感觉,只有你用它开发过大型项目才知道。企业开发过程中,我们既要写正式代码,也要写相应的测试代码(即单元测试类,以此来保证代码是符合我们预期的),如果正式代码和servlet API耦合太深,会造成你的测试类难以编写,一旦离开web服务器就会难以测试。

3.struts1属于侵入式设计,也就是说,在你的代码里,除了你自己定义的类之外,还会包含struts1的API。倒不是说这样的设计有多么差,毕竟你用别人的组件,少不了会用到别人的API。只是这样的设计会影响代码的重用,如果需要重构,就会比较麻烦。

以上就是struts1的主要缺点,作为大改之后的struts2,对以上问题都做了改进:

1.struts2支持多种表现层技术,如freemaker、velocity都支持。

2.struts2中,Action不再与servlet API耦合(当然了,你希望在Action里使用servlet API也行),便于编写单元测试类。

3.Action不需要和struts2耦合,方便重用。

至于更详细的区别,网上很多,有些还用列表形式列出来了,我这里就不copy了。总之,虽然都叫struts,但是两者差别挺大的,设计思想都不一样。建议你运用这两个组件各自实现同一个小项目,自然就明白差别了。

struts2和1的区别的更多相关文章

  1. Struts2与Struts的区别

    Struts2与Struts的区别 从Struts2的发展过程来看,Struts2继承了Struts与WebWork的血脉,Struts2取两者之精华,形成新德框架,但是struts2还是更多的继承了 ...

  2. Struts1与Struts2的12点区别

    Struts1与Struts2的12点区别  1) 在Action实现类方面的对比:Struts 1要求Action类继承一个抽象基类:Struts 1的一个具体问题是使用抽象类编程而不是接口.Str ...

  3. Struts2和SpringMVC的区别

    简单谈一下Struts2和SpringMVC的区别,文章有所引用知乎所对应的答案数据,和所查看的其余资料数据,进行一个简单的汇总,后续查看时使用: 知乎解释链接为:https://www.zhihu. ...

  4. Struts2与Struts1的区别

    Struts2是基于WebWork的一个全新框架.不过有了Struts1的基础,学Struts2更方便.Struts2主要改进是取代了Struts1的Servlet和Action.Struts2的核心 ...

  5. Struts2和Spring MVC 区别 今天面试被问到了

    虽然说没有系统的学习过Spring MVC框架, 但是工作这么长时间, 基本上在WEB层使用的都是Spring MVC, 自己觉得Struts2也是一个不错的WEB层框架, 这两种框架至今自己还未有比 ...

  6. struts1和struts2和springMVC的区别和介绍

    MVC是web开发常用的模式,M即模型层(Model):主要由javabean来实现.V即视图层(View):主要由jsp.velocity.freemarker等.C即控制层(Controller) ...

  7. Struts2重新学习2之struts2和struts1的区别

    1) 在Action实现类方面的对比:Struts 1要求Action类继承一个抽象基类:Struts 1的一个具体问题是使用抽象类编程而不是接口.Struts 2 Action类可以实现一个Acti ...

  8. struts2与springmvc的区别

    1 机制不同 springmvc的入口是servlet,struts2的入口是filter,导致了二者的机制不同: 2 性能不同 spring会稍微比struts快.spring mvc是基于方法的设 ...

  9. Struts2跟SpringMVC的区别

    1. 拦截机制不同 Struts2是类级别的拦截,每次请求就会创建一个Action,和Spring整合时Struts2的ActionBean注入作用域是原型模式prototype,然后通过setter ...

随机推荐

  1. javascript 获取函数形参

    /** * 获取函数的形参个数 * @param {Function} func [要获取的函数] * @return {*} [形参的数组或undefind] */ function getFunc ...

  2. 使用CSS3+JQuery打造自定义视频播放器

    简介 HTML5的<video>标签已经被目前大多数主流浏览器所支持,包括还未正式发布的IE9也声明将支持<video>标签,利用浏览器原生特性嵌入视频有很多好处,所以很多开发 ...

  3. 【BZOJ】4873: [Shoi2017]寿司餐厅

    [题目]#2146. 「SHOI2017」寿司餐厅 [题意]给定n种寿司的代号,取区间[i,j]的寿司收益是d[i,j]和所有子区间的d,吃了c(c>0)种代号x的寿司的代价是mx^2+cx,给 ...

  4. 【CodeForces】960 F. Pathwalks 主席树+动态规划

    [题目]F. Pathwalks [题意]给定n个点m条边的有向图,可能不连通有重边有自环.每条边有编号 i 和边权 wi ,求最长的路径(可以经过重复节点)满足编号和边权都严格递增.n,m,wi&l ...

  5. webpack编译报错:Module not found: Error: Cannot resolve 'file' or 'directory' ./../../node_modules..

    在同事的mac电脑上,可以正常编译,拿到我这边就出错了(⊙﹏⊙) 好像是webpack在window下的一个bug,需要让 webpack 和你的项目保持在一个盘符下,参考. 解决方法: 修改conf ...

  6. 8、V模型、W模型、H模型

    软件测试&软件工程 ·软件测试与软件工程息息相关,软件测试是软件工程组成中不可或缺的一部分.·在软件工程.项目管理.质量管理得到规范化应用的企业,软件测试也会进行得比较顺利,软件测试发挥的价值 ...

  7. Python3 多进程

    多进程(multiprocessing)的用法和多线程(threading)类似,里面的函数也一样,start()为启动函数,join() 等待该进程运行结束,每一个进程也是由它的父进程产生 1.简单 ...

  8. MySQL删除数据几种情况以及是否释放磁盘空间【转】

    MySQL删除数据几种情况以及是否释放磁盘空间: 1.drop table table_name 立刻释放磁盘空间 ,不管是 Innodb和MyISAM ; 2.truncate table tabl ...

  9. elk系列4之kibana图形化操作【转】

    preface 我们都搭建了ELK系统,且日志也能够正常收集的时候,那么就配置下kibana.我们可以通过kibana配置柱状图,趋势图,统计图,圆饼图等等各类图.下面就拿配置统计图和柱状图为例,结合 ...

  10. libuv 一 环境搭建, hello TTY

    引言 - 一时心起, libuv linux 搭建 有一天突然想起来想写个动画. 找了一下 ui 库太大. 后面想起以前弄过的 libuv. 但发现 libuv 相关资料也很少. 所以就有了这些内容. ...