struts2常用对象有:
- ActionSupport
- ActionContext
- ServletActionContext
1. ActionSupport对象
1) struts2不要求我们自己设计的action类继承任何的struts基类或struts接口,但是有时为了方便实现我们自己的action,可以继承com.opensymphony.xwork2.ActionSupport类,并重写此类里的public String execute() throwsException方法。因为此类中实现了很多的实用接口,提供了很多默认方法,这些默认方法包括国际化信息的方法、默认的处理用户请求的方法等,这样可以大大的简化Action的开发。
2) Action实现方法:
1、普通的java类,里面有public Striing execute方法即可;(最常用)
2、实现Action接口;(一般不用)
3、从ActionSupport继承,好处在于可以直接使用Struts2封装好的方法。
2、实现Action接口;(一般不用)
3、从ActionSupport继承,好处在于可以直接使用Struts2封装好的方法。
publicclass UserAction extends ActionSupport {
……
public String login() {
........
if((user != null) && (user.getLoginName().equals("admin"))) {
Map<String, Object> session = ActionContext.getContext().getSession();
session.put("user", user);
return "success";
}
return "error";
}
}
2. ActionContext对象
1) ActionContext(com.opensymphony.xwork.ActionContext)是Action执行时的上下文,上下文可以看作是一个容器(其实我们这里的容器就是一个Map而已),它存放的是Action在执行时需要用到的对象。
2) ActionContext为Struts提供数据环境,维护着一个Map结构,ValueStack中的每一个元素都是根对象,Action位于ValueStack的最顶层。ActionContext中封装了servlet对象,从而将Action与Servlet解耦(即Action无需依赖任何Servlet API)。 Map结构如图:
3) 获取request、session的方法:
ActionContext context = ActionContext.getContext(); (单立模式)
Map<String, Object> request = (Map)context.get(“request”);//获取request 的参数
Map<String, Object> session = context.getSession();//获取session
Map<String, Object> application = context.getApplication();//获取application的AttributeMap
Map<String, Object> request = (Map)context.get(“request”);//获取request 的参数
Map<String, Object> session = context.getSession();//获取session
Map<String, Object> application = context.getApplication();//获取application的AttributeMap
4) getParameters()得到代表所有请求参数的 map对象; (url上的参数)
3. ServletActionContext对象
1) ServletActionContext(com.opensymphony.webwork. ServletActionContext),这个类直接继承了我们上面介绍的 ActionContext,它提供了直接与Servlet相关对象访问的功能,它可以取得的对象有:
1. javax.servlet.http.HttpServletRequest : HTTPservlet请求对象
2. javax.servlet.http.HttpServletResponse : HTTPservlet相应对象
3. javax.servlet.ServletContext : Servlet上下文信息
4. javax.servlet.ServletConfig : Servlet配置对象
5. javax.servlet.jsp.PageContext : Http页面上下文
2) 如果ActionContext能够实现我们的功能,那最好就不要使用ServletActionContext,让我们的Action尽量不要直 接去访问Servlet的相关对象。(下载的时候用到)
3) 不要在Action的构造函数里使用ActionContext.getContext(),因为这个时候ActionContext里的一些值也许没有设 置,这时通过ActionContext取得的值也许是null;同样,HttpServletRequest req = ServletActionContext.getRequest()也不要放在构造函数中,也不要直接将req作为类变量给其赋值。(要的时候再取)