简述Struts和Struts2的区别?
参考答案:
Struts和Struts2都是基于MVC(Model-View-Controller)设计模式的Java Web框架,但它们在许多方面存在明显的差异。
- 风险控制与社区支持:Struts是一个老牌框架,应用广泛,有着良好的群众基础和社区支持,使用它开发的风险较小,成本较低。然而,Struts2相对较新,社区支持不如Struts,使用它开发项目的风险系数可能更大,用人成本可能更高。
- Action实现类:在Struts中,Action实现类需要继承Action抽象类。而在Struts2中,Action实现类既可以实现Action接口,也可以实现其他接口,这为定制服务提供了可能性。
- 线程安全:Struts是基于单例模式的,需要开发者自行保证线程安全。而Struts2为每个请求产生单独的实例,因此不存在线程安全的问题。
- Servlet依赖:在Struts中,由于Action的execute()方法需要HttpServletRequest和HttpServletResponse,因此它对ServletAPI存在依赖。而Struts2在这方面的依赖较少。
- 请求参数封装:Struts使用ActionForm来封装用户请求,并且需要开发者继承ActionForm基类。然而,这会导致需要开发大量的ActionForm。相比之下,Struts2在请求参数的处理上更为灵活和高效。
- 前端控制器:Struts的前端控制器是一个Servlet,名为ActionServlet。而Struts2的前端控制器是一个filter,在struts2.0中叫FilterDispatcher,在struts2.1中叫StrutsPrepareAndExecuteFilter。
总的来说,Struts和Struts2在风险控制、Action实现类、线程安全、Servlet依赖、请求参数封装以及前端控制器等方面存在显著的差异。开发者在选择使用哪个框架时,需要根据项目的具体需求和团队的实际情况进行综合考虑。