Struts2之Action
1、Action是应用的核心,Action类包含了对用户请求的处理逻辑。Action类也被称为 业务控制器
2、Action类是一个普通的POJO(传统的、普通的java对象,包含一个无参数的execute方法),无需继承任何基类或实现任何接口
3、Action来封装HTTP请求参数,包含于请求参数对应的实例变量,并提供对应的setter和getter方法。
public class LoginAction{
private String user;
//user的getter和setter方法
public String getUser(){return user;}
public void setUser(String user){
this.user=user;
}
public String execute(){ //默认处理用户请求方法
...
return resulterStr; //返回处理结果字符串
}
}
4、Action也可以封装处理结果
5、Struts2提供了一个Action接口,使用户开发的Action类更加规范。
6、Struts2提供了一个实现类:ActionSuport类(是Struts2默认的处理类,继承该类,会简化Action的开发)
Action访问ServletAPI
Struts2提供了一个ActionContext类,有如下常用方法:
Object get(Object key):调用HttpServletRequest的getAttribute(String name)方法
Object put(Object key,Object value)
Map getApplication():返回一个Map对象,模拟了ServletContext实例
static ActionContext getContext():获取系统的ActionContext实例
Map getParameters():获取所有的请求参数
Map getSession():返回一个Map对象,模拟了HttpSession实例
void setApplication(Map application):直接传入一个Map实例
void setSession(Map session)
Action直接访问ServletAPI
Struts2提供以下接口:
ServletContextAware:直接访问Web应用的ServletContext实例
ServletRequestAware:直接访问Web应用的HttpServletRequest实例
ServletResponseAware:直接访问Web应用的HttpServletResponse实例
例
public class Action implements Action,ServletResponseAware{
...
private HttpSerlvetResponse response;
//重写该接口必须实现的方法
public void setServletResponse(HttpServletResponse response){
this.response=response;
}
...
}
使用ServletActionnContext访问ServletAPI
ServletActionContext工具类提供如下静态方法:
static HttpServletRequest getRequest()
static HttpServletResponse getResponse()
static ServletContext getServletContext()
Action的配置
在struts.xml中配置Action。配置Action就是完成用户请求和Action之间的对应关系
Struts2使用包来组织、管理Action。
<package.../>
元素用于定义包配置,包含如下属性
name:必须属性。该属性指定包的名字。
extends:可选。指定该包继承的其他包。
namespace:可选属性。定义该包命名空间。
abstract:可选。指定是否为抽象包。抽象包不能包含Action定义
命名空间namespace:主要处理同一个Web应用中包含同名Action的情形
定义Action,至少指定该Action的name属性,既是名字,也是所处理请求的URL
class属性并不是必须,系统默认使用系统的ActionSupport类
Action只是一个逻辑控制器,并不直接对浏览者生成响应。Action处理完用户请求后,将指定的视图资源呈现给用户。
配置Action应配置逻辑视图和物理视图资源之间的关系,映射关系通过<result.../>
定义