Action 跟 Actionsupport 的区别
当我们在写Action的时候,可以实现Action接口,也可以继承Actionsupport这个类,到底这两个有什么区别呢?
Action接口有:

public static final java.lang.String SUCCESS = "success";
public static final java.lang.String NONE = "none";
public static final java.lang.String ERROR = "error";
public static final java.lang.String INPUT = "input";
public static final java.lang.String LOGIN = "login";
public abstract java.lang.String execute() throws java.lang.Exception;

而Actionsupport这个工具类在实现了Action接口的基础上还定义了一个validate()方法,重写该方法,它会在execute()方法之间只能,如校验失败,会转入input处,必须在配置该Action时配置input属性。

具体实现看接下来步骤详解。。

step1:下载Struts2jar包,下载地址在我上一个博客。。

step2:新建一个普通的javaweb项目
打开MyEclipse,点击File>New>Web Project

step3: 把下载好的jar包复制到WEB-INF目录下的lib目录里面,具体细节看我上一个博客。。。

step4:建立我们的视图层
index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head> <title>Insert title here</title></head><body>登陆成功!</body>
</html>

login.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%String path = request.getContextPath();String basePath = request.getScheme() + "://"+ request.getServerName() + ":" + request.getServerPort()+ path + "/";
%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><title>Insert title here</title><style type="text/css">ul,li {list-style-type:none;margin:0px;float:left;
}
</style></head><body><form action="helloworldAction" method="post"><input type="hidden" name="submitFlag" value="login" /><div><font color=red><s:fielderror fieldName="account" /></font><br />账号:<input type="text" name="account"></div><div><font color=red><s:fielderror fieldName="password" /></font><br />密码:<input type="password" name="password"></div><input type="submit" value="提交"></form></body>
</html>

step5:建立控制层的ActionSupport
ActionSupport类的作用

struts2不要求我们为自己设计的action类继承任何的struts基类或struts接口,但是我们为了方便实现我们自己的action,大多数情况下都会继承com.opensymphony.xwork2.ActionSupport类,并重写此类里的public String execute() throws Exception方法。因此此类中实现了很多的实用接口,提供了很多默认方法。这样可以大大的简化我们的action的开发。


> Struts2中通常直接使用Action来封装HTTP请求参数,因此,Action类里还应该包含与请求参数对应的属性,并且位属性提供对应的getter 和 setter方法。

在Validatable接口中定义了一个validate()方法,重写该方法,如果校验表单输入域出现错误,则将错误添加到ActionSupport类的fieldErrors域中,然后通过OGNL表达式负责输出。

话不多说,请看代码展示。。

