Struts2讲义3(转载)

使用Action类控制导航业务数据
Struts2中Action充当着一个关键的角色。它解决了如何把JSP页面上的数据根据实际开发项目中具体的业务逻辑来进行处理的问题。
技术要点
本节代码使用登录功能作为例子,详细解析LoginAction类。

如何使用Execute方法处理业务逻辑。
 如何处理Form表单数据。
 HTTP的session对象在Action主要使用方式。
 ActionMapping对象配置文件中处理流程。

演示代码

Java代码 复制代码
<!--------------------------文件名: LoginAction .java--------------------------->
public class LoginAction {
	// Action类公用私有变量,用来做页面导航标志
	private static String FORWARD = null;
	//用户名属性
	private String username;
	//密码属性
	private String password;
	//取得用户名值
	public String getUsername() {
		return username;
	}
	//设置用户名值
	public void setUsername(String username) {
		this.username = username;
	}
	//取得密码值
	public String getPassword() {
		return password;
	}
	//设置密码值
	public void setPassword(String password) {
		this.password = password;
	}

	public String execute() throws Exception {
		username = getUsername();  	//属性值即JSP页面上输入的值
		password = getPassword();   	//属性值即JSP页面上输入的值

		try {
			// 判断输入值是否是空对象或没有输入
			if (username != null && !username.equals("") && password != null
					&& !password.equals("")) {
				ActionContext.getContext().getSession().put("user", getUsername());
			// 根据标志内容导航到操作成功页面
				FORWARD = "success";
			} else {
			// 根据标志内容导航到操作失败页面
				FORWARD = "input";
			}
		} catch (Exception ex) {
			ex.printStackTrace();
		}
		return FORWARD;
	}
}

Action类映射配置。

Java代码 复制代码
  1. <!------------------------------------文件名:struts.xml--------------------------->   
  2.     <action name="Login"  class="com.example.struts.action.LoginAction">   
  3.         <result name="input">/jsp/login.jsp</result>   
  4.         <result name="success">/jsp/success.jsp</result>   
  5. </action>  
<!------------------------------------文件名:struts.xml--------------------------->
	<action name="Login"  class="com.example.struts.action.LoginAction">
		<result name="input">/jsp/login.jsp</result>
		<result name="success">/jsp/success.jsp</result>
</action>

代码解释
(1)Struts2中每一具体的Action类其实都是将Struts1中的FormBean类和Action类代码都放在一起,所以看起来就是一个简单的JavaBean类(按照现在流行说法是POJO,Plains Ordinary Java Object。无格式普通Java对象)。比如代码中用户名和密码两个变量都是字符串类型变量,使用get,set方法可以从JSP页面上得到输入的值内容。
(2)Action类中最主要的方法为execute方法,Struts1中它一共有四个参数。返回一个ActionForward对象。而在Struts2中为了不侵入Servlet的类和方法,同时为了更好的解耦,符合现在Web项目松耦合开发理念,所以这四个参数都已经不用了。Struts2中返回的也是一个普通字符串,此字符串内容就是之前所述的导航页面的唯一标识。
(2)代码中用户名和密码两个变量通过get方法得到JSP页面上输入的值内容,然后判断这两个变量是否为空对象或者字符串内容为“”,即没有输入任何数据。如果为空或者没有输入任何数据则mapForward赋值为“input”,这样就导航到错误页面。反之,则mapForward赋值为“success”,导航到成功页面。
细心的读者可以发现LoginAction类中给它赋的 “success”、“input”两个值在struts.xml中<action>元素的< result >属性中都有定义。这就是之前所说的唯一标识指向URL中的JSP页面。
注意:之所以操作失败后mapForward赋值为“input”,而不是“error”或“failure”是为了Struts2校验使用考虑,具体原因见下节。
(3)用户名变量的值在实际项目中有可能会被用到,因此把它放入session属性里。注意:该session和hibernate中的session是两回事情,它是HTTP请求中的session对象,getAttribute方法和setAttribute方法是开发中经常用到的。它的应用范围是整个当前HTTP请求中,所以当用setAttribute方法将对像值放入后,可以在任何业务逻辑需要使用对象值时候用getAttribute方法取出。至于hibernate中的session我们在之后章节中另外具体讲述。在代码里Struts2把session也封装起来。通过Struts2包里自带的ActionContext类来调用,首先先得到当前HTTP应用中内容,然后通过getSession方法得到Sessions对象,但Struts2是用一个map对象来标识,也就是说getSession方法得到是一个Sessions对象封装处理后的结果。所以代码中可以使用put等map的方法,而不是setAttribute方法来将用户名变量值放入session。
(4)Action类的每一个实例都是和struts.xml中每一个<action>元素对应。这些struts.xml中的配置信息其实都是在系统开始运行时候读入内存,以供系统运行时候使用。比如此代码中通过name中的“Login”提交请求信息,control层将信息传递给LoginAction处理,LoginAction实例的execute方法被调用,将所对应的Form数据传入LoginAction,然后进行相应业务逻辑处理。

根据原作 https://pan.quark.cn/s/0ed355622f0f 的源码改编 野火IM解决方案 野火IM是专业级即时通讯和实时音视频整体解决方案,由北京野火无限网络科技有限公司维护和支持。 主要特性有:私有部署安全可靠,性能强大,功能齐全,全平台支持,开源率高,部署运维简单,二次开发友好,方便与第三方系统对接或者嵌入现有系统中。 详细情况请参考在线文档。 主要包括一下项目: 野火IM Vue Electron Demo,演示如何将野火IM的能力集成到Vue Electron项目。 前置说明 本项目所使用的是需要付费的,价格请参考费用详情 支持试用,具体请看试用说明 本项目默认只能连接到官方服务,购买或申请试用之后,替换,即可连到自行部署的服务 分支说明 :基于开发,是未来的开发重心 :基于开发,进入维护模式,不再开发新功能,鉴于已经终止支持且不再维护,建议客户升级到版本 环境依赖 mac系统 最新版本的Xcode nodejs v18.19.0 npm v10.2.3 python 2.7.x git npm install -g node-gyp@8.3.0 windows系统 nodejs v18.19.0 python 2.7.x git npm 6.14.15 npm install --global --vs2019 --production windows-build-tools 本步安装windows开发环境的安装内容较多,如果网络情况不好可能需要等较长时间,选择早上网络较好时安装是个好的选择 或参考手动安装 windows-build-tools进行安装 npm install -g node-gyp@8.3.0 linux系统 nodej...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值