Java之旅Struts系列(4)——Struts2(精华)

2024-05-26 07:38

本文主要是介绍Java之旅Struts系列(4)——Struts2(精华),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  很多人都会文Struts2和Struts1的区别,讲完这篇文章相比大家对于Struts1和Struts2都能有一个理解。

  Struts1蓬勃发展的同时,也存在了一些问题,那就是侵入性的设计使得代码的复用性降低,为了能够应对这种情形,WebWork的出现将其在一定程度上得到了解决;新事物不断地崛起,为了给“老”的Struts1注入新的血液,Struts也在不断地发展。

  Struts分化出来两个框架,第一个是传统的Struts1与WebWork结合后的Struts2,另一个框架是Shale,这里不做详细的介绍,不是本篇的重点。

  Struts2虽然是在Struts1的基础上发展起来的,但是却是以WebWork为核心的,也就是说在原有的基础上注入的是新鲜血液WebWork的思想,Struts2与WebWork很像的,之前转载过一篇文章大家也可以看看:

http://blog.csdn.net/u010955843/article/details/48317587,Struts2是以WebWork为核心而非Struts1,并且看过WebWork再看Struts2会很容易的,Struts2不是Struts1的升级。

 1.      Struts2理论讲解

  流程解析


  与WebWork相似,Struts2同样使用了拦截器处理用户的请求,从而将用户的业务逻辑与Servlet API进行了分离。

  处理流程与WebWork相似,同样也会创建一个代理控制器,从而进行用户请求的相关处理,处理用户请求的时候回调业务逻辑控制器的execute方法,此时的核心控制器不同于WebWork,此时为FilterDispatcher,WebWork的为ServletDispatcher。

  处理流程是:浏览器发送客户的请求,比如/role_list.action等等,核心控制器(FilterDispatcher)进行相关的拦截并根据相关的请求调用合适的action,回调Action中的execute方法,该方法对用户的请求进行处理并且将相关的处理结果进行返回。

  Struts2的核心配置文件

  Struts2的核心配置文件是struts.xml,具体的配置如下图:


  这个示例中配置文件定义了两个action,不仅仅定义了action的实例并且将相应的处理结果也进行了定义也就是返回的视图名称与相应的视图资源进行了配置。

  表现在Result中指定了execute返回值与视图资源之间的映射关系。比如当执行退出action的时候,页面跳转的是欢迎界面action。

  其中name指定的是execute中返回的字符串的名字,而type指定转向的资源类型,可以是jsp页面,当然也可以是另一个action。

  全局属性文件struts.properties


  Struts.deMode=false:开发模式下设为true,这样可以打印出更详细的错误信息;

  Struts.configuration.xml.reload=true,在开发阶段设置为true,这样是支持热部署的。

  关于其他还有的更加详细的其他配置:

  http://www.cnblogs.com/yangy608/archive/2010/11/08/1871962.html

  标签库

  与WebWork以及Struts1存在相似之处,Struts2也存在丰富的标签库,Struts标签的使用可以最大限度的减少页面代码的书写。


  这样的对比是不是很明显呢?前面是使用标签库的,后者是我们普通的html拼写的表单。

并且Struts是支持我们前面说的强大表达式语言OGNL的。


  第一Action实例没有继承或者实现任何的接口和类,是一个完全的pojo对象,使得代码的复用性很好,第二就是execute方法没有依赖于任何的Struts API以及Servlet API,并且返回结果是一个字符串,可以映射到任何的视图,同样可以是另一个action实例。

  关于实战,我们下篇再讲,讲到这里大家想必对于Struts1和Struts2以及WebWork有了一定的了解了,下面我们来看看他们之前的区别和联系。

 2.      Struts1和Struts2的区别

  (1)       代码复用性方面:Struts1是继承Action基类的,也就是我们常说的使用抽象类编程而不是接口编程,不同于可以实现Action的接口当然也可以不实现此接口,同样也是可以实现其他的接口的。再者Struts1严重依赖于Servlet API,因为execute方法中就含有httpServletRequest等等,这样使得其依赖于web容器,而Struts2是不依赖于Servlet API的,这样使得其可以脱离web容器进行运行。

  (2)       表单参数的封装:我们知道Struts1获取表单的参数是根据ActionForm类来获取的表单的参数,并且这个ActionForm实例必须继承ActionForm,普通的javaBean对象是无法充当ActionForm的。也就是说我们如果有大量的表单页面就需要建立大量的ActionForm类并且需要在配置文件中进行配置,显然这也是不现实的;但是在Struts2里面Action封装了这些请求参数,此外如果我们的表单参数特别多的话我们可以使用ModelDriven模式,与Struts1的ActionForm相似,将表单的参数进行封装,让action实现ModelDriven接口即可获取封装好的model对象。

  (3)       数据显示:Struts1将处理结果返回绑定到jsp页面,而Struts2使用的值栈技术,可以通过标签库进行相应值的访问。

 3.      小结

  讲解完理论,我们来讲解Struts2的应用,不要走开,精彩继续~