package com.hnpi.action;import com.opensymphony.xwork2.ActionSupport;public class HelloWorldAction extends ActionSupport {//action用于封装用户请求参数的三个属性private String account;  private String password;  private String submitFlag;  //处理用户的execute()请求public String execute() throws Exception {  this.businessExecute();  return "toWelcome";  }  //完成输入验证后需要重写vaildate方法public void validate(){  // 如果用户名为空,或者用户名为空字符串if(account==null || account.trim().length()==0){  // 添加表单校验错误this.addFieldError("account", "账号不可以为空");  }  // 当密码为空,或者密码为空字符串时,添加表单校验错误if(password==null || password.trim().length()==0){  this.addFieldError("password", "密码不可以为空");  }if(password!=null && !"".equals(password.trim()) && password.trim().length()<6){  this.addFieldError("password", "密码长度至少为6位");  }  }  /** * 示例方法,表示可以执行业务逻辑处理的方法, */  public void businessExecute(){  System.out.println("用户输入的参数为==="+"account="+account+",password="+password+",submitFlag="+submitFlag);  }public String getAccount() {return account;}public void setAccount(String account) {this.account = account;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getSubmitFlag() {return submitFlag;}public void setSubmitFlag(String submitFlag) {this.submitFlag = submitFlag;}  }

step6:在src下建立struts.xml

上面的Action类重写了validate方法,该方法会在执行系统的execute方法之前执行,如果执行该方法后,Action类的fieldErrors中已经包含了数据校验错误,请求将被转发到input逻辑视图处。

下面是struts的配置:

<?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>    <package name="helloworld" extends="struts-default">  <!-- 定义login的Action --><action name="helloworldAction"  class="com.hnpi.action.HelloWorldAction">  <!-- 定义welcome的逻辑视图名,对应welcome.jsp页面 --><result name="toWelcome">/index.jsp</result> <!-- 定义input的逻辑视图名,对应login.jsp页面 --> <result name="input">/login.jsp</result>   </action>  </package>  </struts> 

step7:在web.xml中配置struts2的过滤器

1) Struts2的核心控制器FilterDispatcher被设计成了过滤器,通过标签引入。
2)/*说明所有客户端请求都经由FilterDispatcher处理,并把过滤后的请求交给Struts2进行处理

代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"><welcome-file-list><welcome-file>login.jsp</welcome-file></welcome-file-list><filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping>
</web-app>

具体步骤已经实现完毕!

struts2如何继承ActionSupport?相关推荐

  1. Struts2实现Preparable接口和【struts2】继承ActionSupport类

    Struts2实现Preparable接口 实现preparable接口,实现public void prepare() throws Exception 方法.当你访问某问action指定方法之前, ...

  2. Struts2学习日记(二)简单的Struts2登陆实现(Action继承ActionSupport类)

    功能实现:实现登陆功能,输入用户名和密码,如果用户名不为hello或者密码不为world,便返回登陆页并提示错误,否则显示登陆结果. 1.打开MyEclipse,创建一个webProject项目. 2 ...

  3. 继承ActionSupport的例子

    ActionSupport是Struts2框架提供的一个便利类,为最常见的操作提供默认实现,继承它后可以做很多操作,例如国际化,验证,等等. ActionSupport是Action下延伸出来的类,它 ...

  4. struts2之action生命周期和ActionSupport

    文章目录 1 action生命周期 2 继承ActionSupport类 2.1 基本的数据验证 2.2 访问本地信息 1 action生命周期 Struts2的Action的生命周期是:Struts ...

  5. Struts2学习第七课 ActionSupport

    com.opensymphony.xwork2.ActionSupport类是默认的Action类,如果某个Action节点没有配置class属性,则ActionSupport即为待执行的Action ...

  6. struts2配置详解

    01.Struts 2基本结构 使用Struts2框架实现用登录的功能,使用struts2标签和ognl表达式简化了试图的开发,并且利用struts2提供的特性对输入的数据进行验证,以及访问Servl ...

  7. struts2 validate验证

    转自:https://blog.csdn.net/houpengfei111/article/details/9038233 自定义拦截器 要自定义拦截器需要实现com.opensymphony.xw ...

  8. Struts2问题总结

    1 如何搭建Struts2开发环境? Struts2 获取   http://struts.apache.org/download.cgi Struts-2.3.16.3-all.zip 创建Web项 ...

  9. Struts2入门这一篇就够了

    前言 这是Strtus的开山篇,主要是引入struts框架...为什么要引入struts,引入struts的好处是什么,以及对Struts2一个简单的入门.... 为什么要引入struts? 既然Se ...

  10. Struts2新特性

    Struts2与Struts1的对比 Action 类: • Struts1要求Action类继承一个抽象基类.Struts1的一个普遍问题是使用抽象类编程而不是接口. • Struts 2 Acti ...

最新文章

  1. 面试官:谈谈你对 Spring AOP 的了解?请加上这些内容,绝对加分!
  2. “sudo: go:找不到命令”完美解决方案
  3. linux系统硬盘使用过高,磁盘IO过高时的处理办法
  4. 51. N 皇后(回溯算法)
  5. python 面向对象教程:访问限制
  6. MyBatisPlus3.x代码生成器生成实体类自定义需要填充的字段
  7. java处理高并发高负载类网站的优化方法
  8. java计算并显示学生的成绩_Java开学测试-学生成绩管理系统
  9. CVPR 2021 Oral | GLEAN: 基于隐式生成库的高倍率图像超分辨率
  10. Spring Mvc + Spring + Mybatis3 搭建Web工程详解
  11. HTML+JS 写一个 个人博客(初学版)
  12. android页面监听扫描枪,Android监听扫描枪内容(二)
  13. 2014世界10大DRAM公司
  14. plc顺序控制设计法是什么?
  15. Python 网络编程
  16. airflow实现Java定时任务,AirFlow定时调度执行Talend ETL任务
  17. ABB机器人——设置定时检测机器人状态
  18. SFDC数据导出的几种方式
  19. Laravel Elasticsearch
  20. java生成圆形二维码logo

热门文章

  1. 非参数统计的Python实现——符号检验
  2. 非参数统计单样本非参数检验之符号检验
  3. 与孩子一起学编程15章
  4. 元气骑士没有手柄怎么解锁机器人_元气骑士机器人怎么解锁?机器人获取方式和技能介绍...
  5. 全球及中国信用卡生成器行业投资模式及投资策略分析报告2022-2028年
  6. UG软件模具设计时常用命令以及UG软件默认的快捷键
  7. 性能测试 查看Android APP 帧数FPS的方法
  8. 研磨设计模式--抽象工厂模式
  9. refprop物性库_Refprop9.1_Refprop(制冷剂物性查询软件)下载 v9.1免费版 附教程 - 121下载站...
  10. C4D常用快捷键与自定义快捷键分享