`
wangshare
  • 浏览: 21410 次
  • 性别: Icon_minigender_1
  • 来自: 佛在我心
社区版块
存档分类
最新评论

struts2疑难之---ActionContext初始化问题

阅读更多
用过Struts2的兄弟们都知道,在action中不需要再使用 response ,request,因为架构设计中已经将Action和servlet解耦,可是如果一旦需要使用response,request等等的时候,怎么办?
比如 需要用session,cookie之类的,remoteAddr等等

一般怎么处理呢

HttpServletRequest request =(HttpServletRequest)ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST);
这样既可得到request

但是ActionContext.getContext()里面一定有HTTP_REQUEST这个值对吗,不一定

简单说 ,如果Http请求没有使用Action请求,那么这个ActionContext.getContext(),其实是个Map,里面的key大概是6个,没有request,response,比如你某个请求是一个jsp,在jsp中使用了某个帮助类,比如CookieUtil来判断并获取cookie,这时候就出问题了
request.getCookies();就有问题了,debug发现request是null

不过如果把这个jsp写成一个没有Action类的action
<action name="testCookie">
<result>testCookiePage.jsp</result>
</action>
这样就可以得到正常的request,一切都正常
debug发现,这个时候ActionContext.getContext()的map中有27个key,包括request,response,
有时间还得把ActionContext初始化过程仔细看看

分享到:
评论
3 楼 litianyi520 2010-01-04  
楼上正解!
2 楼 kjj 2009-12-31  
wangshare 写道
用过Struts2的兄弟们都知道,在action中不需要再使用 response ,request,因为架构设计中已经将Action和servlet解耦,可是如果一旦需要使用response,request等等的时候,怎么办?
比如 需要用session,cookie之类的,remoteAddr等等

一般怎么处理呢

HttpServletRequest request =(HttpServletRequest)ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST);
这样既可得到request

但是ActionContext.getContext()里面一定有HTTP_REQUEST这个值对吗,不一定

简单说 ,如果Http请求没有使用Action请求,那么这个ActionContext.getContext(),其实是个Map,里面的key大概是6个,没有request,response,比如你某个请求是一个jsp,在jsp中使用了某个帮助类,比如CookieUtil来判断并获取cookie,这时候就出问题了
request.getCookies();就有问题了,debug发现request是null

不过如果把这个jsp写成一个没有Action类的action
<action name="testCookie">
<result>testCookiePage.jsp</result>
</action>
这样就可以得到正常的request,一切都正常
debug发现,这个时候ActionContext.getContext()的map中有27个key,包括request,response,
有时间还得把ActionContext初始化过程仔细看看



不知道你那里还需要这两个对象,完全是为了解耦才去掉的,cookie也有对应的发那个发,而你一定要的话,需要你的action实现servletRequestAware 或者 servletResponseAware接口就好了!!
1 楼 freespace521 2009-12-31  
ServletActionContext.getRequest();

相关推荐

    struts2-core-2.0.11源码

    1. **拦截器(Interceptors)**:Struts2的核心特性之一,拦截器负责在Action调用前后执行额外的逻辑,如日志记录、权限验证等。在`org.apache.struts2.interceptor`包下,你可以找到各种预定义的拦截器类。 2. **...

    struts2-core-2.0.12.jar

    Struts2-core-2.0.12.jar是Apache Struts框架的一个核心组件包,它在Java Web开发中扮演着至关重要的角色。Struts2是一个开源的MVC(Model-View-Controller)框架,用于构建高效、可扩展的Web应用程序。这个版本号...

    struts2-core-2.3.7源码

    1. **StrutsPrepareAndExecuteFilter**: 这是Struts2的过滤器,负责初始化框架并处理请求。 2. **ActionContext**: 包含了当前请求的所有上下文信息,如session、request、response、value stack等。 3. **...

    struts2集成struts-ssl-plugin插件实现https访问例子

    Struts2是一个非常流行的Java Web框架,用于构建可维护性和可扩展性良好的企业级应用程序。在Web应用中,为了确保数据传输的安全性,通常会使用HTTPS协议,它基于SSL/TLS来加密通信,保护用户的隐私信息。Struts2...

    struts2-junit-plugin-2.1.8.jar

    可解决java.lang.NoSuchMethodError: com.opensymphony.xwork2.ActionContext.get(Ljava/lang/Object;)Ljava/lang/Object; java.lang.ClassNotFoundException: com.opensymphony.xwork2.util.TextUtils struts2.1.8...

    struts2-core-2.1.8.1 xwork-core-2.1.6源码

    2. **拦截器(Interceptors)**:Struts2的拦截器是其强大的特性之一,允许开发者在Action执行前后添加自定义逻辑。这些拦截器可以实现登录验证、日志记录、性能监控等多种功能。在源码中,你可以看到`...

    struts2版本 2.1.6 必须的jar包 和 web.xml 文件的修改

    2. **Struts2的初始化参数** - 可以设置一些全局属性,如配置文件的位置、开发模式等。例如: ```xml &lt;context-param&gt; &lt;param-name&gt;struts.devMode&lt;/param-name&gt; &lt;param-value&gt;true&lt;/param-value&gt; &lt;/context-...

    struts2-blank-2.0.14的lib中的jar包

    - `struts2-core.jar`: 这是Struts2的核心库,包含了Action、Result、Interceptor等核心类,以及配置解析器和ActionContext等。它是处理HTTP请求、执行业务逻辑和渲染视图的核心。 2. **插件支持** - `struts2-...

    struts2-core-2.0.11.jar

    10. **国际化与本地化(I18N & L10N)**:Struts2支持多语言环境,开发者可以通过资源文件轻松实现应用的国际化。 总的来说,Struts2-core-2.0.11.jar是Struts2框架的心脏,包含了许多关键组件,使得开发人员能够...

    struts 空项目 struts2-blank-2.0.12.war

    Struts2是一个强大的Java EE应用程序框架,主要用于构建企业级的Web应用。这个“struts2-blank-2.0.12.war”文件是一个基于Struts2框架的空项目,版本为2.0.12,非常适合初学者或者开发者用于学习和参考。下面将详细...

    struts2-core-2.1.6.jar

    例如,`PrepareInterceptor`负责初始化Action属性,`ParamsInterceptor`处理请求参数注入,`ValidationInterceptor`执行字段验证等。 4. **表达式语言(OGNL)**:Struts2使用OGNL(Object-Graph Navigation ...

    struts2-xwork-ognl的源文件(jar包)

    XWork负责Action的生命周期管理,包括Action的创建、初始化、执行和销毁。此外,XWork还提供了类型转换、参数验证等功能。XWork的ActionContext对象持有与当前请求相关的所有上下文信息,如值栈(Value Stack)和...

    struts2-spring-plus

    2. **减少样板代码**:通过插件,开发者不再需要在Action类中编写getter和setter方法,以及实现Servlet相关的初始化和销毁方法。 3. **增强的事务管理**:插件支持Spring的事务管理,使得Action方法内的数据库操作...

    struts-2.3.34-all.zip

    - **xwork-core.jar**:XWork是Struts2的基础,提供了ActionContext、ValueStack等基础功能。 - **ognl.jar**:包含了OGNL的实现,用于对象图导航和表达式处理。 - **freemarker.jar** 或 **velocity.jar**:视图...

    struts2-dojo-plugin-2.2.3.1.zip_key_可用struts的ajax支持插件

    2. **struts-plugin.xml**:这是Struts2插件的核心配置文件,定义了插件的初始化参数、拦截器、结果类型等,使得Struts2框架能识别并加载该插件。 3. **META-INF**:这是一个元数据目录,通常包含关于软件包的元信息...

    (struts2-json-plugin-2.2.1)struts2 json-default配置中需要的jar包

    3. **xwork-core.jar**:XWork是Struts2的基础,它提供了许多基础组件,如ActionContext、ObjectFactory等。 4. **ognl.jar**:Object-Graph Navigation Language,用于对象属性的获取和设置,以及表达式语言的支持...

    Struts2 技术内幕-深入解析Struts2架构设计与实现原理

    Struts2是一个强大的Java web应用程序框架,用于构建和维护可扩展、模块化和高度结构化的Web应用程序。这个框架是基于MVC(Model-View-Controller)设计模式的,旨在简化开发过程并提供更好的控制流。《Struts2技术...

    struts-xwork-core源码

    Struts-xwork-core是Struts2框架的核心组件,它提供了Action和结果的执行模型,以及类型转换、数据验证和国际化等功能。在这个压缩包中,包含了该核心库的源代码,对于学习和理解Struts2的工作原理及其内部机制极具...

    struts2-api-2.0.1.jar.zip

    除了ActionSupport,Struts2还提供了ActionContext,它封装了请求、响应、session以及应用上下文等关键信息,使得在Action中访问这些对象变得简单。另外,`com.opensymphony.xwork2.ObjectFactory`负责创建对象,...

    最新 ognl-2.6.11+struts2-core-2[1].0.11+xwork-2.0.5源码

    了解源码可以帮助开发者深入理解Struts2的内部运作,优化性能,解决遇到的问题,甚至开发自定义的插件和扩展。对于初学者,可以通过阅读这些源码来学习如何使用OGNL表达式,如何编写Action和拦截器,以及如何配置...

Global site tag (gtag.js) - Google Analytics