在TP中,我们在控制器中,通常是这样使用的。
![https://box.kancloud.cn/2d757a781cf125497115e1524ee3b3ca_416x906.png](https://box.kancloud.cn/2d757a781cf125497115e1524ee3b3ca_416x906.png)
往往,我们将用户认证、权限判断等功能写入HomeController中。
<hr />
Struts中,也是大同小异。在这里我们继承的类为:com.opensymphony.xwork2.ActionSupport。
在TP中,框架默认为每个ACTION对应着类中的某个方法。通过前面的学习,我们在使用Struts时,默认将每个Action对应着类中的固定方法`execute()`。其实,这只是框架的使用习惯不同而已(更多的是由于对请求数据的处理方法不同)。TP也是可以将action与某个类中的固有方法对应起来的,而Struts同样,也可以像TP那样使用。
由于每个Action都对应一个类,所以使用Struts时,我们变成了这样。
![https://box.kancloud.cn/a182d9b0af31527629cf56282f8fba15_1438x806.png](https://box.kancloud.cn/a182d9b0af31527629cf56282f8fba15_1438x806.png)
没错,这与我们前面学过的TP是完全相同的。
此时,我们将用户认证、权限判断等一系列功能写入到Action中。
考虑到CURD各个ACTION都是对教师进行的操作,所以存在一些共性,为了减少代码的冗余,我们再加入一个TeacherAction类。
![https://box.kancloud.cn/02031bfc0c363aff13789428e1c6466a_1416x1172.png](https://box.kancloud.cn/02031bfc0c363aff13789428e1c6466a_1416x1172.png)
<hr />
按上图,进行代码整理后,我们的目录结构如下:
![https://box.kancloud.cn/2c4a60195ecac8b804d5317aa8b4a517_536x350.png](https://box.kancloud.cn/2c4a60195ecac8b804d5317aa8b4a517_536x350.png)
> 由于我们对类名进行了修改,所以如果你发现struts提示找不到相关的类文件的话。应该能想到去修改struts.xml吧。
Action.java
```
package com.mengyunzhi.javaee.action;
import com.opensymphony.xwork2.ActionSupport;
public abstract class Action extends ActionSupport {
/**
* 用于类的序列化与反序列化,我们直接生成即可
*/
private static final long serialVersionUID = 1L;
}
```
由于Action, 只用来被继承,所以在此声明为:abstract ,在UML类图的中,该类的名字以斜体表示 .
TeacherAction.java
```
package com.mengyunzhi.javaee.action.teacher;
import com.mengyunzhi.javaee.action.Action;
public class Teacher extends Action {
/**
* 用于类的序列化与反序列化,我们直接生成即可
*/
private static final long serialVersionUID = 1L;
}
```
<hr />
阅读官方文档:
和查看其它的文档一下,我们首先找到文件的位置:
![https://box.kancloud.cn/b21151923a4075864707bb0b77158fd1_826x190.png](https://box.kancloud.cn/b21151923a4075864707bb0b77158fd1_826x190.png)
> 2.3的说明文档有些问题,在这里,我们使用2.5的。
然后进入这个文件夹,运行`http-server`,
![https://box.kancloud.cn/ce9bcabf7ce207b23cefe8af3351c6dc_1326x334.png](https://box.kancloud.cn/ce9bcabf7ce207b23cefe8af3351c6dc_1326x334.png)
按提示打开我们的浏览器, 选择`struts2-core-apidocs`,然后搜索ActionSupport
![https://box.kancloud.cn/6f6225529257de57e1207879ee73b8c0_1246x598.png](https://box.kancloud.cn/6f6225529257de57e1207879ee73b8c0_1246x598.png)
我们复制一些信息下来,简单的看一下它的说明。
```
// 包名
com.opensymphony.xwork2
// 类名
Class ActionSupport
// 类型
java.lang.Object
com.opensymphony.xwork2.ActionSupport
// 实现的所有的接口
All Implemented Interfaces:
// 下面这些名称,都是接口名, 我们随便在这个文字上点一下,还能看到接口的详细描述信息
Action, ValidationAware, LocaleProvider, TextProvider, Validateable, Serializable
// 已知的 子类(即:继承了本类的类)
Direct Known Subclasses:
DefaultActionSupport
// 对上面几项信息的详细说明
public class ActionSupport
extends Object
implements Action, Validateable, ValidationAware, TextProvider, LocaleProvider, Serializable
// 对本类的简单说明:
Provides a default implementation for the most common actions. See the documentation for all the interfaces this class implements for more detailed information.
```
继承ActionSupport后,我们在需要返回字符串"success"的地方,可以写为,也必须写为SUCCESS了。
```
return "success";
```
改写为:
```
return SUCCESS;
```
这是由于在
com.opensymphony.xwork2.Interface Action中,已经显示的为我们声明了几个字段.
![https://box.kancloud.cn/f6482bcfd3c72070d3211a3ec1233030_1736x654.png](https://box.kancloud.cn/f6482bcfd3c72070d3211a3ec1233030_1736x654.png)
> 官方文档: [http://127.0.0.1:8081/struts2-core-apidocs/com/opensymphony/xwork2/ActionSupport.html](http://127.0.0.1:8081/struts2-core-apidocs/com/opensymphony/xwork2/ActionSupport.html)
- README
- 第一章:准备
- 第二章:Hello World!
- 第一节:查看工程文件
- 第二节:JDK、JRE与环境变量
- 第三节:index.jsp
- 第三章:Hello Struts
- 第一节:Web.xml
- 第二节:单入口
- 第三节:Hello Struts
- 第四节:触发C层
- 第四章:建立数据表
- 第一节:建立实体类
- 第二节:测试一
- 第三节:测试二
- 第四节:引入Hibernate
- 第五节:配置Hibernate
- 第六节:建立连接
- 第七节:实体类映射数据表
- 第八节:完善数据表
- 第五章:教师管理
- 第一节:增加数据--add
- 第二节:增加数据--save
- 1 获取传入数据数据
- 2 数据写入测试
- 3 对接C层
- 第三节:数据列表
- 1 获取数据
- 2 重构代码
- 3 C层对接--初始化
- 4 C层添加数据
- 5 V层显示数据
- 6 获取数据库中数据
- 7 显示性别
- 8 分页
- 9 条件查询
- 第四节:修改数据
- 1 edit
- 2 update
- 第五节:删除数据
- 第六节:总结
- 第六章:重构C层
- 第一节:继承ActionSupport类
- 第二节:数据验证
- 第七章:前台分离(前台)
- 第一节:环境搭建
- 第二节:运行环境
- 第三节:共享开发环境
- 第四节:生产环境
- 第八章:前台开发(前台)
- 第一节:本地化
- 第二节:教师列表
- 1 引入M层
- 2 模拟后台返回数据
- 3 C与M对接
- 4 C与V对接
- 第九章:前后台对接(前后台)
- 第一节:后台输出json(后台)
- 第二节:对接前台(全栈)
- 第二节:对接API(前台)
- 第二节:跨域请求(后台)
- 第三节:重构代码(前台)
- 第十章:重构后台M层
- 第一节:数据访问DAO层
- 第二节:项目整体重构
- 第十一章:用户登陆(前后台)
- 第一节:制定规范
- 第二节:定制测试用例
- 第三节:后台输入测试代码(后台)
- 第四节:postman(后台)
- 第五节:新建用户登陆模块(前台)
- 第六节:代码重构(前台)
- 第十二章:班级管理(前后台)
- 第一节:班级列表
- 1 原型开发
- 2 制定规范
- 3 后台对接开发
- 4 前台对接开发
- 第二节:Add
- 1 原型开发
- 2 制定规范
- 3 后台对接开发
- 4 前台对接开发
- 第三节:Save
- 1 制定规范
- 2 后台对接开发
- 3 前台对接开发
- 第四节:Edit
- 1 原型开发
- 2 制定规范
- 3 后台对接开发
- 4 前台对接开发
- 第五节:Update
- 1 制定规范
- 2 后台对接开发
- 3 前台对接开发
- 第六节:Delete
- 1 制定规范
- 2 后台对接开发
- 3 前台对接开发
- 第七节:小结
- 第十三章:班级管理(API)
- 第一节:ER图
- 第二节:create
- 1 实体层
- 2 dao层
- 3 service(server)层
- 4 action层
- 第三节:ManyToOne
- 第四节:Read
- 1 service(server)层
- 2 action层
- 第五节:update
- 1 service(server)层
- 2 action层
- 第六节:update
- 第十四章:重构服务层