ActionContext与ServletActionContext的区别及认识
来源:互联网 发布:java线程sleep wait 编辑:程序博客网 时间:2024/05/17 07:08
我们知道struts2接受客户端请求,在Action中进行处理后,将视图结果返回。struts2容器自身不依赖于web容器,不用和servlet对象中的请求(request)、响应(response)进行关联,对于请求的参数,通过paramerInterceptor将参数封装在Action中,然后通过调用get、set方法将参数值设置进Action之中。如果仅仅获取参数,可能有时候满足不了开发的需求,有时我们要获取request或者response中的信息,要对其进行设置、处理。
一、ActionContext
我们知道,ActionContext是Action执行时的上下文,里面存放着Action在执行时需要用到的对象,也称之为广义值栈。Struts2在每次执行Action之前都会创建新的ActionContext,在同一个线程里ActionContext里面的属性是唯一的,这样Action就可以在多线程中使用。
actionContext对象的创建过程是static ThreadLocal actionContext = new ActionContextThreadLocal()。
ActionContextThreadLocal是实现ThreadLocal的一个内部类。ThreadLocal可以命名为"线程局部变量",它为每一个使用该变量的线程都提供一个变量值的副本,使每一个线程都可以独立地改变自己的副本,而不会和其它线程的副本冲突。这样ActionContext里的属性只会在对应的当前请求线程中可见,从而保证它是线程安全的。
用ActionContext得到Map类型的Request、Session、Application。
例子:
得到session、request有点区别,得到request用的是get("reqeust"),得到session用的是getSession()
也可以直接对Java Servlet Http的请求(HttpServletRequest)、响应(HttpServletResponse)操作,和上面的例子有点区别,注意区别。
ActionContext ctx = ActionContext.getContext();
用法就和Servlet中的request、response用法一样
二、ServletActionContext
它继承ActionContext,所以ServletActionContext也可以得到HttpServetRequest、HttpServletResponse,,它也提供了直接与Servlet相关对象访问的功能,它可以取得的对象有:
(1)javax.servlet.http.HttpServletRequest : HTTPservlet请求对象
(2)javax.servlet.http.HttpServletResponse : HTTPservlet相应对象
(3)javax.servlet.ServletContext : Servlet上下文信息
(4)javax.servlet.ServletConfig : Servlet配置对象
(5)javax.servlet.jsp.PageContext : Http页面上下文
如何获取HttpRequest、HttpResponse
例子
然后就可以用request.setAttribute("name", value)方法了。
总结:不难看出,两者之间还是存在很多共同功能,那么我们还是根据自己的需求进行选择,能用ActionContext对象满足就尽量使用ActionContext,避免让我们直接去访问Servlet对象。另外,不要在Action还没实例化的时候去通过ActionContext调用方法,因为Action实例在ActionContext实例之前创建,ActionContext中一些值还没有设置,会返回null。
- ActionContext与ServletActionContext的区别及认识
- ActionContext与ServletActionContext的区别
- ActionContext与ServletActionContext区别
- ServletContext、ActionContext与ServletActionContext的区别
- ActionContext和ServletActionContext的区别
- ActionContext和ServletActionContext的区别
- actionContext和ServletActionContext的区别:
- actionContext和ServletActionContext的区别:
- Struts2的 ActionContext && ServletActionContext 区别
- Actioncontext和ServletActioncontext的区别
- ActionContext和ServletActionContext的区别
- ServletContext,ActionContext,ServletActionContext的区别
- ServletContext,ActionContext,ServletActionContext的区别
- ServletContext,ActionContext,ServletActionContext 的区别
- ActionContext与ServletActionContext的区别及获取request、session等对象
- ActionContext与ServletActionContext的区别及获取request、session等对象
- ActionContext与ServletActionContext的区别及获取request、session等对象
- ActionContext与ServletActionContext的区别及获取request、session等对象
- 谷歌浏览器设置当前位置
- BZOJ 4173
- ajax框架,juery的实现xml,中文乱码与跨域访问
- 使用Git创建第一个项目
- 嵌入式Linux应用开发完全手册(一)嵌入式Linux基础知识
- ActionContext与ServletActionContext的区别及认识
- 【lintcode】——链表插入排序-Insertion Sort List
- 牛客网HTML/CSS专项练习错题汇总
- Spark-SQL DataFrame操作
- Ubuntu系统环境变量详解
- CIRU2(K次圆交板子)
- HDU 1271整数对----排列组合
- DLTK 用于医学图像分析的深度学习工具箱
- 微信端适配