struts2的核心配置文件为struts.xml,一般放在src目录下。struts2配置使用包来管理Action。包的作用与java中包的作用相似,用于管理一组业务功能相关的Action。在实际应用中,应将一组业务功能相关的Action放在同一个包下。
注意:struts.xml中的包与Action类所在的包无关。
(1)name属性
配置包时必须指定name属性,该属性可以任意取值,但是必须唯一。其与java的类包间无对应关系。若其它包要继承该包,则必须通过该属性进行引用。
(2)namespace属性
包的namespace属性用于定义该包的命名空间。命名空间是访问该包下Action的路径的一部门。此属性是必须的,且不能为空。但命名空间可以为“/”。
(3)extends属性
通常情况下,包需要继承struts-default包。因为struts2的11个返回类型,35个拦截器,默认拦截器栈等struts2的主要功能,都定义在这个包中,继承了这个包,也就拥有了这些功能。struts-default包定义在struts-default.xml中。
(4)abstract属性
包还可以通过abstract="true"定义为抽象包。抽象包中是不能包含Action的。抽象包一般就是用于被继承的。struts-default包即为抽象包。
(1)name属性
在struts2中,访问struts2中的action的URL路径由两部分组成:包的命名空间+action的name属性值。
(2)method属性
Action标签有一个属性method,该属性用于指定所要执行的Action类的哪个Action方法。若没有指定该属性,则默认值为"execute",即执行指定Action类的execute方法。
(3)class属性
class属性用于指定该Action所要执行的Action类。其有三种写法:
A.直接写要执行的类的全限定类名。
B.在SSH中,Action交由Spring容器管理,此时class属性要设置为一个伪类名。
C.class属性缺省。对于class属性缺省情况是指,若用户提交某个请求后,不需要经过某个Action类的处理,而是直接要转向某个视图页面,如简单的页面间的超链接,则可以采用缺省的方式。因为在class缺省的情况下,会默认执行ActionSupport类。为什么会默认执行这个类呢?是因为在Struts-default包中通过
(1)name属性
result标签用于指定Action执行完毕后所要转向的视图资源,其name属性指定该视图的名称,如果name属性缺省,默认值为字符串常量"success"。
(2)type属性
struts2中共提供了11中视图转向类型,类型由result标签的type属性指定,type属性的值在struts-default.xml中可以查看到。需要注意到,在dispatcher后设置的default为true。即默认为dispatcher。
注意:对于请求转发的页面,可以是web-inf中的页面,而重定向的页面,是不能为web-inf中的页面的,因为重定义相当于用户再次发出一次请求,而用户是不能直接访问web-inf中的资源的。
下面重点介绍以下四种转向方式。
A.dispatcher转发
该转向类型用于完成请求转发的功能,即为服务器内跳转,请求转发是可以将请求参数传递给要转发的下一级页面的。dispatcher为默认的转向类型。
代码示例
请求页面
Action
package cn.ccnu.actions;
public class LoginAction {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String execute(){
return "success";
}
}
struts.xml
/welcome.jsp
结果页面
name = ${name }
age = ${age }
执行结果
B.redirect跳转
该转向类型用于完成请求重定向的功能。因此,redirect是无法将Action中属性值传递给要转向的下一个页面的。
例如,如果将上面示例中type值改为redirect,则发现其结果为:
说明redirect无法将Action中属性值传递给要转向的下一个页面得。
要想实现参数值可以转向下一个页面可以使用方法。
将struts.xml该成如下
/welcome.jsp
${name }
${age }
结果页面改为:
uname = ${param.name }
age = ${param.age }
还可以charset设置字符集:
/welcome.jsp
${name }
${age }
utf-8
C.redirectAction跳转
该转向类型专门用于重定向到Action。当然,Action中的属性值是无法传递到下一个Action中的。不过请注意,redirect在不使用方式时,也是可以重定向到Action的。
核心代码
struts.xml文件
second
/welcomeSecond.jsp
对于重定向到Action,还可以使用来设定转向的Action,并且将参数值传到下一个Action。
核心代码:
struts.xml文件
second
${username}
${password}
/welcomeSecond.jsp
Dchain跳转
用于将请求转发到Action。Request中的参数可以传递到下一个Action中。
核心代码:
struts.xml文件
second
/welcomeSecond.jsp