struts2:
struts.xml中标签的用法:
package:在struts2的配置文件中引入了面向对象思想,使用了分包管理。易于管理动作类。便于模块化开发动作类。
- name:包名。必须写,且唯一
- extends:继承
- abstract:把包声明为抽象包,用于别的包继承,一般不含action标签
- namespace:名称空间。访问路径就是名称空间➕动作名。需要加/
action:配置动作
- name:动作名称
- class:动作类的全名
- method:动作中的方法名称,用于处理请求。默认是public String 方法名(){}
方法的要求:
- 必须是public的
- 返回值必须是String
- 必须是无参的
action的三种实现方法:
- 自己写一个类,在struts.xml中配置,然后需要配置method方法。
- 实现action接口,重写excute()方法,接口中有一些常数
- 继承actionSuport,父类中就会有execute方法。推荐这种写法
在struts中,使用*作为通配符,然后用{1}{2}分别代表哪个*号。
result标签:为动作指定返回的视图,
属性:name,逻辑视图的名称,对应着动作方法的返回值,默认是success。
type,结果的类型,指的就是用什么样的方法转到定义的页面,默认是dispatcher转发。、
result中的type有四种类型,分别是dispatcher,redirect,chain,redirectAction。
dispatcher | (默认值)使用请求转发,转向一个页面。 |
redirect | 使用重定向,转向一个页面。 |
chain | 转发到另一个相同名称空间的动作 转发到不同名称空间的动作 |
redirectAction | 重定向到另一个相同名称空间的动作 重定向到不同名称空间的动作 |
param:用于action中的参数注入result,
全局视图:如果有时候我们写的一个功能需要被每一个Package标签都引用 ,那我们可以写一个抽象的包,在写一个自定义的结果类型,在抽象包中global-results标签中引用这个自定义的结果,然后用于其他包继承
动作类中servlet api的使用:
- 获取servlet 的api方式
- 第一种:通过ServletActionContext获取 【推荐使用】
- 第二种:通过注入方式:先让Action实现两个接口ServletRequestAware,ServletResponseAware
- 第二种注入方式原理是因为struts有个拦截器<interceptor name="servletConfig" class="org.apache.struts2.interceptor.ServletConfigInterceptor"/>来实现的