1. 首页 > 励志短句

Struts2框架说明及工作原理简述(2025版)” struts2框架的处理流程

#### 一、逻辑控制标签

用于进行逻辑控制输出,主要包括以下几类:

1. 条件标签:用于执行基本的条件流转。其中的``标签拥有一个`test`属性,其表达式的值用来决定标签里内容是否显示。例如:

```html

欢迎hzd

```

还有``和``标签。

2. 迭代标签:用于遍历集合或枚举值类型的对象。该标签的`value`属性表示集合或枚举对象,`status`属性表示当前循环的对象。在循环体内部,可以引用该对象的属性。例如:

```html

姓名:

年龄:

```

3. 组合标签:用于将多个枚举值对象叠加,形成新的枚举值列表。通过``和``标签实现列表组合。例如:将三个列表对象组合成新的列表对象并输出。

4. 分割标签:将一个字符串分隔成多个部分,并产生一个枚举值列表。使用``标签进行字符串分割,然后通过``循环输出分割后的结果。

5. 合并标签:按数组索引位置合并多个枚举值。使用``标签合并列表,并通过``遍历输出合并后的列表元素。新的元素顺序通过合并操作确定。例如:合并后的列表元素为“a,1,b,2,c,3”。

6. 排序标签:对一组枚举值进行排序操作。设置`comparator`属性指向一个比较器,该比较器可以是Action页面中的一个比较器变量;通过`source`属性指定要排序的列表对象。例如:使用``标签对列表进行排序操作。

7. 子集标签:用于获取一个枚举列表的子集。使用``标签筛选列表子集,通过`source`指定检索的列表对象,`start`指定起始检索位置,以及使用`decider`属性来决定筛选条件(即满足某种条件时作为子集元素)。若未使用Decider对象,则通过设定数量(count)和起始位置(start)筛选子集元素。例如:定义Decider对象并使用``筛选子集元素;或直接设定筛选的子集大小与起始位置而不使用Decider对象进行筛选。这种操作极大地提升了开发效率及代码的可读性。 这些功能强大的标签使得前端开发更为便捷高效,极大地提升了开发者的工作效率与代码质量。随着技术的不断进步和应用的深入拓展,未来值得期待这些标签更多的改进和革新以满足开发者的更多需求,从而共同推进互联网技术的繁荣发展。

#### 二、其他相关介绍(此处可添加更多关于struts的相关介绍内容)......待补充扩展完善后补充此处内容以丰富文章内容及可读性。二、数据输出标签详解

数据输出标签

数据输出标签用于在页面中展示元素、属性、隐含变量等。这包括静态文本的输出,也涵盖struts2集成的各类变量的输出。具体标签介绍如下:

链接标签

用于创建链接元素,其中包含errorText属性显示错误信息,preInvokeJS属性表示链接执行时的javascript提示函数,以及href属性表示跳转地址。例如:创建一个带有确认删除提示的链接。

Action标签

该标签可直接调用Action类中的函数。前提是Action类在struts.xml中有定义。name属性指向映射文件中配置的Action函数,executeResult属性表示是否执行结果集的跳转。例如:执行LoginAction的默认处理方法或特定处理方法。

表示执行LoginAction的默认处理方法。

表示执行LoginAction的处理方法login()。

JavaBean标签

此标签用于创建JavaBean对象。name表示JavaBean类全名,var表示变量的实例名,并可包含设置实例化输入参数。如为JavaBean传递构造方法参数。

其他标签如日期标签、调用标签、引用资源文件标签等也各具特色,用于不同的页面元素展示需求。这些标签共同构成了struts2框架下的数据输出体系,为Web开发提供了丰富的工具集。在后续开发中,可以根据具体需求选择合适的标签来实现页面元素的展示和交互功能。

13)属性标签:用以输出value属性的值,并拥有一个default属性,在value对象不存在时显示。escape属性为true,来输出原始的HTML文本

<s:property value="getText('some.key')">

HTML表单标签

HTML标签都拥有以下3个设置样式的属性。

templateDir:执行模板路径

theme:指定主题名称,可选值包括simple、xhtml、ajax等

template:指定模板名称

使用HTML表单标签会生成大量格式化的HTML代码,这些代码是由struts2的模板生成的,这样的好处是可以让我们的jsp代码十分简单,只需要配置使用不同的主题模板,就可以显示不同的页面样式。

struts2默认提供了5种主题(在此不做详细介绍):

simple主题:简单的主题

XHTML主题:默认主题,使用常用的HTML技巧

CSS XHTML主题:使用CSS实现的XHTML主题

archive主题:使用文档生成主题

AJAX主题:基于AJAX实现的主题

通过在struts.properties文件中改变struts.ui.theme,struts.ui.templateDir,struts.ui.templateSuffix三个标签来自由切实可行换主题

由于HTML表单标签也不少,所以还是要用的时候在网上找吧...

HTML非表单标签

主要用来输出各种错误和消息。

1)错误标签:用以输出Action错误信息

<s:actionerror/>

