1. org.apache.struts2.dispatcher.ActionContextCleanUp 这个类在strtus2-core-2.5.2里面没有了呢
filter内容按以下方式修改即可解决struts-cleanuporg.apache.struts2.dispatcher.ActionContextCleanUpstruts-cleanup/*-->注释以上,版改为以下内容权struts-prepareorg.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilterstruts-prepare/*struts-executeorg.apache.struts2.dispatcher.ng.filter.StrutsExecuteFilterstruts-execute/*
2. struts2中ActionContext是什么
ActionContext是Action的上下文,Struts2自动在其中保存了一些在Action执行过程中所需的对象,比如, parameters, locale等。Struts2会根据每个执行HTTP请求的线程来创建对应的ActionContext,即一个线程有一个唯一的ActionContext。因此,使用者可以使用静态方法ActionContext.getContext()来获取当前线程的ActionContext,也正是由于这个原因,使用者不用去操心让Action是线程安全的。
无论如何,ActionContext都是用来存放数据的。Struts2本身会在其中放入不少数据,而使用者也可以放入自己想要的数据。ActionContext本身的数据结构是映射结构,即一个Map,用key来映射value。所以使用者完全可以像使用Map一样来使用它,或者直接使用Action.getContextMap()方法来对Map进行操作。
Struts2本身在其中放入的数据有ActionInvocation、application(即ServletContext)、conversionErrors、Locale、action的name、request的参数、HTTP的Session以及值栈等。完整的列表请参考它的Javadoc(本文附录有对它包含内容的讨论)。
由于ActionContext的线程唯一和静态方法就能获得的特性,使得在非Action类中可以直接获得它,而不需要等待Action传入或注入。需要注意的是,它仅在由于request而创建的线程中有效(因为request时才创建对应的ActionContext),而在服务器启动的线程中(比如fliter的init方法)无效。由于在非Action类中访问其的方便性,ActionContext也可以用来在非Action类中向JSP传递数据(因为JSP也能很方便的访问它)。
3. 使用struts2时不配置ActionContextCleanUp会发生什么
这个filter主要是为了整合SiteMesh 等一些页面统一化管理的..自己下载一个流程图对应看一专下..不配置属ActionContextCleanUp的话 struts封装的一些request response等信息会在主filter StrutsPrepareAndExecuteFilter里被清空,,这样后续的filter 就无法获取了 而如果配置了ActionContextCleanUp的话 清空工作主filter就不管了 交与ActionContextCleanUp处理 而整合的其他filter 在应答响应的时候 是在主filter之后 ActionContextCleanUp之前...
4. ActionContext.initialize();这里的initialize起什么作用
初始化作用,在web.xml文件中配置的init-param参数也会随之加载过来
5. struts2中ActionContext的作用范围。
ActionContext.getContext().getSession().put(key,value)可以将session的值保存在值栈(ValueStack)中,由于session在一次会回话中的数据是共享的,所以在其他页面也就可答以通过<s:property value="#session.key" />访问值栈中的值了
6. struts2中ActionContext是什么东东
ActionContext是Action的上下文,Struts2自动在其中保存了一些在Action执行过程中所需的对象,比如session, parameters, locale等。Struts2会根据每个执行HTTP请求的线程来创建对应的ActionContext,即一个线程有一个唯一的ActionContext。因此,使用者可以使用静态方法ActionContext.getContext()来获取当前线程的ActionContext,也正是由于这个原因,使用者不用去操心让Action是线程安全的。
无论如何,ActionContext都是用来存放数据的。Struts2本身会在其中放入不少数据,而使用者也可以放入自己想要的数据。ActionContext本身的数据结构是映射结构,即一个Map,用key来映射value。所以使用者完全可以像使用Map一样来使用它,或者直接使用Action.getContextMap()方法来对Map进行操作。
Struts2本身在其中放入的数据有ActionInvocation、application(即ServletContext)、conversionErrors、Locale、action的name、request的参数、HTTP的Session以及值栈等。完整的列表请参考它的Javadoc(本文附录有对它包含内容的讨论)。
由于ActionContext的线程唯一和静态方法就能获得的特性,使得在非Action类中可以直接获得它,而不需要等待Action传入或注入。需要注意的是,它仅在由于request而创建的线程中有效(因为request时才创建对应的ActionContext),而在服务器启动的线程中(比如fliter的init方法)无效。由于在非Action类中访问其的方便性,ActionContext也可以用来在非Action类中向JSP传递数据(因为JSP也能很方便的访问它)。
7. ActionContext.getContext().getSession() 怎么用在线等,希望有高手教我~!
ActionContext.getContext().getSession() .put("键","要存放的值");
这样就存进去了
然后在JSP里就<%=session=getAttribut("键")%>就可以了
8. ServletContext和ServletActionContext有什么区别
ServletActionContext和ActionContext有着一些重复的功能,在我们的Action中,该如何去抉择呢?我们遵循的原则是:如果ActionContext能够实现我们的功能,那最好就不要使用ServletActionContext,让我们的Action尽量不要直接去访问Servlet的相关对象. 注意:在使用ActionContext时有一点要注意: 不要在Action的构造函数里使用ActionContext.getContext(),因为这个时候ActionContext里的一些值也许没有设置,这时通过ActionContext取得的值也许是null; 同样,HttpServletRequest req = ServletActionContext.getRequest()也不要放在构造函数中,也不要直接将req作为类变量给其赋值。至于原因,我想是因为前面讲到的static ThreadLocal actionContext = new ActionContextThreadLocal(),从这里我们可以看出ActionContext是线程安全的,而ServletActionContext继承自ActionContext, 所以ServletActionContext也线程安全,而线程安全要求每个线程都独立进行,所以req的创建也要求独立进行,所以ServletActionContext.getRequest()这句话不要放在构造函数中,也不要直接放在类中,而应该放在每个具体的方法体中(eg:login()、queryAll()、insert()等),这样才能保证每次产生对象时独立的建立了一个req。
9. session=ActionContext.getContext().getSession().get();这个方法偶尔取出来的值为空。
你的xwork jar包的版本如果是 2.1.2之后的,那使用session的时候,需要自己创建session。
在action类中,private Map<String, Object> session;
public void setSession(Map<String, Object> session) {
this.session = session;
}
通过setSession覆盖原来的代码,将自己定义的session添加到 ActionContext.getContext()中。然后再将内容添加到session中,ActionContext.getContext().getSession().put(key,value);
10. ActionContext.getContext()的几种用法
ActionContext.getContext().getSession() 获取的是session,然后用put存入相应的值,只要在session有效状态下,这个值一直可用
ActionContext.getContext().put("x", x) 默认的是request,在这个request未结束之前都是可用的
ActionContext.getContext().getValueStack().push(x),在Struts2中,一个请求在最终到达Action的方法之前,Action对象本身会被压入ValueStack,可以把一个对象直接压入到valuestack中