Struts2项目实例

 

Java web动态编程技术,经历了Model1和Model2时代。

Model1时代:整个Web应用几乎全部由JSP页面组成,JSP页面接收处理客户端请求,对请求处理后直接做出响应,用少量的JavaBean来处理数据库连接访问等操作。Model1的局限性非常明显,JSP页面同时担任View和Controller两种角色,将页面表现和逻辑处理混杂在一起,代码重用性极低,增加了扩展和维护难度。

Model2时代:已经采用了MVC的设计。在Model2架构中,Servlet作为Controller,负责接收用户请求,只包含控制逻辑,然后调用后端来进行具体的逻辑处理。最后转发到相应的JSP页面负责显示。

Model2(Servlet+JSP+JavaBean项目示例

Struts是开源软件,使开发者能更深入的了解其内部实现机制。Struts开放源码框架的创建是为了使开发者在构建基于java Servlet和JavaServer Pages(jsp)技术的Web应用时更加容易。Struts框架为开放者提供了一个统一的标准框架,通过使用Struts作为基础,开发者能够更专注于应用程序的商业逻辑。Struts框架本身是使用Java Servlet和JavaServer Pages技术的一种Model-View-Controller(MVC)实现。

Struts2是基于MVC设计模式的流行和成熟的Web应用程序框架。Struts2并不只是Struts 1下一个版本,但它是一个完全重写的Struts架构。Struts2使用拦截器作为增强处理,以用户的逻辑控制器为目标,创建一个控制器代理,控制器代理回调业务控制器的execute方法处理用户请求,该方法的返回值决定struts2将怎样的视图资源呈现给用户。

Struts2 框架特性

  • POJO形式和POJO动作 - 已经摆脱了Struts2的动作表单的Struts框架的一个组成部分。Struts2可以使用任何的POJO接收的形式输入。同样的,你现在可以看到任何POJO的Action类。
  • Tag支持 - Struts2的形式提高了标签的新标签让开发人员写更少的代码。
  • AJAX支持- Struts2中已经认识到了Web2.0技术,并整合到产品中AJAX支持创建AJAX的标签,该功能非常相似的标准Struts2的标签。
  • 容易整合 - 与其他框架如Spring,Tiles和SiteMesh的整合是现在更容易与各种集成Struts2。
  • 模板支持 - 支持生成使用模板。
  • 插件支持 - 核心Struts2行为,可以加强和扩大使用插件。大量的插件可供Struts2。
  • 概要分析- Struts2的提供集成的配置,调试和分析应用程序。此外,Struts还提供了内置调试工具的帮助下,集成调试。
  • 标签修改容易 - 在Struts2标签标记,可以调整使用FreeMarker模板。这并不需要JSP或Java知识。基本的HTML,XML和CSS知识是不够的修改的标签。
  • 提升更少的配置 - Struts2的促进更少的配置与用于各种设置的帮助下,使用默认值。你没有的东西,除非它偏离由Struts2的默认设置的配置。

Struts2请求生命周期:

  • 用户发送请求到服务器,用于请求对某些资源。
  • 核心控制器StrutsPrepareAndExecuteFilter根据请求决定是否调用相应的Action。
  • Struts2内置的拦截器链会自动对请求进行一些操,如验证,文件上传等。
  • 回调Action的execute方法,执行操作。
  • 配置拦截器做任何后期处理,如果需要的话。如Action会将处理结果存入stack Context中,并返回字符串,核心控制器根据字符串跳转到指定的视图资源。
  • 视图资源会读取Stack Context中的信息,向用户生成响应数据。

Struts2的优点:

  • Struts2实现MVC模式,结构清晰,使开发者只关注业务逻辑的实现。
  • Struts2有丰富的标签可以用,Struts的标记库(Taglib),能大大提高开发效率。
  • Struts2的页面导航。页面导航将是今后的一个发展方向,事实上,页面导航使系统的脉络更加清晰。通过一个配置文件,即可把握整个系统各部分之间的联系,这对于后期的维护有着非常大的好处。尤其是当新一批开发者接手这个项目时,这种优势体现得更加明显。
  • Struts2提供Exception处理机制。
  • Struts2数据库链接池管理。
  • Struts2支持I18N。

Struts2的缺点:

  • 转到展示层时,需要配置forward。每一次转到展示层,大多数都是直接转到jsp,而涉及到转向,需要配置forward。每次修改配置之后,都需要重新部署整个项目,并且如果使用tomcat服务器,还必须重新启动服务器。
  • Struts2的Action必需是线程安全,它只允许一个实例去处理所有的请求。所以action用到的所有的资源都必需统一同步,这个就引起了线程安全的问题。
  • 测试不方便。Struts2的每个Action都同Web层耦合在一起,这样它的测试依赖于Web容器,很难实现单元测试。不过Struts2 JUnit插件的StrutsTestCase可以实现它的单元测试。
  • 类型的转换。Struts2的FormBean把所有的数据都作为String类型,它可以使用工具Commons-Beanutils进行类型转化。但转化都是在Class级别,而且转化的类型是不可配置的。类型转化时的错误信息返回给用户也是非常困难的。
  • 对Servlet的依赖性过强。Struts2处理Action时必需要依赖ServletRequest和ServletResponse,所有它摆脱不了Servlet容器。
  • 前端表达式语言方面。Struts2集成了JSTL,所以它主要使用JSTL的表达式语言来获取数据。可是JSTL的表达式语言在Collection和索引属性方面处理显得很弱。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AngeliaZheng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值