• Struts2 Action/动作


    动作是Struts2框架的核心,因为他们的任何MVC(模型 - 视图 - 控制器)框架。每个URL将被映射到一个特定的动作,它提供了来自用户的请求提供服务所需的处理逻辑。

    但动作也提供其他两个重要的能力。首先,操作从请求数据的传输中起着重要的作用,通过向视图,无论是一个JSP或其它类型的结果。二,动作必须协助的框架,在确定结果应该渲染视图,在响应该请求将被退回。

    创建动作:

    在Struts2的动作,唯一的要求是必须有一个无参数的方法返回String或结果的对象,必须是一个POJO。如果不带参数的方法是不指定,则默认动作是使用execute()方法。

    也可以选择扩展ActionSupport类实现了6个接口,包括动作界面。动作界面如下:

    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示例的操作方法:

    package com.yiibai.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;
       }
    }

    为了说明这一点,操作方法控制视图,让我们做出以下更改执行方法和扩展类ActionSupport 如下:

    package com.yiibai.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,所以我们可以使用字符串常量的成功和错误。现在,让我们修改我们的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="helloworld" extends="struts-default">
             <action name="hello" 
                class="com.yiibai.struts2.HelloWorldAction"
                method="execute">
                <result name="success">/HelloWorld.jsp</result>
                <result name="error">/AccessDenied.jsp</result>
             </action>
          </package>
    </struts>

    创建视图

    让我们创建以下JSP文件 helloWorld.jsp 的WebContent文件夹在eclipse项目。要做到这一点,右键单击WebContent文件夹在项目资源管理器,选择New >JSP File。该文件将要求返回的结果是SUCCESS,这是一个字符串常量“success”的定义在动作界面:

    <%@ page contentType="text/html; charset=UTF-8" %>
    <%@ taglib prefix="s" uri="/struts-tags" %>
    <html>
    <head>
    <title>Hello World</title>
    </head>
    <body>
       Hello World, <s:property value="name"/>
    </body>
    </html>

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

    <%@ page contentType="text/html; charset=UTF-8" %>
    <%@ taglib prefix="s" uri="/struts-tags" %>
    <html>
    <head>
    <title>Access Denied</title>
    </head>
    <body>
       You are not authorized to view this page.
    </body>
    </html>

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

    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
       pageEncoding="ISO-8859-1"%>
    <%@ taglib prefix="s" uri="/struts-tags"%>
       <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
    "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <title>Hello World</title>
    </head>
    <body>
       <h1>Hello World From Struts2</h1>
       <form action="hello">
          <label for="name">Please enter your name</label><br/>
          <input type="text" name="name"/>
          <input type="submit" value="Say Hello"/>
       </form>
    </body>
    </html>

    就是这样,不需要改变的web.xml文件,所以让我们用同一个web.xml,是之前我们已经创建了范例章。现在,我们已经准备好运行使用Struts 2框架的 Hello World应用程序。

    执行应用程序

    右键点击项目名称,并单击 Export > WAR File 创建一个WAR文件。然后在Tomcat 的webapps目录下部署这个WAR。最后,启动Tomcat服务器和尝试访问URL http://localhost:8080/HelloWorldStruts2/index.jsp。这会给出以下画面:

    Hello World Input

    让我们为“SECRET”,并输入一个字,应该看到以下页面:

    Success Result

    现在输入任何单词而非“SECRET”,应该看到以下页面: 

    Access Denied Result

    建立多个动作:

    经常会定义一个以上的动作,以处理不同的请求,并提供不同的用户的URL,因此可以定义不同的类定义如下:

    package com.yiibai.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文件中配置这些操作如下:

    <?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="helloworld" extends="struts-default">
          <action name="hello" 
             class="com.yiibai.struts2.HelloWorld" 
             method="execute">
             <result name="success">/HelloWorld.jsp</result>
             <result name="error">/AccessDenied.jsp</result>
          </action>
          <action name="something" 
             class="com.yiibai.struts2.SomeOtherClass" 
             method="execute">
             <result name="success">/Something.jsp</result>
             <result name="error">/AccessDenied.jsp</result>
          </action>
       </package>
    </struts>

    正如看到在上述假设的例子,动作的结果是重复的SUCCESS和ERROR。要解决这个问题,建议创建一个类包含结果的结果。

  • 相关阅读:
    集合set() 和 深浅copy
    Python 数据类型的操作——字典
    Python()- 面向对象
    面向对象的软件开发
    Python数据类型的操作——列表、元组
    Python 数据类型的操作——字符串
    Linux下386中断处理
    任务的休眠与唤醒
    Linux下SIGSTOP的特殊特征和实现
    内核线程对信号的处理策略
  • 原文地址:https://www.cnblogs.com/borter/p/9502172.html
Copyright © 2020-2023  润新知