动作是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。这会给出以下画面:

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

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

建立多个动作:

经常会定义一个以上的动作,以处理不同的请求,并提供不同的用户的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。要解决这个问题,建议创建一个类包含结果的结果。

Struts2 Action/动作的更多相关文章

  1. action动作类的生命周期

    创建:Action动作类每次请求的时候都会创建一个实例对象 销毁:当前action动作类的请求响应完后就消失了 跟javaweb中的HttpServletRequest的生命周期是一样的,struts ...

  2. iOS系列 基础篇 07 Action动作和输出口

    iOS系列 基础篇 07 Action动作和输出口 目录:  1. 前言及案例说明 2. 什么是动作? 3. 什么是输出口? 4. 实战 5. 结尾 1. 前言及案例说明 上篇内容我们学习了标签和按钮 ...

  3. struts2 action配置时 method 省略不写 默认执行方法是父类ActionSuppot中的execute()方法

    struts2 action配置时 method 省略不写 默认执行方法是父类ActionSuppot中的execute()方法

  4. struts2 action 页面跳转

    struts2 action 页面跳转 标签: actionstruts2redirect 2013-11-06 16:22 20148人阅读 评论(0) 收藏 举报 (1)type="di ...

  5. Java Hour 32 Weather ( 5 ) struts2 – Action class

    有句名言,叫做10000小时成为某一个领域的专家.姑且不辩论这句话是否正确,让我们到达10000小时的时候再回头来看吧. Hour 32 Struts2 Action 1 将action 映射到 ac ...

  6. 七、Action动作类

    七.Action动作类(一般用**Action结尾) 1.编写动作类的三种方式 动作类不实现.也不继承任何的接口和类.即动作类是一个非常普通的JavaBean. public class HelloA ...

  7. cocos2d-x 3.1.1 学习笔记[3]Action 动作

    这些动画貌似都非常多的样子,就所有都创建一次. 代码例如以下: /* 动画*/ auto sp = Sprite::create("card_bg_big_26.jpg"); Si ...

  8. Struts2 Action接收表单参数

    struts2 Action获取表单传值    1.通过属性驱动式    JSP:        <form action="sys/login.action" method ...

  9. 【JSP】JSP Action动作标签

    Action动作标签简述 JSP action是JSP技术体系内置的一组标签,使用无需导入,或者添加另外的库.JSP action标签都是对Java代码的逻辑的封装.主要使用的是下面这些. 标签 作用 ...

随机推荐

  1. WebServic dynamic url

    How to make your Web Reference proxy URL dynamic 开发环境和部署环境,Webservice 的URL不同 需将url 配置到 web.config文件中 ...

  2. Queue 队列的用法

    队列是一种特殊的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作. LinkedList类实现了Queue接口,因此我们可以把LinkedList当成Queue来用. 以下实例演示了队 ...

  3. Go语言的9大优势和3大缺点, GO语言最初的定位就是互联网时代的C语言, 我为什么放弃Go语言

    Go语言的9大优势和3大缺点 转用一门新语言通常是一项大决策,尤其是当你的团队成员中只有一个使用过它时.今年 Stream 团队的主要编程语言从 Python 转向了 Go.本文解释了其背后的九大原因 ...

  4. struts2,action上传文件

    通过servlet实现文件上传,可以用用servlet接受到request的值的话:主要是这句话 List<?> items = upload.parseRequest(request); ...

  5. 【Docker】MySQL容器因为内存限制启动失败?

    参考资料: https://github.com/docker-library/mysql/issues/3 Improving MySQL's default configuration:http: ...

  6. APK大小的瘦身的总结:

    首先是看了博客:http://blog.csdn.net/sw950729/article/details/64919051 时.认为大神我就是马云飞写的非常有道理.全部自己就自己写了一遍.长话短说: ...

  7. 复选框input:checkbox

      复选框 CreateTime--2017年6月5日14:04:55Author:Marydon 五.复选框 (一)语法 <input type="checkbox" /& ...

  8. Windows网络配置脚本

    静态ip和动态ip切换 适用于:公司学校家庭的网络环境切换[请修改具体ip地址] ::ip for win7.bat::win8以上请用ipv4替换ip @echo off 设置为静态IP 设置为动态 ...

  9. EntityFramework.SqlServer.dll 中发生 其他信息: 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。 (provider: Named Pipes Provider, error: 40 - 无法打开到 SQL Server 的连接)

    解决方案: 1.打开Sql server 管理配置器 或者在命令行输入:SQLServerManager10.msc 2.点击MSSQLSERVER的协议,在右侧的页面中选择TCP/IP协议启用 3. ...

  10. AngularJs学习笔记(4)——自定义指令

    对指令的第一印象:它是一个自定义标签! 先来看一个简单的指令: <!doctype html> <html ng-app="myApp"> <head ...