的配置心得

本文介绍了 Struts2 框架的基本配置方法及常用标签的使用技巧,包括 action 的配置、结果页面的跳转以及非表单标签如 property、url 和 iterator 的运用。
    1. 今天对struts2有了一定的了解,首先配置貌似没有Spring那么复杂,我很开心,web.xml就配置了一个过滤器就可以,在他的jar里面已经分装好了两个配置文件(struts-default.xml,structs-plugn.xml两个配置文件)我们需要将我们需要的配置文件可以src下就可以了,或者可以自定义的方式也是可以的 struts.xml。
    1. struct主要配置一个package的而他需要继承原生的struts-default 他的子标签就是我们的action完全是以类的形式来展现的。在action的里面还有子标签result ,我们根据action返回的字符串的形式可以选择跳转到不同的页面,这就完成了整个一个请求到一个页面的整个过程。
    1. 在这个过程我们是通过在action里面设置全局变量,来获取整个请求传递过来的参数的。当然这个实体类一定要有get和set的方法,而当使用这个实体类的时候,一定要使用这个声明的变量。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
非表单标签(重要)
1.在页面中要使用标签的话,首先需要导入标签库
<%@ taglib prefix="s" uri="/struts-tags" %>

6.1 property(重要)
<!--
s:property 标签 取值 (可以获取request中的数据,也可以获取session中的)
用法:
如果获取的是Action中的某个变量,那么直接写变量名即可
如果该变量存在于Action类中,那么在获取时直接写变量即可,
如果不存在于Action类中,那么在获取时需要在变量名前添加#
获取session中的数据时,也需要加#
-->
<h1>property标签:<s:property value="stuModel.stuName"/></h1>

6.2 url(重要)
<!--
s:url 用来生成访问路径,可以配合a标签,或者form表单一起使用
action属性:写的是struts配置文件中action标签的name
namespace属性:如果action所在的packeage配置了namespace属性,那么就要将namespace属性写出来
-->
<a href="<s:url action='deleteHello'></s:url>">测试surl标签</a>

6.3 bean(熟悉)
<!--
s:bean 向值栈中保存一个数据(实例化一个类,然后存入值栈)
name属性:要实例化哪个类,就写哪个类的完全限定名
var属性:相当于存入request时的key值,在获取时使用
如果使用s:param标签对属性进行赋值的时候,要赋的值是除数字以外的其他任意类型,都要加单引号
-->
<s:bean name="com.model.StuModel" var="stu">
<!-- 给属性赋值 name为类中某个属性名,value则为要赋的值 -->
<s:param name="stuName" value="'张三'"></s:param>
<s:param name="age" value="99"></s:param>
</s:bean>

<h1>s:bean标签:<s:property value="#stu"/></h1>

6.3 date(熟悉)
<!--
s:date 格式化日期
name属性:要格式化的变量,获取的是值栈中的某个数据
format属性:格式化后的模板
nice属性:计算变量日期和系统当前差了多久
var属性:如果指定了var属性,那么不会将值在页面上直接显示,而是存入值栈
-->
<s:date name="stuModel.birthday" format="yyyy-MM-dd" var="birthday"/>
<h1><s:property value="#birthday"/></h1>

6.4 push(了解)
<!--
s:push将一个变量推到值栈的栈顶
-->
<s:push value="#stu">
<s:property value="stuName"/>
</s:push>

6.5 set(熟悉)
<!--
s:set 创建一个普通的变量(单值类型),存入值栈(string,int)
-->
<s:set var="setStr" value="'创建一个字符串'"></s:set>
<h1>set标签<s:property value="#setStr"/></h1>

6.6 if-elseif-else(重要)

<!--
s:if标签 具备elseif 和 else
test属性:编写判断条件,判断条件必须写在 %{}中,可以从值栈中获取某个值,然后进行相关判断
-->
<s:if test="%{stuModel.age > 100}">
<h1>大于100</h1>
</s:if>
<s:elseif test="%{stuModel.age > 50}">
<h1>大于50</h1>
</s:elseif>
<s:else>
<h1>小于50</h1>
</s:else>

