一.excute方法
在structs.xml配置文件中,<action>里面如果没有写method属性,默认就会执行ActionSupport类里的excut方法。
1.Action类的execute()方法返回ActionForward对象,它包含了请求转发路径信息
(public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,HttpServletResponse response)
(1)ActionMapping:包含了这个Action的配置信息,和strutsconfig.xml文件中的<action>元素对应。
(2)ActionForm:包含了用户的表单数据,当Struts框架调用execute()方法时,ActionForm中的数据已经通过了表单验证。
(3)HttpServletRequest:当前的HTTP请求对象
(4)HttpServletResponse:当前的HTTP响应对象
2.public String execute()类(默认)
3.内置的Struts Action类:
–org.apache.struts.actions.ForwardAction
–org.apache.struts.actions.IncludeAction
–org.apache.struts.actions.DispatchAction
–org.apache.struts.actions.LookupDispatchAction
–org.apache.struts.actions.SwitchAction。
4.模型代表应用的业务数据和业务逻辑。Struts作为一个WEB框架并没有为创建模型组件提供现成的框架。但是Struts允许使用其它模型框架来处理应用的业务逻辑。比如:EJB、JDO、JavaBean、ORM、Spring等。
二Struts2属性驱动与模型驱动
1.为什么要使用属性驱动和模型驱动
struts2与struts很大的不同点在于,struts的execute方法提供了HttpServletRequest和HttpServletResponse方法在获取客户端提交的数据信息的时候需要使用HttpServletRequest的getParameter()方法,并且还需要进行必要的数据类型转换。如何客户端提交的数据量大的时候,我们则需要写很多的getParameter方法。这样代码量就相应的增加不少。但是struts2为我们提供了属性驱动和模型驱动,它不需要我们写很多的获取值的方法。而只需要我们在Action中定义相应的getter方法,在界面上以Action中的变量名作为表单元素的name属性值即可。
2.属性驱动
对于属性驱动,我们需要在Action中定义与表单元素对应的所有的属性,因而在Action中会出现很多的getter和setter方法
3.模型驱动(getModel()类返回一个对象)
对于模型驱动,使用的Action对象需要实现ModelDriven接口并给定所需要的类型.而在Action中我们只需要定义一个封装所有数据信息的javabean
4.属性和模型驱动的相同点
当我们使用属性驱动和模型驱动的时候,必须将表单的元素中的name属性值与我们定义接收数据信息的变量名对应起来。
三.注意
1、属性驱动:
(1).表单中的name值和对应的action类中的私有属性的属性名称一定要一致;
(2).action类中所有的私有属性必须有其getter和setter方法;
2.模型驱动:
(1).action类还要实现ModelDriven<T> 接口;
(2).ModelDriven<T> 接口中的泛型类 是要封装 的pojo类(比如:ModelDriven<User>);
(3).action类中要有如下声明,比如:private Users us = new Users();
注意,一定要实例化us,不能只声明而不初始化;
(4).action类中要实现ModelDriven<T>接口的getModel()方法,里面要返回已声明并初始化的pojo对象。
(5).模型驱动的struts.xml配置文件中还要为该action添加如下两个拦截器:
<interceptor-ref name="modelDriven"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>