struts2学习之访问Servlet对象的两种实现方式
来源:互联网 发布:失业金数据与非农数据 编辑:程序博客网 时间:2024/06/06 02:05
访问Servlet资源
由于struts2采用的是低侵入式设计,那么在struts.xml的动作类里要访问serlvet的相关资源可以通过以下2种方式:
- 通过使用org.apache.struts2.ServletActionContext类
- 通过实现*Aware接口
ServletActionContext类
类图
由类图可知,其中定义的方法均为静态的,因此我们可以很方便地去获取到与Servlet有关的资源。
eg:
//返回当前ActionContext对象ServletActionContext.getActionContext(HttpServletRequest req)//返回当前request域的值栈对象ServletActionContext.getValueStack(HttpServletRequest req)//获取此上下文的动作映射ServletActionContext.getActionMapping()//返回HTTP page域对象ServletActionContext.getPageContext()//返回HttpServletRequest对象ServletActionContext.getRequest()//返回HttpServletResponse对象ServletActionContext.getResponse()//返回servlet上下文ServletActionContext.getServletContext()
功能
这类是ActionContext的子类,提供访问动作名称(action name),值栈(ValueStack)之类的东西。
这类添加访问Web对象,如Servlet的参数,request属性和HTTP session之类的东西。
Aware接口
struts2提供了4个分别用来访问ServletContext、HttpServletRequest、HttpServletResponse和HttpSession对象的接口,只要根据自己的具体需要有选择地实现它们就可以了,这4个接口分别是:
- org.apache.struts2.util.ServletContextAware
- org.apache.struts2.interceptor.ServletRequestAware
- org.apache.struts2.interceptor.ServletResponseAware
- org.apache.struts2.interceptor.SessionAware
ServletContextAware接口
如果要从动作类内部访问ServletContext对象,可以实现该接口,它的定义如下:
/** * For components that have a dependence on the Servlet context. */public interface ServletContextAware { public void setServletContext(ServletContext context);}
在调用一个动作类时,struts将检查相关的动作类是否实现了该接口。如果是,struts将在填充动作属性之前,先调用该动作的setServletContext方法,并传递ServletContext对象后,再执行动作方法。在setServletContext方法内,你需要把ServletContext对象赋给一个当前ServletContext对象,如:
private ServletContext servletContext;@Overridepublic void setServletContext(ServletContext context) { this.servletContext = context;}
ServletRequestAware接口
如果要从动作类内部访问HttpServletRequest对象,可以实现该接口,它的定义如下:
public interface ServletRequestAware {/** * Sets the HTTP request object in implementing classes. * * @param request the HTTP request. */public void setServletRequest(HttpServletRequest request);}
说明:
所有Action类要访问servlet request对象必须实现该接口。
如果动作类是在servlet中使用,这个接口是唯一相关的环境。
注意,使用此接口会使Action捆绑到一个servlet环境,因此,如果可能的话应该避免像单元测试的事将会变得更加困难。
ServletResponseAware接口
如果要从动作类内部访问HttpServletResponse对象,可以实现该接口,它的定义如下:
public interface ServletResponseAware {
/** * Sets the HTTP response object in implementing classes. * * @param response the HTTP response. */public void setServletResponse(HttpServletResponse response);}
说明:
所有Action类要访问servlet response对象必须实现该接口。
如果动作类是在servlet中使用,这个接口是唯一相关的环境。
注意,使用此接口会使Action捆绑到一个servlet环境,因此,如果可能的话应该避免像单元测试的事将会变得更加困难。
SessionAware接口
该接口定义如下:
public interface SessionAware {
/** * Sets the Map of session attributes in the implementing class. * * @param session a Map of HTTP session attribute name/value pairs. */public void setSession(Map<String,Object> session);}
说明:
- SessionAware接口与以上3个接口有些小区别。实现该接口并不能将当前的HttpSession对象提供给你,你得到的将是一个java.util.Map类型的http session对象。
- Action类想要访问用户的HTTP session对象必须实现该接口。
- 这将给Action类访问一个MAP,Action类可以put一个可供后续请求访问的对象。
- 典型的使用可能是缓存用户数据,如姓名、或一个购物车。
以上。。。
- struts2学习之访问Servlet对象的两种实现方式
- struts2中,action访问servlet api的两种方式
- struts2中Action访问servlet的两种方式
- JVM学习笔记之对象访问的两种方式
- Struts2访问Servlet的三种方式
- struts2学习之表单校验的两种方式
- Struts2中Action访问Servlet API的两种方法
- Struts2中Action访问Servlet API的两种方法
- Struts2中Action访问Servlet API的两种方法
- struts2第十讲学习笔记,获取Servlet.api的两种方式
- Struts2获取Servlet API的两种方式
- 非IoC方式访问Servlet API的两种方法
- Struts2访问Servlet API的三种方式
- Struts2 访问 Servlet API 的四种方式
- Struts2访问Servlet API的三种方式
- Struts2中访问Servlet API的几种方式
- Struts2访问Servlet API的3种方式
- Struts2访问Servlet API的三种方式
- eclipse: building cdt
- ECB CBC and 3DES
- 黑马程度员——OC语言—— 内存管理原则
- Linux button按键驱动 多次中断控制相应LED灯亮灭闪
- UILabel添加点击事件
- struts2学习之访问Servlet对象的两种实现方式
- java学习路线2
- [LeetCode]Word Search
- spring容器使用外部文件
- 排序算法之选择排序
- 学英语《每日一歌》之right here waiting
- 安卓中的socket通讯
- HDU2833 WuKong(floyd + dp)经典
- Pow(x, n)