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了。
之后我们使用getApplication,getSession , 方法来获取application和session,当然细心的看我们发现方法的返回值并不是HttpServletContext等,而是一个Map,所以理所当然getAttribute和setAttribute方法变成了get和put方法。
当我们直接用act的get和put方法时,就相当于调用request的方法。
success页面我们就可以:
获取值。
从这里其实我们可以看出一些端倪,这里的返回值是一个Map类型,他并不是request等,所以request的一些方法,他是无法使用的,那么是否有办法真正的使用到ServletAPI呢,当然。
struts为我们准备了ServletActionContext类,通过这个类我们就可以得到真正的HttpServletRequest。
当然还有其他的办法,当时上面这种事使用最多的,所以其他就暂时记录了。
当然我们这里要注意,为什么struts既要支持ActionContext类又要支持ServletActionContext类,一个ServletActionContext不就搞定了吗?
其实不然,上面也说了避免耦合。当我们只是为了在servlet的这几个范围中放入我们要放入的值时,建议使用ActionContext,这样更专业。
有两种方法 ,第一种是在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,这样更专业。
相关文章推荐
- Struts2学习(五)【访问servletAPI方式】
- 【SSH三大框架】Struts2基础第二篇:Struts2的Action访问ServletAPI
- Struts2.x学习三(Action中访问Servlet API )
- JAVAEE学习——struts2_02:结果跳转方式、访问servletAPI方式、获得参数以及封装、练习:添加客户
- [原创]java WEB学习笔记55:Struts2学习之路---详解struts2 中 Action,如何访问web 资源,解耦方式(使用 ActionContext,实现 XxxAware 接口),耦合方式(通过ServletActionContext,通过实现 ServletRequestAware, ServletContextAware 等接口的方式)
- 框架 day27 Struts2 入门(概述,基本xml配置,动态方法调用,Action类,ServletAPI访问,结果集)
- Struts2 - Struts访问ServletAPI和OGNL学习(从零开始学习Strust2_07)
- struts2学习笔记之六(Action访问servlet的API以及复制项目小技巧)
- Struts2学习教程之Action类如何访问WEB资源
- day27_struts2のPPT学习3——03 访问Action.ppt
- Struts2的Action中访问servletAPI方式
- Struts2_学习笔记(五)----访问Web元素、include、默认Action、Action总结
- Struts2的Action访问ServletAPI的方式
- Struts2中Action访问ServletAPI
- 实现Action(含Action访问ServletAPI)
- struts2中如何根据请求路径定位到详细的访问action
- Struts2学习(三)【主配置文件配置_常量配置_动态方法配置_action书写方式】
- struts2中页面访问action的url问题,或许很简单
- Struts2 JSP的标准动作<jsp:forward>无法访问Action