将通过在第一篇文章中的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"/>
学习浅显,敬请指正。