📜  Struts 2-动作

📅  最后修改于: 2020-11-11 04:56:09             🧑  作者: Mango


对于任何MVC(模型视图控制器)框架而言,动作都是Struts2框架的核心。每个URL都映射到一个特定的操作,该操作提供了处理来自用户的请求所必需的处理逻辑。

但是该行动还具有其他两个重要作用。首先,该操作在从请求到视图的数据传输中起着重要作用,无论是JSP还是其他类型的结果。其次,该操作必须帮助框架确定哪个结果应呈现将在对请求的响应中返回的视图。

建立动作

Struts2中对动作的唯一要求是必须有一个noargument方法返回String或Result对象,并且必须是POJO。如果未指定无参数方法,则默认行为是使用execute()方法。

(可选)您可以扩展ActionSupport类,该类实现六个接口,包括Action接口。动作界面如下-

public interface Action {
   public static final String SUCCESS = "success";
   public static final String NONE = "none";
   public static final String ERROR = "error";
   public static final String INPUT = "input";
   public static final String LOGIN = "login";
   public String execute() throws Exception;
}

让我们看一下Hello World示例中的action方法-

package com.tutorialspoint.struts2;

public class HelloWorldAction {
   private String name;

   public String execute() throws Exception {
      return "success";
   }
   
   public String getName() {
      return name;
   }

   public void setName(String name) {
      this.name = name;
   }
}

为了说明action方法控制视图的观点,让我们对execute方法进行以下更改,并扩展类ActionSupport,如下所示:

package com.tutorialspoint.struts2;

import com.opensymphony.xwork2.ActionSupport;

public class HelloWorldAction extends ActionSupport {
   private String name;

   public String execute() throws Exception {
      if ("SECRET".equals(name)) {
         return SUCCESS;
      } else {
         return ERROR;  
      }
   }
   
   public String getName() {
      return name;
   }

   public void setName(String name) {
      this.name = name;
   }
}

在此示例中,我们在execute方法中具有一些逻辑来查看name属性。如果属性等于字符串“ SECRET” ,则返回SUCCESS作为结果,否则返回ERROR 。因为我们已经扩展了ActionSupport,所以我们可以使用String常量SUCCESS和ERROR。现在,让我们如下修改struts.xml文件:





   
   
      
         /HelloWorld.jsp
         /AccessDenied.jsp
      
   

创建一个视图

让我们在Eclipse项目的WebContent文件夹中创建以下jsp文件HelloWorld.jsp 。为此,请在项目资源管理器中的WebContent文件夹上单击鼠标右键,然后选择New> JSP File 。如果返回结果为SUCCESS,则将调用此文件,该结果是Action接口中定义的字符串常量“成功”-

Hello World
   
   
   
      Hello World, 
   

以下是在动作结果为ERROR的情况下框架将调用的文件,该错误等于字符串常量“ error”。以下是AccessDenied.jsp的内容

Access Denied
   
   
   
      You are not authorized to view this page.
   

我们还需要在WebContent文件夹中创建index.jsp 。该文件将用作初始操作URL,用户可以单击该URL告诉Struts 2框架调用HelloWorldAction类的execute方法并呈现HelloWorld.jsp视图。

Hello World
   
   
   
      

Hello World From Struts2


就是这样,web.xml文件不需要任何更改,因此让我们使用在“示例”一章中创建的相同的web.xml。现在,我们准备使用Struts 2框架运行Hello World应用程序。

执行申请

右键单击项目名称,然后单击导出> WAR文件以创建War文件。然后,将此WAR部署在Tomcat的webapps目录中。最后,启动Tomcat服务器并尝试访问URL http:// localhost:8080 / HelloWorldStruts2 / index.jsp 。这将为您提供以下屏幕-

你好世界Struts4

让我们输入一个单词“ SECRET”,您应该看到以下页面:

helloworldstruts51

现在输入除“ SECRET”以外的任何其他单词,您应该看到以下页面-

helloworldstruts6

创建多个动作

您将经常定义一个以上的操作来处理不同的请求并向用户提供不同的URL,因此,您将定义以下不同的类-

package com.tutorialspoint.struts2;
import com.opensymphony.xwork2.ActionSupport;

class MyAction extends ActionSupport {
   public static String GOOD = SUCCESS;
   public static String BAD = ERROR;
}

public class HelloWorld extends ActionSupport {
   ...
   public String execute() {
      if ("SECRET".equals(name)) return MyAction.GOOD;
      return MyAction.BAD;
   }
   ...
}

public class SomeOtherClass extends ActionSupport {
   ...
   public String execute() {
      return MyAction.GOOD;
   }
   ...
}

您将在struts.xml文件中配置这些操作,如下所示-





   
   
   
      
         /HelloWorld.jsp
         /AccessDenied.jsp
      
      
      
         /Something.jsp
         /AccessDenied.jsp
      
   

如您在上面的假设示例中看到的,操作结果SUCCESSERROR重复。

要解决此问题,建议您创建一个包含结果结果的类。