Struts2Struts2和Struts1的不同
发布网友
发布时间:2024-09-25 20:18
我来回答
共1个回答
热心网友
时间:2024-10-04 00:02
Struts2与Struts1的主要差异体现在以下几个方面:
Action 类
在Struts1中,Action类需要继承一个抽象基类,这可能导致使用抽象类编程而非接口的问题。相比之下,Struts2更为灵活,Action类可以选择性地实现Action接口,或者直接作为具有execute标识的POJO对象使用。Struts2提供了ActionSupport基类,以支持常见的接口实现,而Action接口并非强制要求。
线程模式
Struts1的Action类采用单例模式并需保证线程安全,这*了其功能并要求开发者在开发时特别注意。每个请求需要共享Action实例,可能导致资源同步问题。而在Struts2中,每个请求会生成Action对象的实例,消除了线程安全问题,且不会影响性能和垃圾回收。
Servlet 依赖
Struts1的Action依赖Servlet API,execute方法会直接接收HttpServletRequest和HttpServletResponse。相比之下,Struts2 Action不再直接依赖于容器,可以在不依赖容器的情况下被单独测试,但仍可通过需要访问原始请求和响应。
可测性
测试Struts1的Action时,执行方法暴露了Servlet API,增加了测试的复杂性。Struts2通过初始化、设置属性和调用方法进行测试,依赖注入使其更为便捷。Struts2的测试环境提供了更佳的灵活性。
捕获输入
Struts1通过ActionForm捕获输入,所有ActionForm需要继承基础类,可能导致冗余。Struts2直接使用Action属性作为输入,支持rich对象类型,简化了taglib与POJO对象的交互。
表达式语言
Struts1使用JSTL EL,对集合和索引属性支持有限。Struts2则支持更强大的OGNL,提供了更丰富的对象图遍历能力。
扩展资料虽然Struts2号称是一个全新的框架,但这仅仅是相对Struts 1而言。Struts 2 与Struts 1相比,确实有很多*性的改进,但它并不是新发布的新框架,而是在另一个赫赫有名的框架:WebWork基础上发展起来的。