一、Action中定义多个方法
通常情况下,我们都将业务逻辑代码放在Action的execute方法中进行处理,但对于一些需要实现多个功能的Action,那么做就太不合适了。这个时候我们就需要根据不同的功能需求,在Action中定义多个方法。比如Action需要完成注册和登陆两项功能可以设计代码为:
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
|
package
wwfy.action.user;
public
class
UserAction {
private
String username;
private
String password;
public
String getUsername() {
return
username;
}
public
void
setUsername(String username) {
this
.username = username;
}
public
String getPassword() {
return
password;
}
public
void
setPassword(String password) {
this
.password = password;
}
public
String login() {
// 只有用户名为wwfy,密码为123456方可成功登陆
if
(username.equals(
"wwfy"
) && password.equals(
"123456"
)) {
return
"loginSuccess"
;
}
else
{
return
"loginError"
;
}
}
public
String regist() {
if
(username.equals(
""
) || password.equals(
""
)) {
return
"registError"
;
}
else
{
return
"registSuccess"
;
}
}
}
|
在struts.xml中配置Action
1
2
3
4
5
6
7
8
|
<
action
name="loginUser" class="wwfy.action.user.UserAction" method="login">
<
result
name="loginSuccess">/jsp/loginSuccess.jsp</
result
>
<
result
name="loginError">/jsp/loginError.jsp</
result
>
</
action
>
<
action
name="registUser" class="wwfy.action.user.UserAction" method="regist">
<
result
name="registSuccess">/jsp/registSuccess.jsp</
result
>
<
result
name="registError">/jsp/registError.jsp</
result
>
</
action
>
|
注意method中选择对应的方法。
实际上在Struts2框架中,一个完整的结果视图配置文件应该是:
1
2
3
4
5
|
<
action
name="Action名称" class="Action类路径" method="方法名">
<
result
name="逻辑视图名称" type="结果类型">
<
param
name="参数名称">参数值</
param
>
</
result
>
</
action
>
|
结果类型的作用:返回类型在struts2框架下的struts-default.xml中可以找到所支持的结果类型。
常用的主要有三种:请求转发、重定向、Action链接
1、请求转发(dispatcher)
这是Struts2的默认结果类型。
- 请求转发只能请求转发至同一个web应用。
- 利用请求转发浏览器地址栏不会发生变化。
- 利用请求转发调用者与被调用者之间共享相同的request对象和response对象,他们属于同一个访问请求和响应。
2、重定向(redirect)
- 重定向不仅可以指定到一个web应用,还能够制定到任何JSP资源。
- 重定向的访问结束后,浏览器的地址栏中显示URL变化。
- 重定向的调用者与被调用者使用各自的的request对象和response对象,他们属于两个独立的访问请求和响应过程。
重定向之后会丢失前一次访问的数据信息。
3、Action链(chain)
Action链是通过一个chain的拦截器实现的。
第一个Action执行成功后有chain拦截器负责发出第二个Action的请求,Action链中所有Action都共享一个值栈,当执行Action的时候,会将自身的数据全部压入值栈。
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
|
package
wwfy.action.user;
public
class
UserAction {
private
String username;
private
String password;
public
String getUsername() {
return
username;
}
public
void
setUsername(String username) {
this
.username = username;
}
public
String getPassword() {
return
password;
}
public
void
setPassword(String password) {
this
.password = password;
}
public
String login() {
// 只有用户名为wwfy,密码为123456方可成功登陆
if
(username.equals(
"wwfy"
) && password.equals(
"123456"
)) {
return
"loginSuccess"
;
}
else
{
return
"loginError"
;
}
}
public
String regist() {
if
(username.equals(
""
) || password.equals(
""
)) {
return
"registError"
;
}
else
{
return
"registSuccess"
;
}
}
}
|
在struts.xml中配置Action
1
2
3
4
5
6
7
8
|
<
action
name="loginUser" class="wwfy.action.user.UserAction" method="login">
<
result
name="loginSuccess">/jsp/loginSuccess.jsp</
result
>
<
result
name="loginError">/jsp/loginError.jsp</
result
>
</
action
>
<
action
name="registUser" class="wwfy.action.user.UserAction" method="regist">
<
result
name="registSuccess">/jsp/registSuccess.jsp</
result
>
<
result
name="registError">/jsp/registError.jsp</
result
>
</
action
>
|
注意method中选择对应的方法。