您的位置:首页 > 编程语言 > Java开发

struts2--Action的四种配置方式

2016-07-07 21:50 309 查看

struts2--Action的四种配置方式

第一种:普通配置:执行action类中的execute()方法
1.新建一个Web Project,命名为struts-action
2.引入struts支持
3.配置struts.xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<package name="hello" namespace="/" extends="struts-default">

<!--普通action配置,默认执行Action类中的execute()方法-->
<action name="hello" class="com.etc.action.HelloAction">
<result>/hello.jsp</result>
</action>
</package>
</struts>

4.新建com.etc.action包,在包下新建HelloAction1.java
package com.etc.action;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport;
public class HelloAction extends ActionSupport{

public String execute() throws Exception {
System.out.println("你好");
return Action.SUCCESS;
}
}



5.新建hello.jsp
<html>
<body>
hello!
</body>
</html>

6.右键运行,访问hello.action
运行结果:页面跳转到hello.jsp,输出hello,在控制台输出:你好!
注意:页面虽然跳转,但是URL地址栏并没有发生改变。。

第二种:使用method配置,不同的action名称进行控制(常用)
相对于第一种方式进行代码的比较
1,2步骤不变
3.struts.xml文件改为:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<package name="hello" namespace="/" extends="struts-default">
<!-- 使用method配置,不同的action名称进行控制。-->
<action name="hello" class="com.etc.action.HelloAction2" method="m1">
<result>/success.jsp</result>
</action>
<action name="hello2" class="com.etc.action.HelloAction" method="m2" >
<result>/success.jsp</result>
</action>
</package>
</struts>
4.在com.etc.action下新建HelloAction2.java
package com.etc.action;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport;
public class HelloAction2 extends ActionSupport {
public String m1()
{
System.out.println("执行了m1方法");
return Action.SUCCESS;
}
public String m2()
{
System.out.println("执行了m2方法");
return Action.SUCCESS;
}
}

5.步骤不改变。
6.运行:访问hello.action    运行结果:页面跳转到hello.jsp页面,输出hello,控制台输出:执行了m1方法
      访问hello2.action    运行结果:页面跳转到hello.jsp页面,输出hello,控制台输出:执行了m2方法

第三种方式:使用通配符*
相对于第二种方式,进行代码的比
c2a7

1.2步骤不变
3.struts.xml文件改为:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<package name="hello" namespace="/" extends="struts-default">
<!-- 使用通配符*-->
<action name="*" class="com.etc.action.HelloAction3" method="{1}">
<result>/success.jsp</result>
</action> -->
</package>
</struts>
4.在com.etc.action下新建HelloAction3.java
package com.etc.action;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport;
public class HelloAction3 extends ActionSupport {
public String select()
{
System.out.println("执行了select方法");
return Action.SUCCESS;
}
public String update()
{
System.out.println("执行了update方法");
return Action.SUCCESS;
}
}
5.步骤不改变
6.运行:访问select.action 页面跳转到hello.jsp,输出hello,控制台输出:执行了select方法
      访问update.action,页面跳转到hello.jsp,输出hello,控制台输出:执行了update方法

补充:struts.xml中的通配符*比较灵活
1)
<action name="*_*" class="com.etc.action.HelloAction3" method="{1}">
<result>/success.jsp</result>
</action>



这样的配置之后,匹配的是第一个*号的方法(第二个*的值可以任意)
比如:访问select_update.action,执行的是select方法
访问update_create.action.执行的是update方法
2)
<action name="*_*" class="com.etc.action.HelloAction3" method="{1}abc">
<result>/success.jsp</result>
</action>
访问select_update.action,执行的是selectabc方法。

第四种方式:动态方法调用

1.首先在struts.xml中配置常量参数如下:
<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
2.在struts.xml中配置相应的action如下:
<!-- 第四种方法:使用!号通配符 -->
<action name="hello"  class="com.etc.action.HelloAction">
<result>/hello.jsp</result>
</action>
3.编写action类,HelloAction如下:
package com.etc.action;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport;

public class HelloAction extends ActionSupport{
private static final long serialVersionUID = -4677141561291687131L;

@Override
public String execute() throws Exception {
System.out.println("你好,世界!");
return Action.SUCCESS;
}
public String hello(){
System.out.println("你好,世界2!");
return Action.SUCCESS;
}
public String add(){
System.out.println("增加方法");
return  Action.SUCCESS;
}
public String update(){
System.out.println("修改方法");
return  Action.SUCCESS;
}
public String select(){
System.out.println("查询方法");
return Action.SUCCESS;
}
}
4.编写hello.jsp页面如下:
<body>
<h1 align="center">你好,世界!</h1>
</body>
5.运行:http://localhost:8080/struts-action/hello!hello.action---->执行的是HelloAction类的hello()方法 http://localhost:8080/struts-action/hello!select.action---->执行的是HelloAction类的select()方法 http://localhost:8080/struts-action/hello!add.action---->执行的是HelloAction类的add()方法

结论:我们可以发现,只是配置了一个名字叫做hello的action,对应的类是HelloAction,我们便可以通过!加上方法名
执行这个类的所有方法,当然,前提是要在struts.xml中配置相应的常量struts.enable.DynamicMethodInvocation为true
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: