struts1和struts2的区别

1.struts1是单实例多线程编程模式,有安全问题;struts2是多实例单线程。

2.struts1是侵入式的即依赖框架,使用了框架大量的API,struts2是非侵入式的。

3.struts1的action类必须直接或间接继承Action接口,struts2的action类可以是普通的JavaBean。

4.struts1中使用actionForm不能直接传递给DaO层,必须进行相应转换,struts2没有actionForm.

5.struts2测试简单,进行简单测试无需启动Web服务器。

6.struts1的表现层只支持jsp技术,struts2支持jsp技术还支持支持FreeMarker、Velocity等模板技术

所谓的单实例多线程,即一个实例处理多个请求.


单实例通俗的讲就是一个对象的实例在整个应用生命周期里只生成一次,所有的请求(方法调用)都是由这个实例处理。

多实例就是一个对象在应用里生成多个实例,所有的请求可能有不同的实例进行处理。


上述提到线程安全的?
借用一位仁兄博客里的话:”如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。
故名思议:
通常是指线程间,操作共用的变量,不会造成混乱。加了 synchronized 是让线程锁定、别的线程等待


Struts2是多线程的,Struts2与容器无关,当一个请示过来时都会创建一个实例,

这里的实例不是ActionServlet,Struts2中创建的实例是我们自己创建的普通的类。


多线程是说一个程序内部同时执行多个操作 比如 你在使用一个界面来对数据库进行操作 当你点击了commit或者其他命令时,这时候程序会开始执行数据库操作命令 假如 这个执行时间很长 那么

1,单线程的情况:程序会等待数据库操作执行完 然后才能执行其他操作

2,多线程的情况:程序会有一个线程去执行数据库操作,但同时,你还可以进行其他操作


打个比喻:单实例就像你买火车票时只有一个售票员,所有旅客买票都得通过他。多实例就是有多个售票员,可以向不同的售票员请求服务。


所以总结如下:
Struts1要求Actio继续一个类。

Struts2仅需要Action实现一个接口,或者Action类都不要,仅仅需要有一个包含execute方法的普通简单java类即可。

Struts1中 Action是单线程的,也就是说线程共享的,既然线程共享,那当然是不安全的啦。

Struts2 Action对象为每一个请求产生一个实例,不存在线程共享,所以也就不存在线程安全问题。

Struts1中Action离不开Servlet API,

Struts2中的Action可以只需要一个简单的java类就行了,API不API跟它无关,它才不依赖。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1 在Action实现类方面的对比:Struts 1要求Action类继承一个抽象基类;Struts 1的一个具体问题是使用抽象类编程而不是接口。Struts 2 Action类可以实现一个Action接口,也可以实现其他接口,使可选和定制的服务成为可能。Struts 2提供一个ActionSupport基类去实现常用的接口。即使Action接口不是必须实现的,只有一个包含execute方法的POJO类都可以用作Struts 2的Action。 2 线程模式方面的对比:Struts 1 Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。单例策略限制了Struts 1 Action能做的事,并且要在开发时特别小心。Action资源必须是线程安全的或同步的;Struts 2 Action对象为每一个请求产生一个实例,因此没有线程安全问题。 3 Servlet依赖方面的对比:Struts 1 Action依赖于Servlet API,因为Struts 1 Action的execute方法中有HttpServletRequest和HttpServletResponse方法。Struts 2 Action不再依赖于Servlet API,从而允许Action脱离Web容器运行,从而降低了测试Action的难度。 当然,如果Action需要直接访问HttpServletRequest和HttpServletResponse参数,Struts 2 Action仍然可以访问它们。但是,大部分时候,Action都无需直接访问HttpServetRequest和HttpServletResponse,从而给开发者更多灵活的选择。 4 可测性方面的对比:测试Struts 1 Action的一个主要问题是execute方法依赖于Servlet API,这使得Action的测试要依赖于Web容器。为了脱离Web容器测试Struts 1的Action,必须借助于第三方扩展:Struts TestCase,该扩展下包含了系列的Mock对象(模拟了HttpServetRequest和HttpServletResponse对象),从而可以脱离Web容器测试Struts 1的Action类。Struts 2 Action可以通过初始化、设置属性、调用方法来测试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值