Struts2 学习总结(四):创建Action的几种方式+动态方法调用

将通过在第一篇文章中的HelloWorld来介绍这几种方式

一、实现Action接口

这种方法需要实现execute()方法,无需在struts.xml文件中<action>标签中注明method

Action类代码如下:

package controller;

import com.opensymphony.xwork2.Action;

public class HelloAction implements Action {
    private String message;
    
	public String getMessage() {
		return message;
	}


	@Override
	public String execute() throws Exception {
		message = "Hello World!";
		System.out.println(message);
		return SUCCESS;
	}
   
}

struts.xml代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
	"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.devMode" value="true" />
	<package name="default"  extends="struts-default">
		<action name="HelloWorld" class="controller.HelloAction1"  >
			<result name="success">/hello.jsp</result>	
			
		</action>

	</package>
</struts>  

二、继承自ActionSupport类

通过继承该类,并且实现所需要的方法

Action类代码如下:

package controller;

import com.opensymphony.xwork2.ActionSupport;

public class HelloAction1 extends ActionSupport {
	 private String message;
	    
		public String getMessage() {
			return message;
		}


		
		public String execute() throws Exception {
			message = "Hello World!";
			System.out.println(message);
			return SUCCESS;
		}
}

struts.xml代码同上,无需修改 

三、无侵入性的实现:

不继承ActionSupport类也不实现Action接口,只通过修改struts.xml文件中<action>标签,在其中增加method方法,其中method方法名可以任意起,只需在xml文件中指定即可

Action代码如下:

package controller;

public class HelloAction2 {
	  private String message;
	    
		public String getMessage() {
			return message;
		}


		
		public String execute() throws Exception {
			message = "Hello World!";
			System.out.println(message);
			return "success";
		}
}

struts.xml代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
	"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.devMode" value="true" />
	<package name="default"  extends="struts-default">
		<action name="HelloWorld" class="controller.HelloAction2"  method="execute">
			<result name="success">/hello.jsp</result>	
			
		</action>

	</package>
</struts>  

运行截图(有图有真相):

这便是三种实现Action 的方式

下面介绍在action无需配置method以及无需配置结果集的动态方法调用

动态调用是指无需配置也能执行非execute()方法

语法格式:

actionname!methodname.action

这种方法存在安全隐患,如果在你的action类中存在你并不想让别人任意执行的方法,别人也可以通过动态调用执行该方法

在struts.xml可以通过常量的配置关闭动态调用

<constant name="struts.enable.DynamicMethodInvocation" value="false"/>

学习浅显,敬请指正。

发布了90 篇原创文章 · 获赞 36 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_37716512/article/details/90313596