文章目录
  1. 1. Action配置中的各项默认值
  2. 2. result的几种转发类型
    1. 2.1. dispatcher
    2. 2.2. redirect
    3. 2.3. redirectAction
    4. 2.4. plainText
  3. 3. 为Action的属性注入值
  4. 4. 改变Action的后缀名
  5. 5. 使用通配符定义Action
  6. 6. 如何接收请求参数
    1. 6.1. 采用基本类型接收请求参数
    2. 6.2. 采用复合类型接收请求参数

Action是struts2的核心内容,接下来我们将学习一下struts2中的Action。

Action配置中的各项默认值

1
2
3
<action name="helloworld">
<result>/WEB-INF/page/hello.jsp</result>
</action>

class的默认值是ActionSupport,method的默认值是execute、result中name的默认值是success。
在这种配置情况下,当浏览器请求helloworld(action)时,可以直接请求转发到hello.jsp界面。

result的几种转发类型

dispatcher

1
2
3
<action name="helloworld">
<result>/WEB-INF/page/hello.jsp</result>
</action>

dispatcher是默认值,服务器内部请求转发。

redirect

1
2
3
<action name="helloworld">
<result type="redirect">hello.jsp</result>
</action>

在这种配置情况下,当浏览器请求helloworld(action)时,用户浏览器会重定向到hello.jsp,地址栏会发生变化,重定向到某一个路径。
可以通过 hello.jsp?username=$(username)来获取到action中属性的值。

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
5
private 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
2
3
4
5
6
<package name="zjustruts" namespace="/test" extends="struts-default">
<action name="hello_*" class="cn.zju.struts.helloworld" method="execute">
<param name="worldname">中国</param>
<result name="success" >/WEB-INF/page/hello.jsp</result>
</action>
</package >

如何接收请求参数

采用基本类型接收请求参数

在Action类总定义与请求参数同名的属性,struts2便能自动请求参数并赋予给同名属性,例如请求路径为:http://localhost:8080/test/helloworld.action?id=43

1
2
3
4
5
6
7
8
9
public 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=43

1
2
3
4
5
6
7
8
9
public class helloworld{
private Person person;
public void setPerson(Person person){
this.person = person;
}
public Integer getPerson(){
return person;
}
}

struts2首先通过反射技术调用Person的默认构造器创建person对象,然后通过反射技术调用person中与请求参数同名的属性的setter方法来获取请求参数值。

文章目录
  1. 1. Action配置中的各项默认值
  2. 2. result的几种转发类型
    1. 2.1. dispatcher
    2. 2.2. redirect
    3. 2.3. redirectAction
    4. 2.4. plainText
  3. 3. 为Action的属性注入值
  4. 4. 改变Action的后缀名
  5. 5. 使用通配符定义Action
  6. 6. 如何接收请求参数
    1. 6.1. 采用基本类型接收请求参数
    2. 6.2. 采用复合类型接收请求参数