暑期ssh框架之struts2学习笔记二

     struts2实现一次请求和实现类的对应关系的文件是struts.xml,这个文件可以说是整个struts2框架的核心,下面来讲解一下这个文件,这个文件的树状图结构如下所示:

     说明信息以及头文件的格式是固定的,这里不再赘述,主要是看一看他的文件的组织方式,他的constant标签,package标签,action标签以及result标签。struts标签用于配置常量,主要使用key-value对的形式,具体对应于标签中的属性值就是name和value属性,具体如下代码所示:

<!-- 演示constant标签的使用方式-->
<struts>
   <!--设置文件默认编码集为UTF-8-->
   <constant name="struts.i18n.encoding" value="UTF-8"/>
   <!--设置使用开发模式-->
   <constant name="struts.devMode" value="true"/> 
</struts>
需要注意的是,还可以在struts.properties文件以及web.xml文件中配置常量的值,但需要注意的是,常量的值最终以web.xml中配置的为准,若是想了解如何配置常量,请参见教材15-16页,或者关注我的后续博客。

   包配置的作用暂时不是很清楚,但有一点很明确,要想配置action,必须先使用package标签,package标签的配置方式几乎是固定的,如下所示:

<package name="VALUE" namespace="/" extends="struts-default">
       ...
</package>
name属性的值是这个包以被其他的包引用的唯一标识,namespace和extends分别表示命名空间和继承自其他包,这里暂时不用管它们。
下面讲述action属性,这个action实现了用户请求和处理类之间的映射关系,这种映射关系在笔记一已经解释过了,这里就不再继续赘述,着重讲解一下实现类吧。

这个实现类也叫控制类,主要是放在src目录下自己定义的包中,这一点可以由这个类的全限定名看出,如:cn.itcast.action.LoginAction.java,,主要的实现方式是继承ActionSuppot类,常见实现方式如下所示:

package cn.itcast.action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport {
        private static final long seriaVersionUID=1L;
       private String username; //用户名
	private String password; //密码
	// username的getter和setter方法
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	// password的getter和setter方法
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	@Override
	public String execute() throws Exception {
		//获取ActionContext对象
		ActionContext context = ActionContext.getContext();
		if ("itcast".equals(username) && "123".equals(password)) {
			//将用户名和密码信息放入context对象中
			context.put("username", username);
			context.put("password", password);
			context.put("success", "用户登录成功!");
			return SUCCESS;
		} else {
			//定义登录失败的错误信息
			context.put("error", "用户登录失败!");
			return ERROR;
		}
	}
}
   上面代码是一个典型的控制类,注意其中有一行语句是:
    private static final long seriaVersionUID=1L;
任何控制类,只要它继承自ActionSupport,就必须添上这行语句,否则,就会报错。其中有两个私有属性username和password,必须实现他的setter和getter方法,为什么呢?当我们向服务器发送请求时,会携带一定的信息,例如用户输入的姓名和密码,这些信息会通过名称匹配的方式进行值传递,例如下行代码:

jsp文件中:                                       java控制类文件中:                     Servlet API  context中:

<input type="text" name="username">             private String username;                     username

<input type="text" name="password">             private String password;                      password


上面不同文件中的变量虽然名字是一样的,但占据的内存位置不一样,但是他们的值却根据变量名从左往右依次传播,最红要返回相应页面时,若在jsp页面中使用  ${... }  的方式取值,以context中的为准。
这种数据传递方式叫做“基本数据类型字段驱动方式的数据传递”,除此之外还有“直接使用域对象字段驱动方式的数据传递”以及“模型驱动数据传递”,这三种方式各有优劣,其区别在教材29-34页可查。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值