action的学习

来源:互联网 发布:周易生辰八字起名软件 编辑:程序博客网 时间:2024/05/22 01:45

这是一个简单的登录操作

<s:textfield name="username" label="用户名"/>

<s:password name="passwword" label="密码"/>

label属性,可以提示用户,比jsp要好的多

我们觉得jsp好像有点糊涂 如何做action呢,有几种方式

1.javabean ,里面必须有一个execute方法

2 实现action 接口

3  继承actionsupport 抽象类

好啦,我们分别看下

通过前面的例子我们感觉action好像和servlet类似 你的感觉是对的,是处理逻辑单元,相当于控制器

一,action的简介

多数的mvc框架中的control层 都是一个java对象,按照惯例通常把这个层面上的java对象统称action层,控制层或者model层

mvc:model------controller-----view

          模型层-------控制层----------视图层(jsp,或其他视图)

action的定义 

传统的mvc框架中,control层一般是一个类似servlet的一个java对象,因为从自责上讲 control 层要完成以下职责

1:接受从web容器传递过来的参数(view层)并做恰当的类型转化

2:调用逻辑处理

3 搜集数据,并返回到视图

struts2 有两个重要的控制器 strutsPrepareAndexecutefilter:中央控制器(核心控制器,struts框架提供),负责接受所有请求

这个认识吗?好像熟悉。我带你看下,他在哪里配置。
 明白,在web.xml中,他是一个过滤器。这里算是一个控制器,而且是中央控制器,这个要记住啊。

 Action: 业务逻辑控制器,负责处理单个特定请求。
这里我们看到,将每一个Action作为一个控制器来看待,而没有当做Model层。这个问题不大。

如何实现action呢

1 javabean我们做了 而且一定要有个execute方法

2  实现action借口

3  继承actionsupport抽象类

一、实现Action接口。
我们看下源代码。我不知道他在哪个包下,咋办?
哈哈


我们还找不到,因为struts2的源代码和xwork的源代码是分开的。咋办?也无所谓的。我们java基础说过,接口中只有常量和抽象方法。对吧

我们用接口名.常量,就可以了。。

public static final String ERROR="error";
public static final String INPUT="input";
public static final String LOGIN="login";
public static final String NONE="none";
public static final String SUCCESS="success";

java基础好,没有源代码也可以,我们还有反射机制啊

你会问他有啥方法,我们可以做一个类继承它,如果有抽象方法的话我们必须实现它,否者就是抽象类了,public String execute() throw Exception;

这个就是他的抽象方法

我们按照昨天的方式实现Login1.

我们要配置了,一个<package>中可以有多个<action>子元素。

我们通过控制台,可以看到我们已经进入Login1这个action的execute方法中。

二、继承ActionSupport抽象类。


这里我们做一个类Login2  继承ActionSupport抽象类,当然了,我们这里要覆盖execute方法。


我天,ActionSupport方法中有那么多方法!!!!,是啊,今后就继承它吧,它是最常用的。
好。!我们继续。剩下的做法跟前面一致,我就做了,你看下就可以了。

com.opensymphony.xwork2.Action
com.opensymphony.xwork2.Validateable
com.opensymphony.xwork2.ValidationAware
com.opensymphony.xwork2.TextProvider
com.opensymphony.xwork2.LocaleProvider
java.io.Serializable

actionsupport里实现了好多借口,主要的一个是实现了action接口,那我们以后继承actionsupport就可以了有了SUCCESS等常量


我们前面做的都是jsp页面表单都是分开的。我们通常将页面表单组合成一个javabean对吧。如果这样我们如何处理

jsp页面表单

<s:form action="login2.action">
       <s:textfield name="username" label="用户名"/>
       <s:password name="password" label="密码"/>
       <s:submit value="登陆"/>       
 </s:form>

我们做个javabean:user.java

这个javabean里面就是2个属性,它可不是action啊,不要搞混

我们做个login5 继承了actionsupport

我天,终于出错了。


NullPointerException
啥也没有得到。为啥呢?这里你记住,如果引入javabean了,你的页面表单必须这么写
user.username
user.password

这个页面表单的user名字必须和action中的user这个变量名一致

你觉得能否不再页面表单写上user,答:可以,但必须实现一个接口。这个接口叫ModelDriven

但必须在action中创建User user=new User();

如果你不使用ModelDriven接口,你必须在页面表单出写上user.username,当然可以不用在Action中创建对象,User user;就可以了,但必须有相应的setter,getter方法。这个地方好好弄下,总结下。下次,我们说下简单的验证。ok!就到这里









0 0