2)消息标签:用以输出Action普通消息

<s:atcionmessage/>

3)字段错误标签:用以输出Action校验中某一个字段的错误信息或所有字段的错误信息

<s:fielderror/>--输出所有字段的错误信息

<s:fielderror>

<s:param>username</s:param>--输出字段username的错误信息

<s:param>password</s:param>--输出字段password的错误信息

<s:fielderror>

4)DIV标签:用以输出一个<div>标签

AJAX标签

AJAX标签是struts2专门提供的一组进行AJAX操作的标签,在使用这些标签之前,需要在JSP页面中添加如下引用:

<%@ taglib prefix="sx"

uri="/struts-dojo-tags"%>

1)链接标签:用于创建一个<a>链接,并且在单击该链接时执行异步的请求,该标签的url属性必须使用<s:url/>标签进行设置,target属性指向要被更新的页面组件,showLoadingText属性决定是否显示文本,indicator表示异步请求时要显示的图片

使用form标签:

&

日期选择标签

用以弹出一个日期和时间的选择窗口,displayFormat属性指定要选择日期的格式,name表示当前组件的属性的对象,value表示默认值,label表示显示的文本。例如:<sx:datetimepicker name="order.date" label="Order Date" displayFormat="yyyy-MM-dd" value="%{'2006-01-01'}"/>

树标签

用以输出一个树形结构。例如:<sx:tree>

Tab页标签

使用AJAX的方式显示多个Tab页。例如:<s:tabbedpanel>

Struts1和Struts2的区别如下:

Action类

Struts1要求Action类继承一个抽象基类,而Struts2的Action是接口,可实现其他接口,使可选和定制的服务成为可能。Struts2提供一个ActionSupport基类去实现常用的接口。Action接口不是必须的,任何有execute标识的POJO对象都可以用作Struts2的Action对象。

线程模式

Struts1 Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。而Struts2 Action对象为每一个请求产生一个实例,因此没有线程安全问题。

Servlet依赖

Struts1 Action依赖于Servlet API,而Struts 2 Action不依赖于容器,允许Action脱离容器单独被测试。如果需要,Struts2 Action仍然可以访问初始的request和response。其他的元素减少或者消除了直接访问HttpServetRequest和 HttpServletResponse的必要性。

可测性

测试Struts1 Action的一个主要问题是execute方法暴露了servlet API(这使得测试要依赖于容器)。而Struts 2 Action可以通过初始化、设置属性、调用方法来测试,“依赖注入”支持也使测试更容易。

捕获输入

Struts1使用ActionForm对象捕获输入,而Struts 2直接使用Action属性作为输入属性,消除了对第二个输入对象的需求。输入属性可能是有自己(子)属性的rich对象类型。这种 ModelDriven特性简化了taglib对POJO输入对象的引用。

表达式语言

Struts1整合了JSTL,使用JSTL EL。而Struts2可以使用JSTL,但是也支持一个更强大和灵活的表达式语言--"Object Graph Notation Language"(OGNL)。

绑定值到页面(view)

Struts 1使用标准JSP机制把对象绑定到页面中来访问,而Struts 2使用"ValueStack"技术,使taglib能够访问值而不需要把你的页面(view)和对象绑定起来。ValueStack策略允许通过一系列名称相同但类型不同的属性重用页面(view)。

类型转换

Struts 1 ActionForm属性通常都是String类型,使用Commons-Beanutils进行类型转换。而Struts2使用OGNL进行类型转换,提供基本和常用对象的转换器。

校验

Struts 1支持在ActionForm的validate方法中手动校验,或者通过Commons Validator的扩展来校验。而Struts2支持通过validate方法和XWork校验框架来进行校验。XWork校验框架使用为属性类类型定义的校验和内容校验,来支持chain校验子属性。

基于Struts框架的生命周期管理解析

Struts1中的模块生命周期管理

Struts1框架支持每个模块拥有独立的Request Processors(生命周期处理者),但在此框架之下,所有Action必须遵循相同的生命周期路径。这意味着,尽管不同模块间可以拥有各自的处理流程,但在模块内部,Action的生命周期是共享的。这种方式确保了系统各部分之间的协调与统一。

Struts2中的堆栈与生命周期定制

相较于Struts1,Struts2框架提供了更为灵活的机制来管理Action的生命周期。在Struts2中,开发者可以通过配置堆栈(Interceptor Stacks)为每一个Action创建特定的生命周期路径。堆栈能够根据不同的需求和Action进行组合使用,极大地增强了框架的扩展性和可定制性。通过这种方式,开发者可以根据业务逻辑的不同,为每个Action打造独特且符合需求的工作流程。这一机制极大地提升了Struts2的适应性和灵活性,使其能够更好地适应复杂多变的实际应用场景。

无论是Struts1还是Struts2,都在不断地优化和改进框架的各方面性能,以满足日益增长的Web应用需求。而在2024年,随着技术的不断进步和需求的日益增长,Struts框架也将继续发挥其在Java Web开发领域的重要作用。