Struts2学习笔记(四):action中访问request,session以及applicationContext等web资源的方法
2015-08-26 17:34
549 查看
在struts2的action中有时会需要访问request,session以及applicationContext等web资源,这里我总结了四种可行的方法,供读者参考。
(1)使用ActionContext
(2)使用ServletActionContext
(3)实现RequestAware, SessionAware, ApplicationAware接口
上述四种方法中(1)和(3)与原始Servlet API是没有耦合的,但功能也相对较弱,(2)和(4)与原始Servlet API是紧密耦合的,可以提供完整的servlet中的功能
完整示例代码:http://download.csdn.net/detail/jiajia333666/9050793
(1)使用ActionContext
<pre name="code" class="java"><pre name="code" class="html">package com.jiajia.actions; import java.util.Map; import com.opensymphony.xwork2.ActionContext; public class TestActionContext { public String execute(){ //获取actionContext对象 ActionContext context = ActionContext.getContext(); //ActionContext中获取的application是一个Map,里面可以存储需要的参数。 Map<String, Object> application = context.getApplication(); //在application中放置一个参数applicationAttr application.put("applicationAttr", "通过ActionContext的getApplication()方法获取application"); //ActionContext中获取的session也是一个Map Map<String, Object> session = context.getSession(); //在session中放置一个参数 session.put("sessionAttr", "通过ActionContext的getSession()方法获取session"); //ActionContext中获取的request也是一个Map,但获取方法有别于session和application //ActionContext中并没有getRequest()方法(我还不理解为什么会这样) Map<String, Object> request = (Map<String, Object>) context.get("request"); //在request中放置一个参数 request.put("requestAttr", "通过ActionContext的get(\"request\")方法获取request"); return "success"; } }
(2)使用ServletActionContext
<pre name="code" class="java">package com.jiajia.actions; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import org.apache.struts2.ServletActionContext; /** * @author jiajia * 该类主要用来测试通过ServletActionContext类来 * 直接获取request、session以及application的方法 */ public class TestServletActionContext { public String execute(){ ServletContext application = ServletActionContext.getServletContext(); HttpServletRequest request = ServletActionContext.getRequest(); HttpSession session = request.getSession(); //在application中放置一个参数applicationAttr application.setAttribute("applicationAttr", "通过ServletActionContext.getServletContext()获取application"); //在session中放置一个参数 session.setAttribute("sessionAttr", "通过ServletActionContext.getRequest().getSession()获取session"); //在request中放置一个参数 request.setAttribute("requestAttr", "通过ServletActionContext.getRequest()获取request"); return "success"; } }
(3)实现RequestAware, SessionAware, ApplicationAware接口
package com.jiajia.actions; import java.util.Map; import org.apache.struts2.interceptor.ApplicationAware; import org.apache.struts2.interceptor.RequestAware; import org.apache.struts2.interceptor.SessionAware; /** * @author jiajia * 该类主要用来测试通过实现RequestAware, SessionAware, ApplicationAware接口,struts会自动向 * 对象中注入Map类型的application、session、以及request属性 */ public class TestAware implements RequestAware, SessionAware, ApplicationAware{ Map<String, Object> application; Map<String, Object> session; Map<String, Object> request; @Override public void setApplication(Map<String, Object> arg0) { this.application = arg0; } @Override public void setSession(Map<String, Object> arg0) { this.session = arg0; } @Override public void setRequest(Map<String, Object> arg0) { this.request = arg0; } public String execute(){ //在application中放置一个参数applicationAttr application.put("applicationAttr", "通过实现ApplicationAware接口获取application"); //在session中放置一个参数 session.put("sessionAttr", "通过实现SessionAware接口获取session"); //在request中放置一个参数 request.put("requestAttr", "通过实现RequestAware接口获取request"); return "success"; } }(4)实现ServletRequestAware, ServletContextAware接口
package com.jiajia.actions; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import org.apache.struts2.ServletActionContext; import org.apache.struts2.interceptor.ServletRequestAware; import org.apache.struts2.util.ServletContextAware; public class TestServletAware implements ServletRequestAware, ServletContextAware { ServletContext application; HttpServletRequest request; HttpSession session; @Override public void setServletContext(ServletContext arg0) { this.application = arg0; } @Override public void setServletRequest(HttpServletRequest arg0) { this.request = arg0; } public String execute(){ session = request.getSession(); //在application中放置一个参数applicationAttr application.setAttribute("applicationAttr", "通过实现ServletContextAware接口获取application"); //在session中放置一个参数 session.setAttribute("sessionAttr", "通过实现ServletRequestAware接口获取request再调用getSession()获取session"); //在request中放置一个参数 request.setAttribute("requestAttr", "通过实现ServletRequestAware接口获取request"); return "success"; } }
上述四种方法中(1)和(3)与原始Servlet API是没有耦合的,但功能也相对较弱,(2)和(4)与原始Servlet API是紧密耦合的,可以提供完整的servlet中的功能
完整示例代码:http://download.csdn.net/detail/jiajia333666/9050793
相关文章推荐
- android知识点1- 清除缓存代码
- iOS 多个tabBar之间跳转的问题
- 安卓adapter子项动态设置控件宽度以及扩展动画
- Android的Configuration
- Android App 升级 实现逻辑
- Android-使用DOM解析与生成XML文件
- Android下的USB Host介绍和开发
- Android ListView+CheckBox+EditText注意事项
- Android Service与Activity之间通信
- iOS 二维码扫面 相册图片二维码读取和二维码的生成
- iOS项目引用静态库文件.a
- iOS第三方地图-百度地图定位的封装
- Objective-C( 语法二)
- iOS 使用xib后获取view的frame出错的问题
- Android基础总结——进程优先级及提高优先级的方法(Service尽量不死之法)
- 转载分享:Android APP二次打包操作步骤介绍
- android执行移动动画后按钮点击错位问题解决
- Python sys.path.append
- Android资源访问机制—获取Resources对象
- android去掉顶部标题栏