struts2如何继承ActionSupport?
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?相关推荐
- Struts2实现Preparable接口和【struts2】继承ActionSupport类
Struts2实现Preparable接口 实现preparable接口,实现public void prepare() throws Exception 方法.当你访问某问action指定方法之前, ...
- Struts2学习日记(二)简单的Struts2登陆实现(Action继承ActionSupport类)
功能实现:实现登陆功能,输入用户名和密码,如果用户名不为hello或者密码不为world,便返回登陆页并提示错误,否则显示登陆结果. 1.打开MyEclipse,创建一个webProject项目. 2 ...
- 继承ActionSupport的例子
ActionSupport是Struts2框架提供的一个便利类,为最常见的操作提供默认实现,继承它后可以做很多操作,例如国际化,验证,等等. ActionSupport是Action下延伸出来的类,它 ...
- struts2之action生命周期和ActionSupport
文章目录 1 action生命周期 2 继承ActionSupport类 2.1 基本的数据验证 2.2 访问本地信息 1 action生命周期 Struts2的Action的生命周期是:Struts ...
- Struts2学习第七课 ActionSupport
com.opensymphony.xwork2.ActionSupport类是默认的Action类,如果某个Action节点没有配置class属性,则ActionSupport即为待执行的Action ...
- struts2配置详解
01.Struts 2基本结构 使用Struts2框架实现用登录的功能,使用struts2标签和ognl表达式简化了试图的开发,并且利用struts2提供的特性对输入的数据进行验证,以及访问Servl ...
- struts2 validate验证
转自:https://blog.csdn.net/houpengfei111/article/details/9038233 自定义拦截器 要自定义拦截器需要实现com.opensymphony.xw ...
- Struts2问题总结
1 如何搭建Struts2开发环境? Struts2 获取 http://struts.apache.org/download.cgi Struts-2.3.16.3-all.zip 创建Web项 ...
- Struts2入门这一篇就够了
前言 这是Strtus的开山篇,主要是引入struts框架...为什么要引入struts,引入struts的好处是什么,以及对Struts2一个简单的入门.... 为什么要引入struts? 既然Se ...
- Struts2新特性
Struts2与Struts1的对比 Action 类: • Struts1要求Action类继承一个抽象基类.Struts1的一个普遍问题是使用抽象类编程而不是接口. • Struts 2 Acti ...
最新文章
- 面试官:谈谈你对 Spring AOP 的了解?请加上这些内容,绝对加分!
- “sudo: go:找不到命令”完美解决方案
- linux系统硬盘使用过高,磁盘IO过高时的处理办法
- 51. N 皇后(回溯算法)
- python 面向对象教程:访问限制
- MyBatisPlus3.x代码生成器生成实体类自定义需要填充的字段
- java处理高并发高负载类网站的优化方法
- java计算并显示学生的成绩_Java开学测试-学生成绩管理系统
- CVPR 2021 Oral | GLEAN: 基于隐式生成库的高倍率图像超分辨率
- Spring Mvc + Spring + Mybatis3 搭建Web工程详解
- HTML+JS 写一个 个人博客(初学版)
- android页面监听扫描枪,Android监听扫描枪内容(二)
- 2014世界10大DRAM公司
- plc顺序控制设计法是什么?
- Python 网络编程
- airflow实现Java定时任务,AirFlow定时调度执行Talend ETL任务
- ABB机器人——设置定时检测机器人状态
- SFDC数据导出的几种方式
- Laravel Elasticsearch
- java生成圆形二维码logo
热门文章
- 非参数统计的Python实现——符号检验
- 非参数统计单样本非参数检验之符号检验
- 与孩子一起学编程15章
- 元气骑士没有手柄怎么解锁机器人_元气骑士机器人怎么解锁?机器人获取方式和技能介绍...
- 全球及中国信用卡生成器行业投资模式及投资策略分析报告2022-2028年
- UG软件模具设计时常用命令以及UG软件默认的快捷键
- 性能测试 查看Android APP 帧数FPS的方法
- 研磨设计模式--抽象工厂模式
- refprop物性库_Refprop9.1_Refprop(制冷剂物性查询软件)下载 v9.1免费版 附教程 - 121下载站...
- C4D常用快捷键与自定义快捷键分享