




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
上下文(context)ActionContext介绍(在Struts2中) 一种属性的有序序列,它们为驻留在环境内的对象定义环境。在对象的激活过程中创建上下文,对象被配置为要求某些自动服务,如同步、事务、实时激活、安全性等等。多个对象可以存留在一个上下文内。也有根据上下文理解意思的意思。ActionContext介绍(在Struts2中)在Web应用程序开发中,除了将请求参数自动设置到Action的字段中,我们往往也需要在Action里直接获取请求(Request)或会话(Session)的一些信息,甚至需要直接对JavaServlet Http的请求(HttpServletRequest),响应(HttpServletResponse)操作.我们需要在Action中取得request请求参数username的值:ActionContext context = ActionContext.getContext();Map params = context.getParameters();String username = (String) params.get(username);ActionContext(com.opensymphony.xwork.ActionContext)是Action执行时的上下文,上下文可以看作是一个容器(其实我们这里的容器就是一个Map而已),它存放放的是Action在执行时需要用到的对象一般情况,我们的ActionContext都是通过:ActionContext context = (ActionContext) actionContext.get();来获取的.我们再来看看这里的actionContext对象的创建:static ThreadLocal actionContext = new ActionContextThreadLocal();,ActionContextThreadLocal是实现ThreadLocal的一个内部类.ThreadLocal可以命名为线程局部变量,它为每一个使用该变量的线程都提供一个变量值的副本,使每一个线程都可以独立地改变自己的副本,而不会和其它线程的副本冲突.这样,我们ActionContext里的属性只会在对应的当前请求线程中可见,从而保证它是线程安全的.下面我们看看怎么通过ActionContext取得我们的HttpSession:Map session = ActionContext.getContext().getSession();ServletActionContext(com.opensymphony.webwork. ServletActionContext),这个类直接继承了我们上面介绍的ActionContext,它提供了直接与JavaServlet相关对象访问的功能,它可以取得的对象有: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页面上下文下面我们看看几个简单的例子,让我们了解如何从ServletActionContext里取得JavaServlet的相关对象:1,取得HttpServletRequest对象:HttpServletRequest request = ServletActionContext. getRequest();2,取得HttpSession对象:HttpSession session = ServletActionContext. getRequest().getSession();ServletActionContext和ActionContext有着一些重复的功能,在我们的Action中,该如何去抉择呢?我们遵循的原则是:如果ActionContext能够实现我们的功能,那最好就不要使用ServletActionContext,让我们的Action尽量不要直接去访问JavaServlet的相关对象.在使用ActionContext时有一点要注意:不要在Action的构造函数里使用ActionContext.getContext(),因为这个时候ActionContext里的一些值也许没有设置,这时通过ActionContext取得的值也许是null.如果我要取得Servlet API中的一些对象,如request,response或session等,应该怎么做?在Strutx 2.0你可以有两种方式获得这些对象:非IoC(控制反转Inversion of Control)方式和IoC方式.A、非IoC方式要获得上述对象,关键Struts 2.0中com.opensymphony.xwork2.ActionContext类.我们可以通过它的静态方法getContext()获取当前Action的上下文对象.另外,org.apache.struts2.ServletActionContext作为辅助类(Helper Class),可以帮助您快捷地获得这几个对象.HttpServletRequest request = ServletActionContext.getRequest();HttpServletResponse response = ServletActionContext.getResponse();HttpSession session = request.getSession();如果你只是想访问session的属性(Attribute),你也可以通过ActionContext.getContext().getSession()获取或添加session范围(Scoped)的对象.B、IoC方式要使用IoC方式,我们首先要告诉IoC容器(Container)想取得某个对象的意愿,通过实现相应的接口做到这点.具体实现,请参考例6 IocServlet.java.例6 classes/tutorial/NonIoCServlet.javapackage tutorial;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionSupport;Public classNonIoCServletextends ActionSupportprivate String message;public String getMessage() return message;HttpServletRequest request = ServletActionContext.getRequest();HttpServletResponse response = ServletActionContext.getResponse();HttpSession session = request.getSession();Overridepublic String execute() ActionContext.getContext().getSession().put(msg, Hello World from Session!);A2StringBuffer sb =new StringBuffer(Message from request: );sb.append(request.getParameter(msg);sb.append(Response Buffer Size: );sb.append(response.getBufferSize();sb.append(Session ID: );sb.append(session.getId();message = sb.toString();/转换为字符串。return SUCCESS;/与LoginAction类似的方法。例6 classes/tutorial/IoCServlet.javapackage tutorial;import java.util.Map;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import erceptor.ServletRequestAware;import erceptor.ServletResponseAware;import erceptor.SessionAware;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionSupport;publicclassIoCServletextends ActionSupportimplements SessionAware,ServletRequestAware, ServletResponseAware private String message;private Map att;private HttpServletRequest request;private HttpServletResponse response;public String getMessage() return message;public void setSession(Map att) this.att = att;publicvoid setServletRequest(HttpServletRequest request) this.request = request;publicvoid setServletResponse(HttpServletResponse response) this.response = response;Overridepublic String execute() att.put(msg, Hello World from Session!);HttpSession session = request.getSession();StringBuffer sb =new StringBuffer(Message from request: );sb.append(request.getParameter(msg);sb.append(Response Buffer Size: );sb.append(response.getBufferSize();sb.append(Session ID: );sb.append(session.getId();message = sb.toString();return SUCCESS;例6 Servlet.jspHello World!Message from session: 例6 classes/struts.xml中NonIocServlet和IoCServlet Action的配置/Servlet.jsp/Servlet.jsp运行Tomcat,在浏览器地址栏中键入http:/localhost:8080/Struts2_Action /NonIoCServlet.action?msg=Hello%20World!或http:/localhost:8080/Struts2_Action/IoCServlet.action?msg=Hello%20World!在Servlet.jsp中,我用了两次property标志,第一次将escape设为false为了在JSP中输出转行,第二次的value中的OGNL为#session.msg,它的作用与session.getAttribute(msg)等同.附:ActionContext的常用方法(来自Struts2.0API)(一)getpublicObjectget(Objectkey)Returns a value that is stored in the current ActionContext by doing a lookup using the values key.Parameters:key- the key used to find the value.Returns:the value that was found using the key or null if the key was not found.(二)putpublic voidput(Objectkey,Objectvalue)Stores a value in the current ActionContext. The value can be looked up using the key.Parameters:key- the key of the value.value- the value to be stored.(三)getContextpublic staticActionContextgetContext()Returns the ActionContext specific to the current thread.Returns:the ActionContext for the current thread, is never null.(四)getSessionpublicMapgetSession()Gets the Map of HttpSession values when in a servlet environment or a generic session map otherwise.Returns:the Map of HttpSession values when in a servlet environment or a generic session map otherwise.(五)setSessionpublic voidsetSession(Mapsession)Sets a map of action session values.Parameters:session- the session values.Struts2的action类继承com.opensymphony.xwork2.ActionSupport类的常用方法addFieldError/该方法主要用于验证的方法之中public voidaddFieldError(StringfieldName,StringerrorMessage)Description copied from interface:ValidationAwareAdd an error message for a given field.Specified by:addFieldErrorin interfaceValidationAwareParameters:fieldName- name of fielderrorMessage- the error me
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 咖啡纳米技术应用创新创业项目商业计划书
- 用电安全与隐患治理方案创新创业项目商业计划书
- 农产品供应链协同创新创业项目商业计划书
- 智能车辆行人识别创新创业项目商业计划书
- 渔业品牌国际化推广创新创业项目商业计划书
- 2025年老年健康管理长期照护服务模式创新与社区护理模式融合001
- 湖南省双峰一中2026届化学高一第一学期期末达标检测试题含解析
- 2025年教师资格证考试(中学科目二)教育知识与能力冲刺复习全真试卷
- 现代培训基础知识课件
- 现代化沙发知识培训内容课件
- 2025届高考作文备考之主题素材:家国情怀
- 一线班组质量奖申报材料
- 蜜雪冰城加盟合同(2025年版)
- 消毒供应质量控制指标(2024年版)
- ACS合并消化道出血治疗策略
- 数字化转型视角下H公司订单管理优化策略研究
- 精益管理看板
- 汽车产品初期流动管理计划
- 《战略资源稀土》课件
- 《过程审核讲义》课件
- 中医内科学虚劳培训课件
评论
0/150
提交评论