本文包含知识点:
1.ActionContext对象及其方法
2.Action参数的传递
=======ActionContext对象及其方法=========
在Struts2.0中,Action已经与Servlet API完全分离,这使得Struts2.0的Action具有了更加灵活和低耦合的特性,与Struts1.0相比较而言是个巨大的进步。虽然Struts2.0的Action已经与Servlet API完全分离,但我们在实现业务逻辑处理时经常需要访问Servlet中的对象,如Session、Application等。Struts2.0 提供了一个名字为ActionContext的类,在Action中可以通过该类获得Servlet API。
ActionContext是一个Action的上下文对象,Action运行期间所用到的数据都保存在ActionContext中(如Session,客户端提交的参数等信息)。
在Action中可以通过下面的代码来创建和使用ActionContext类,关于该类的方法介绍如下所示:
ActionContext ac=ActionContext.getContext();
以下是ActionContext类的常用方法
1.Object get(Object key) :通过参数key来查找当前ActionContext中的值
2.Map getApplication() :返回一个Application级的Map对象
3.Static ActionContext getContext() :获得当前线程的ActionContext对象
4.Map getParameters() :返回一个包含所有HttpServletRequest参数信息的Map对象
5.Map getSession() :返回一个Map类型的HttpSession对象
6.Void put(Object key,Object value) :向当前ActionContext对象中存入名值对信息
7.Void setApplication(Map application) :设置Application上下文
8.Void setSession(Map session) :设置一个Map类型的Session值
===========================Action参数的传递================================
一般在Action里面会存放全局变量和局部变量的值,然后在对应的逻辑视图页面进行参数的接收。
全局变量的接收
1.通过struts2标签获取(<s:property value="name"/>),
2.el表达式(${name})
3.ognl表达式(<s:property value="#request.name"/>)。
4.嵌入java代码<%=request.getParameter("name")%>或者<%=request.getAttribute("name")%>,当然嵌入java代码的写法不推荐使用。
局部变量的设定和接收有如下几种方式:
(由于采用的是struts2框架,所以接收页面采用的都是struts2标签。当然可以选择其他的,这里就不赘述。)
1..获取Map类型的request、response、application。最常用的实例化方法如下:
Map request = (Map)ActionContext.getContext().get("request");
Map session = (Map)ActionContext.getContext().getSession();
Map application =(Map) ActionContext.getContext().getApplication();
设置值后 :request.put("name",name);
可以在Jsp页面获取 <s:property value="#request.name"/> 说明:<s:property/>为struts2的标签。
其他初始化方法详见http://blog.csdn.net/jdfkldjlkjdl/article/details/13770491
2.直接用ActionContext的对象传值:
ActionContext.getContext().put("name",name);
在jsp页面通过如下方式获取name值:<s:property value="#request.name"/>
3.获取Servlet里面的request对象
HttpServletRequest req = ServletActionContext.getRequest();
req.setAttribute("name",name);
可以在Jsp页面获取 <s:property value="#request.name"/>
4.获取Servlet里面的session对象(适用于重定向之后的jsp页面接收参数(前面几种无法传参时使用))
HttpServletRequest req = ServletActionContext.getRequest();//先获得request对象
HttpSession session1 = req.getSession(); //通过request对象获得session
session1.setAttribute("name",name);
可以在Jsp页面获取 <s:property value="#session.name"/>
注意:不论设置attribute的request/session名称是什么,jsp都用request/session关键字接收,Map类型的request/session等同。