您的位置:首页 > 编程语言 > Java开发

struts2学习(11)——action访问ServletAPI

2013-08-17 10:41 357 查看
在上一次笔记中我记录了,action来获取前台页面发送过来的params。

有两种方法 ,第一种是在action中定义所有我们需要使用到的属性,给它们增加get/set方法,当请求到达的时候,struts2的拦截器就会自动将这个属性的value赋到param上。

第二种方法是使用复合式的方式。例如我们的前台经常会传来用户的信息,那么我们就可以先定义一个类——user,将所有的user属性添加ok后,在action中定义user,添加get/set方法,前台使用user.name的方式来传递。

今天我要记录的是:action中我们来访问servletAPI,所有用过jsp,servlet的人肯定对application,session,request,response,cookie,pageContex,servletContext等非常熟悉,那么在action中我们怎么才能访问这些ServletAPI呢?

struts2为我们提供一个ActionContext类,因为struts2为了避免与servlet的耦合,所以它认为直接调用servletAPI是一种不安全的方法,提供ActionContext类,我们通过这个类就可以访问servletAPI了。

public class ServletapiAction {
public String execute(){
ActionContext act = ActionContext.getContext();
Map<String, Object> application = act.getApplication();
Map<String, Object> session = act.getSession();
act.put("request", "request");
application.put("application", "application");
session.put("session", "session");

return "success";
}
}
从这里我们可以看到ActionContext的getContext是为了获取系统的ActionContext实例

之后我们使用getApplication,getSession ,  方法来获取application和session,当然细心的看我们发现方法的返回值并不是HttpServletContext等,而是一个Map,所以理所当然getAttribute和setAttribute方法变成了get和put方法。

当我们直接用act的get和put方法时,就相当于调用request的方法。

success页面我们就可以:

<body>
application:${applicationScope.application }<br/>
session:${sessionScope.session }<br/>
request:${requestScope.request }
</body>


获取值。

从这里其实我们可以看出一些端倪,这里的返回值是一个Map类型,他并不是request等,所以request的一些方法,他是无法使用的,那么是否有办法真正的使用到ServletAPI呢,当然。

struts为我们准备了ServletActionContext类,通过这个类我们就可以得到真正的HttpServletRequest。

public String otherFunction(){
HttpServletRequest request = ServletActionContext.getRequest();
HttpSession session = request.getSession();
HttpServletResponse response = ServletActionContext.getResponse();
ServletContext application = ServletActionContext.getServletContext();

return "success";
}
之后就和我们的servlet中的用法相同了。

当然还有其他的办法,当时上面这种事使用最多的,所以其他就暂时记录了。

当然我们这里要注意,为什么struts既要支持ActionContext类又要支持ServletActionContext类,一个ServletActionContext不就搞定了吗?

其实不然,上面也说了避免耦合。当我们只是为了在servlet的这几个范围中放入我们要放入的值时,建议使用ActionContext,这样更专业。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Struts servletAPI session
相关文章推荐