Struts2day2(转载传智播客的老师讲义,博主只图查看方便)

Struts2_day02

上节内容

1 struts2概述

 

2 struts2入门案例

 

3 struts2底层执行过程

 

4 struts2相关配置

 

5 struts2action创建

 

6 struts2action方法访问

今天内容

1 结果页面配置

1)全局结果页面

2)局部结果页面

- 配置全局也配置局部,最终局部为准

 

3result标签type属性

- 默认值 dispatcher做转发

- redirect做重定向

- chain:转发到action

- redirectAction:重定向到action

 

2action获取表单提交数据

1)使用ActionContext类获取

2)使用ServletActionContext类获取

3)使用接口注入方式获取

- 使用ServletActionContext类操作域对象

 

3 struts2提供获取表单数据方式

1)属性封装

- 定义变量,变量和表单输入项name属性值一样,生成getset方法

2)模型驱动封装(重点)

- 实现接口,实现接口里面的方法,表单输入项name属性值和实体类属性名称一样

3)表达式封装

4)表达式封装和模型驱动封装比较

- 相同点:可以把数据封装到实体类对象里面

- 不同点:表达式封装可以封装到不同的实体类里面

 

4 struts2获取数据封装到集合中(会用)

1)封装到list集合

2)封装到map集合

 

5 案例-添加客户功能

 

 

结果页面配置

全局结果页面

1 result标签配置action方法的返回值到不同的路径里面

 

2 创建两个action,执行默认的方法execute方法,让两个action的方法都返回success,返回success之后,配置到同一个页面里面

1)如果多个action,方法里面返回值相同的,到页面也是相同的,这个时候可以使用全局结果页面配置

2)在package标签里面配置

局部结果页面

1)配置全局页面,也配置了局部页面,最终以局部配置为准

 

Result标签的type属性

1 result标签里面除了name属性之外,还有一个属性 type属性

1type属性:如何到路径里面(转发还是重定向)

 

2 type属性值

1)默认值,做转发操作,值是 dispatcher

 

2)做重定向操作,值是 redirect

 

2)上面两个值dispatcherredirect,这两个值一般针对到页面中配置,

配置到其他的action里面

- chain:转发到action,一般不用,缓存问题

- redirectAction:重定向到action

 

Action获取表单提交数据

1 之前web阶段,提交表单到servlet里面,在servlet里面使用request对象里面的方法获取,getParametergetParameterMap

 

2 提交表单到action,但是action没有request对象,不能直接使用request对象

 

3 action获取表单提交数据主要三种方式

1)使用ActionContext

2)使用ServletActionContext

3)使用接口注入方式

 

使用ActionContext类获取

1)因为方法不是静态的方法,需要创建ActionContext类的对象

2)这个ActionContext类对象不是new出来的,

 

1 具体演示

1)创建表单,提交表单到action里面

2action使用ActionContext获取数据

 

使用ServletActionContext类获取

1)调用类里面静态方法,得到request对象

 

使用接口注入(了解)

1 action实现接口,为了得到request对象

 

在action操作域对象

1 requestsessionservletContext域对象

 

2 使用ServletActionContext类操作

 

Struts2封装获取表单数据方式

原始方式获取表单封装到实体类对象

 

属性封装(会用)

1 直接把表单提交属性封装到action的属性里面

 

2 实现步骤

1)在action成员变量位置定义变量

- 变量名称和表单输入项的name属性值一样

2)生成变量的set方法(把setget方法都写出来)

 

3 使用属性封装获取表单数据到属性里面,不能把数据直接封装到实体类对象里面

 

模型驱动封装(重点)

1 使用模型驱动方式,可以直接把表单数据封装到实体类对象里面

 

2 实现步骤

1action实现接口 ModelDriven

2)实现接口里面的方法 getModel方法

- 把创建对象返回

3)在action里面创建实体类对象

 

 

 

3 使用模型驱动和属性封装注意问题:

1)在一个action中,获取表单数据可以属性封装,使用模型驱动封装,

不能同时使用属性封装和模型驱动封装获取同一个表单数据

如果同时使用,之后执行模型驱动

 

表达式封装(会用)

1 实现过程

1)使用表达式封装可以把表单数据封装到实体类对象里面

 

第一步 action里面声明实体类