这篇关于Java之旅Struts系列(4)——Struts2(精华)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1003847

相关文章

Spring boot整合dubbo+zookeeper的详细过程

《Springboot整合dubbo+zookeeper的详细过程》本文讲解SpringBoot整合Dubbo与Zookeeper实现API、Provider、Consumer模式,包含依赖配置、... 目录Spring boot整合dubbo+zookeeper1.创建父工程2.父工程引入依赖3.创建ap

SpringBoot结合Docker进行容器化处理指南

《SpringBoot结合Docker进行容器化处理指南》在当今快速发展的软件工程领域,SpringBoot和Docker已经成为现代Java开发者的必备工具,本文将深入讲解如何将一个SpringBo... 目录前言一、为什么选择 Spring Bootjavascript + docker1. 快速部署与

Spring Boot spring-boot-maven-plugin 参数配置详解(最新推荐)

《SpringBootspring-boot-maven-plugin参数配置详解(最新推荐)》文章介绍了SpringBootMaven插件的5个核心目标(repackage、run、start... 目录一 spring-boot-maven-plugin 插件的5个Goals二 应用场景1 重新打包应用

SpringBoot+EasyExcel实现自定义复杂样式导入导出

《SpringBoot+EasyExcel实现自定义复杂样式导入导出》这篇文章主要为大家详细介绍了SpringBoot如何结果EasyExcel实现自定义复杂样式导入导出功能,文中的示例代码讲解详细,... 目录安装处理自定义导出复杂场景1、列不固定,动态列2、动态下拉3、自定义锁定行/列,添加密码4、合并

Spring Boot集成Druid实现数据源管理与监控的详细步骤

《SpringBoot集成Druid实现数据源管理与监控的详细步骤》本文介绍如何在SpringBoot项目中集成Druid数据库连接池,包括环境搭建、Maven依赖配置、SpringBoot配置文件... 目录1. 引言1.1 环境准备1.2 Druid介绍2. 配置Druid连接池3. 查看Druid监控

Java中读取YAML文件配置信息常见问题及解决方法

《Java中读取YAML文件配置信息常见问题及解决方法》:本文主要介绍Java中读取YAML文件配置信息常见问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录1 使用Spring Boot的@ConfigurationProperties2. 使用@Valu

创建Java keystore文件的完整指南及详细步骤

《创建Javakeystore文件的完整指南及详细步骤》本文详解Java中keystore的创建与配置,涵盖私钥管理、自签名与CA证书生成、SSL/TLS应用,强调安全存储及验证机制,确保通信加密和... 目录1. 秘密键(私钥)的理解与管理私钥的定义与重要性私钥的管理策略私钥的生成与存储2. 证书的创建与

浅析Spring如何控制Bean的加载顺序

《浅析Spring如何控制Bean的加载顺序》在大多数情况下,我们不需要手动控制Bean的加载顺序,因为Spring的IoC容器足够智能,但在某些特殊场景下,这种隐式的依赖关系可能不存在,下面我们就来... 目录核心原则:依赖驱动加载手动控制 Bean 加载顺序的方法方法 1:使用@DependsOn(最直

SpringBoot中如何使用Assert进行断言校验

《SpringBoot中如何使用Assert进行断言校验》Java提供了内置的assert机制,而Spring框架也提供了更强大的Assert工具类来帮助开发者进行参数校验和状态检查,下... 目录前言一、Java 原生assert简介1.1 使用方式1.2 示例代码1.3 优缺点分析二、Spring Fr

java使用protobuf-maven-plugin的插件编译proto文件详解

《java使用protobuf-maven-plugin的插件编译proto文件详解》:本文主要介绍java使用protobuf-maven-plugin的插件编译proto文件,具有很好的参考价... 目录protobuf文件作为数据传输和存储的协议主要介绍在Java使用maven编译proto文件的插件