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跟它无关,它才不依赖。

你可能感兴趣的:(struts2)