struts2学习2:Action详解
Action是struts2的核心内容,接下来我们将学习一下struts2中的Action。
Action配置中的各项默认值
1 | <action name="helloworld"> |
class的默认值是ActionSupport,method的默认值是execute、result中name的默认值是success。
在这种配置情况下,当浏览器请求helloworld(action)时,可以直接请求转发到hello.jsp界面。
result的几种转发类型
dispatcher
1 | <action name="helloworld"> |
dispatcher是默认值,服务器内部请求转发。
redirect
1 | <action name="helloworld"> |
在这种配置情况下,当浏览器请求helloworld(action)时,用户浏览器会重定向到hello.jsp,地址栏会发生变化,重定向到某一个路径。
可以通过
redirectAction
重定向到某一个Action,重定向到Action分为两种情况,一种重定向到同一个包下的Action,另一种的重定向到另一个包下的Action。
重定向同一个包下的Action:1
2
3<action name="helloworld2">
<result type="redirectAction">helloworld</result>
</action>
重定向到另一个包下的Action:1
2
3
4
5
6<action name="helloworld2">
<result type="redirectAction">
<param name="actionName">helloworld</param>
<param name="namespace">/test</param> <!--注:namespace指的就是另一个包的命名空间-->
</result>
</action>
plainText
用来显示原始文件内容,例如:当我们需要显示jsp源代码的时候,我们可以使用此类型:1
2
3
4<result name="source" type="plainText">
<param name="location">/hello.jsp</param>
<param name="charSet">UTF-8</param> <!--注:读取指定文件的编码-->
</result>
为Action的属性注入值
struts2为Action中的属性提供了依赖注入的功能,在struts2的配置文件中,我们可以很方便的为Action中的属性赋值。注意:属性必须提供setter方法。
举例,在Action(helloworld.java)中有属性worldname,需要在strurs.xml中为其注入值,helloworld.java代码如下:1
2
3
4
5private String worldname;
public void setWorldname(String worldname) {
this.worldname = worldname;
}
在struts.xml中通过依赖注入进行赋值:1
2
3
4
5
6<package name="zjustruts" namespace="/test" extends="struts-default">
<action name="helloworld" class="cn.zju.struts.helloworld" method="execute">
<param name="worldname">中国</param>
<result name="success" >/WEB-INF/page/hello.jsp</result>
</action>
</package >
改变Action的后缀名
前面我们都是默认使用.action后缀访问Action。默认的后缀名是可以进行修改的,举例:我们可以配置struts2只处理以.do为后缀的请求路径,1
2
3
4
5
6<struts>
<constant name="struts.action.extension" value="do"/>
<!--
如果用户需要制定多个请求后缀,则多个后缀之间以英文逗号隔开,<constant name="struts.action.extension" value="do,go"/>
-->
</struts>
使用通配符定义Action
1 | <package name="zjustruts" namespace="/test" extends="struts-default"> |
如何接收请求参数
采用基本类型接收请求参数
在Action类总定义与请求参数同名的属性,struts2便能自动请求参数并赋予给同名属性,例如请求路径为:http://localhost:8080/test/helloworld.action?id=431
2
3
4
5
6
7
8
9public class helloworld{
private Integer id;
public void setId(Integer id){
this.id = id;
}
public Integer getId(){
return id;
}
}
struts2通过反射技术调用与请求参数同名的属性的setter方法来获取请求参数的值。
采用复合类型接收请求参数
请求路径为:http://localhost:8080/test/helloworld.action?person.id=431
2
3
4
5
6
7
8
9public class helloworld{
private Person person;
public void setPerson(Person person){
this.person = person;
}
public Integer getPerson(){
return person;
}
}
struts2首先通过反射技术调用Person的默认构造器创建person对象,然后通过反射技术调用person中与请求参数同名的属性的setter方法来获取请求参数值。