6.7 iterator(重要)
<!--
s:iterator标签 (循环)
value属性:你要循环哪一个集合,从值栈中获取
var属性:每次循环时的变量,每次循环时会将本次循环的对象 赋值给i
如果说list集合中保存的单值类型变量,那么s:property可以不写value属性
status属性:用该属性可以获取循环的相关信息 在循环时会产生一个 IteratorStatus
count 循环元素的个数
index 当前元素的下标
first 是否是第一个
even 是否为偶数
last 是否是最后一个
odd 是否为奇数
使用方式 status="status" <s:property value="#status.odd"/>
begin属性:设置循环从哪一个元素开始,写的是元素的下标,从0开始
end属性:设置循环的结束位置,写的是元素下标,如果超出下标,会报错
step属性:步长
-->
<s:iterator value="strList" var="i" status="status" begin="0" end="2" step="2">
<h1><s:property value="#status.odd"/></h1>
<s:if test="%{#status.odd}">
这是奇数行
</s:if>
<s:property value="#i"/>
</s:iterator>

<s:iterator value="stuList" var="i">
<s:property value="#i.stuName"/>
<s:property value="#i.age"/>
</s:iterator>

6.8 append(了解)
<!--
s:append 追加,可将多个集合合并为一个集合,使用追加进行合并的话,可以保证顺序
-->
<s:append var="append">
<s:param value="strList"></s:param>
<s:param value="strList"></s:param>
<s:param value="strList"></s:param>
</s:append>

<s:iterator value="#append">
<s:property/>
</s:iterator>

6.9 merge(了解)
<!--
s:merge 合并,可将多个集合合并为一个集合,不会保证顺序(会将原有顺序打乱)
合并规则:
将所有集合的第一条合并,将所有几个的第二条合并,以此类推
第一个集合的第一条,第二个集合的第一条,第N个集合的第一条
....

-->
<s:merge var="merge">
<s:param value="strList"></s:param>
<s:param value="strList"></s:param>
<s:param value="strList"></s:param>
</s:merge>

<s:iterator value="#merge">
<s:property/>
</s:iterator>

6.10 generator(熟悉)
<!--
s:generator标签 将一个字符串,按照规则,拆分成一个数组,类似java中split方法
val属性:要分割的字符串
separator属性:分隔符
count属性:指定生成集合中元素的个数,如果该字符串截取后只能生成5个元素,但是count属性指定为了10
那么,会使用之前的元素进行补齐
var属性:将解析后的结果存入值栈
-->
<s:generator separator="," val="%{'aa,bb,cc,dd,ee'}" var="gen" count="10">

</s:generator>

<br>
<s:iterator value="#gen">
<s:property/>
</s:iterator>

6.11 subset(了解)
<!--
s:subset 对集合进行截取,然后生成一个子集合
source属性:要截取的集合,从值栈中获取
count属性:指定生成子集合中的元素个数,不指定的情况下,获取的是源集合中的所有元素
start属性:指定从源集合中的第几个元素开始截取,默认从第一个开始截取,默认值为0
decider属性:自定义选取逻辑,需要创建一个类,实现Decider接口,通过方法的返回值 来确定是否选取,如果true,则将该元素加入到子集合
要保证该类的实例,在值栈中是存在的,必须要从值栈获取该类
在取值时可以省略#
-->
<s:bean name="com.action.MyDecider" var="myDecider"></s:bean>
<br>
<s:subset source="stuList" count="2" start="1" var="subset" decider="#myDecider">
<s:iterator>
<s:property/>
</s:iterator>
</s:subset>

如果要使用标签的decider属性,实现自定义的选取规则,那么需要创建一个类,实现Struts的Decider接口,并且实现相关方法,在方法中可以自定义逻辑



6.12 action(熟悉)
<!--
s:action 向一个action发起请求
name属性:要请求到某一个action的访问路径
var属性:相当于给这个action起个名字,然后通过名字可以获取action类中所有的全局变量
-->
<s:action name="executeHello" var="hello"></s:action>

<s:iterator value="#hello.strList">
<s:property/>
</s:iterator>
内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值