💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
在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)