十.xml配置文件中的action元素
10.1 作用与属性
作用:配置动作用的
属性:
- name:动作名称
method:动作类中的方法名称。默认是public String execute(){}
要求:public的
- 返回值必须是String
没有参数
- class:动作类全名。默认的动作类com.opensymphony.xwork2.ActionSupport是在struts-default.xml中定义的,如果想要更改默认配置,需要在配置文件中加入
<package name="p1" extends="struts-default" >
<default-class-ref class="自己的类名"></default-class-ref>
</package>
10.2 动作类的三种方式
- 方式一:动作类实现com.opensymphony.xwork2.Action接口。接口中的
常量,给动作方法返回值用的。用常量可以使你的应用规范和统一。
常量变量名 | 对应的值 | 说明 |
---|---|---|
SUCCESS | success | 动作方法执行一切OK |
NONE | none | 不转向任何的视图 |
ERROR | error | 动作方法执行时遇到了异常 |
LOGIN | login | 回显 |
INPUT | input | 一般转向登陆页面 |
2. 方式二:动作类继承com.opensymphony.xwork2.ActionSupport 推荐使用(如果配置没有指定action或class,默认使用ActionSupport)
3. 方式三:动作类就是一个POJO(Plain Old Java Object 原始的java对象),非常简单的javabean。
public class HelloAction{
}
10.3 动作访问
- 使用通配符
2. 动态方法调用
十一.结果类型视图
该部分内容指的就是struts配置文件中的result元素的使用
11.1 result元素
作用:为动作指定结果视图
属性:
- name:逻辑视图的名称,对应着动作方法的返回值。默认值是success。
- type:结果类型,指的就是用什么方式转到定义的页面。默认是dispatcher。
11.2 result元素的 type取值
type属性的取值在struts-default.xml中定义着
常用结果类型介绍:
- dispatcher:(默认值) 使用请求转发,转向一个页面。
- redirect:使用重定向,转向一个页面。
- redirectAction:注意:使用的是重定向。
- a.重定向到另一个相同名称空间的动作
- b.重定向到不同名称空间的动作
- chain:注意: 使用的是请求转发。
- a.转发到另一个相同名称空间的动作
- b.请求转发到不同名称空间的动作
11.3 result元素中param子元素
在转发或者重定向到不同包下的动作时,都用到了result元素的子元素param
param元素的作用:依赖注入(Dependence Injection)思想。
我们通过struts-default.xml中的resultTypes元素中配置可以看出,每个结果类型视图其实都是靠一个类来实现的。而param元素就是将配置的参数,注入到该类中。调用的是对应类的setter方法进行注入的。例如:redirectAction结果视图
该类中肯定会有对actionName和namespace属性的注入方法(setter方法)。
11.4 自定义结果类型
通过前面的内容,我们看出,其实结果类型就是一个类,这些类都实现了com.opensymphony.xwork2.Result接口。或者继承自该接口的实现类org.apache.struts2.dispatcher.StrutsResultSupport。 这些类都有一个doExecute方法,用于执行结果视图。
综上:我们也可以自己写一个结果视图。
例子:输出CAPTCHA图像的结果类型。CAPTCHA(Completely Automated Public Turing Test to Tell Computers and Humans Apart 全自动区分计算机和人类的图灵测试)————>简称:验证码。
- 第一步:写一个类,实现接口或者继承接口的实现类
- 第二步:在struts.xml文件中配置结果类型
- 第三步:在action配置时引用
扩展:通过可配置的参数,实现图像大小的调整
11.4 全局视图和局部视图
- 局部视图
- 全局视图
十二.在动作类中访问Servlet的API
- 第一种方式:使用ServletActionContext类
- 第二种方式:使用实现接口的方式
十二.分文件编写框架配置文件
12.1 不分文件开发可能产生的问题
就类似于我们在写java类时,所有代码都写在一个类里,甚至写在一个方法里。
当多个人都checkout了struts.xml文件时,第一个人提交了,后面的人在没有更新就提交时,第一个人写的可能就白写了。