struts2--Action的四种配置方式

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方法


第三种方式:使用通配符*
相对于第二种方式,进行代码的比较
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







  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值