Struts2学习笔记1

 准备工作,下载稳定版本的struts2包
导入必需的最小jar包
Commons-logging-1.0.4.jar
Freemarker-2.3.8.jar
Ognl-2.6.11.jar
Struts2-core-2.0.11.jar
Xwork-2.0.4.jar
建立web.xml(简单的配置如下)


创建struts.xml(先忽略action的配置)

 



创建前台页面

<!--EndFragment-->
加上path,让所有的路径变为绝对路径,防止后台路径转化和前台路径转化出差
创建Action
Action类的创建有三种方式
不继承、不实现任何父类、接口(但前提是提供public String execute()方法)
如:LoginAction.java

<!--EndFragment-->
要提供属性的get、set方法(养成习惯,属性名字中只有一个字母大写,由于在某些框架中遇到两个大写报错的情况,算是个命名规范吧,个人理解,可能不对)
B、实现Action接口(com.opensymphony.xwork2.Action)

public String execute() { 
if(username.trim().equalsIgnoreCase("admin") && password.equals("1111")) { 
return "loginSuc"; 
} 
return "loginFail"; 
} 

 实现这个方法
C、继承自ActionSupport类(com.opensymphony.xwork2.ActionSupport)最常用的方式,可以重写父类提供的很多方法(代码不再赘述)


以上三种方法中都有get、set方法,这里面get、set方法名字后面跟的字母要与前台页面的属性名字对应,如username对应的是getUsername(),setUsername()


Action类的写法有三种方式
属性驱动:将所有的属性写在Action中,如上例
属性驱动:如果属性过多,我们可以抽离出一层vo层,如:

<!--EndFragment-->
在Action中将vo作为属性,提供vo对象的get、set方法

<!--EndFragment-->
此时前台页面需要改动,传入的应该是user.username如下

<!--EndFragment-->
前台传递的user对应的是action中User对象的名称,不是vo中User名称
即:如果Action中这样声明:private User person ;那么前台应该是person.username
模型驱动方式:Action需要实现com.opensymphony.xwork2.ModelDriven接口

<!--EndFragment-->
需要实现getModel方法,这里采用泛型,需要指定getModel的返回类型
如public class LoginAction implements ModelDriven<User>
前台修改为  <s:property value ="user.usename">
其实,模型驱动必须实现ModelDriver接口,以及必须实现getMode()方法,该方法把Action和以及对应的Model实例关联。配置属性驱动和模型驱动的方式一样,在struts.xml文件中配置对应的Action即可,那他怎么实现的?
    那么,我们要看到Struts2是一个拦截器为核心的框架,在struts_default.xml文件里面可以发现对应的拦截器的设置。
   而我们在属性驱动模型下在JSP中访问属性时:
   <s:property value="username">
  而在模型驱动模型下在JSP中访问属性时:
  <s:property value ="model.usename">
但是,Struts2会自动识别使用何种驱动模式,省略model.系统自动会关联到model.username的属性值。
推荐使用第二种方式,第三种方式有助于理解struts2

下面看一下执行的流程:
前台页面有动作login.action会发送到web.xml(web.xml注明所有请求都经过filter),struts2的filter会判断后缀是action的发送到struts.xml找name为前台指定的name的action类,如:前台是login.action,会在struts.xml中找action name="login"对应的class,然后执行class中的execute方法,executr方法返回字符串必须要与struts.xml中指定的<result name="String">对应,转到对应的jsp页面。在jsp页面中取值的时候,使用的是vo.属性的方式取值的,struts2已经把vo放在了栈中,在request范围内可以取到值。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值