第二步 生成实体类变量的setget方法

第三步 在表单输入项的name属性值里面写表达式形式

2 把表达式封装归类到属性封装里面

 

比较表达式封装和模型驱动封装

1 使用表达式封装和模型驱动封装都可以把数据封装到实体类对象里面

 

2 不同点:

1)使用模型驱动只能把数据封装到一个实体类对象里面

- 在一个action里面不能使用模型驱动把数据封装到不同的实体类对象里面

 

2)使用表达式封装可以把数据封装到不同的实体类对象里面

 

封装到集合里面

封装数据到List集合

第一步 action声明List

第二步 生成list变量的setget方法

第三步 在表单输入项里面写表达式

 

封装数据到Map集合

第一步 声明map集合

第二步 生成getset方法

第三步 在表单输入项的name属性值里面写表达式

 

案例-添加客户功能

1 模型驱动获取表单数据

2 hibernate实现

3 添加之后到列表页面中,让列表的action执行一次

 

完成任务

1 客户列表功能

 

2 添加客户功能

 

3 修改客户

 

4 删除客户

 

 

目录 1、 C++对C的扩展 1 1简单的C++程序 1 1.1求圆的周长和面积 1 1.2初学者易犯错误模型 3 2程序设计方法的发展历程 4 3 C语言和C++语言关系 6 4 C++对C的加强 6 4.1 namespace命名空间 6 4.2 “实用性”增加 6 4.3 register关键字增强 6 4.4变量检测增强 6 4.5 struct类型加强 6 4.6 C++中所有的变量和函数都必须有类型 6 4.7新增Bool类型关键字 6 4.8三目运算符功能增强 6 5 C/C++中的const 6 1 const基础知识(用法、含义、好处) 6 2 C中“冒牌货” 6 3 const和#define相同之处 6 4 const和#define的区别 6 5 结论 6 6引用专题讲座 6 1引用(普通引用) 6 2常引用 6 3 const引用结论 6 4const修饰类 6 5综合练习 6 7C++对C的函数扩展 6 1 inline内联函数 6 2 默认参数 6 3 函数占位参数 6 4 默认参数和占位参数 6 5 函数重载(Overroad) 6 8附录 6 附录1:C++语言对C语言扩充和增强的几点具体体现 6 附录2:C语言register关键字—最快的关键字 6 一、皇帝身边的小太监----寄存器 6 2、类和对象 6 1前言 6 2类和对象 6 2.1 基本概念 6 2.2类的封装 6 2.3 C++面向对象程序设计举例 6 2.4 作业 6 3对象的构造和析构 6 3.1构造和析构函数 6 3.2构造函数的分类及调用 6 3.3构造函数调用规则研究 6 3.4深拷贝和浅拷贝 6 3.5多个对象构造和析构 6 3.6构造函数和析构函数的调用顺序研究 6 3.7构造函数和析构函数综合练习 6 3.8 对象的动态建立和释放 6 4静态成员变量成员函数 6 4.1静态成员变量 6 4.2静态成员函数 6 4.3综合训练 6 5 C++面向对象模型初探 6 5.1基础知识 6 5.2编译器对属性和方法的处理机制 6 5.3总结 6 5.4 this指针 6 5.5全局函数PK成员函数 6 6 6友元 6 6.1友元函数 6 6.2友元类 6 7强化训练 6 1 static关键字强化训练题 6 2 数组类封装 6 3小结 6 8运算符重载 6 8.1概念 6 8.2运算符重载的限制 6 8.3运算符重载编程基础 6 8.4运算符重载提高 6 8.5运算符重载在项目开发中的应用 6 8.7附录:运算符和结合性 6 2、 继承和派生 6 3.1继承概念 6 3.1.1类之间的关系 6 3.1.2继承关系举例 6 3.1.3 继承相关概念 6 3.1.4 派生类的定义 6 3.1.5 继承重要说明 6 3.2派生类的访问控制 6 3.2.1单个类的访问控制 6 3.2.2不同的继承方式会改变继承成员的访问属性 6 3.2.3“三看”原则 6 3.2.3派生类类成员访问级别设置的原则 6 3.2.4综合训练 6 3.3继承中的构造和析构 6 3.3.1类型兼容性原则 6 3.3.2继承中的对象模型 6 3.3.3继承中的构造析构调用原则 6 3.3.4继承与组合混搭情况下,构造和析构调用原则 6 3.3.5继承中的同名成员变量处理方法 6 3.3.6派生类中的static关键字 6 3.4多继承 6 3.4.1多继承的应用 6 3.4.2虚继承 6 3.5继承总结 6 4、多态 6 4.1多态 6 4.1.1问题引出 6 4.1.2面向对象新需求 6 4.1.3解决方案 6 4.1.4多态实例 6 4.1.5多态工程意义 6 4.1.6多态成立的条件 6 4.1.7多态的理论基础 6 4.2多态相关面试题 6 面试题1:请谈谈你对多态的理解 6 面试题2:谈谈C++编译器是如何实现多态 6 面试题3:谈谈你对重写,重载理解 6 #include <cstdlib> 6 #include <iostream> 6 using namespace std; 6 class Parent01 6 { 6 public: 6 Parent01() 6 { 6 cout<<"Parent01:printf()..do"<<endl; 6 } 6 public: 6 virtual void func() 6 { 6 cout<<"Parent01:void func()"<<endl; 6 } 6 virtual void func(int i) 6 { 6 cout<<"Parent:void func(int i)"<<endl; 6 } 6 virtual void func(int i, int j) 6 { 6 cout<<"Parent:void func(int i, int j)"<<endl; 6 } 6 }; 6 class Child01 : public Parent01 6 { 6 public: 6 //此处2个参数,和子类func函数是什么关系 6 void func(int i, int j) 6 { 6 cout<<"Child:void func(int i, int j)"<<" "<<i + j<<endl; 6 } 6 //此处3个参数的,和子类func函数是什么关系 6 void func(int i, int j, int k) 6 { 6 cout<<"Child:void func(int i, int j, int k)"<<" "<<i + j + k<<endl; 6 } 6 }; 6 void run01(Parent01* p) 6 { 6 p->func(1, 2); 6 } 6 int main() 6 { 6 Parent01 p; 6 p.func(); 6 p.func(1); 6 p.func(1, 2); 6 Child01 c; 6 //c.func(); //问题1 6 c.Parent01::func(); 6 c.func(1, 2); 6 run01(&p); 6 run01(&c); 6 system("pause"); 6 return 0; 6 } 6 //问题1:child对象继承父类对象的func,请问这句话能运行吗?why 6 //c.func(); //因为名称覆盖,C++编译器不会去父类中寻找0个参数的func函数,只会在子类中找func函数。 6 //1子类里面的func无法重载父类里面的func 6 //2当父类和子类有相同的函数名、变量名出现,发生名称覆盖(子类的函数名,覆盖了父类的函数名。) 6 //3//c.Parent::func(); 6 //问题2 子类的两个func和父类里的三个func函数是什么关系? 6 面试题4:是否可类的每个成员函数都声明为虚函数,为什么。 c++编译器多态实现原理 6 面试题5:构造函数中调用虚函数能实现多态吗?为什么? c++编译器多态实现原理 6 面试题6:虚函数表指针(VPTR)被编译器初始化的过程,你是如何理解的? 6 面试题7:父类的构造函数中调用虚函数,能发生多态吗? c++编译器多态实现原理 6 面试题8:为什么要定义虚析构函数? 6 其他 6 4.3多态原理探究 6 4.3.1 多态的实现原理 6 4.3.2如何证明vptr指针的存在 6 4.3.3构造函数中能调用虚函数,实现多态吗 6 5、纯虚函数和抽象类 6 5.1基本概念 6 5.2抽象类案例 6 5.3抽象类在多继承中的应用 6 5.3.1有关多继承的说明 6 5.3.2多继承的应用场景 6 5.4抽象类知识点强化 6 5.5面向抽象类编程思想强化 6 5.4.1案例:socket库c++模型设计和实现 6 5.4.2案例:计算员工工资 6 5.4.3案例:计算几何体的表面积和体积 6 5.6 C面向接口编程和C多态 6 5.6.1函数类型语法基础 6 5.6.2函数指针做函数参数 6 5.6.3函数指针正向调用 6 5.6.4函数指针反向调用 6 5.6.5.C动态库升级成框架案例 6 5.6.6附录:诸葛亮的锦囊妙计 6
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值