`
softdn
  • 浏览: 40588 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

struts2 Action 中 ,ActionContext 不可以作为成员变量哦

阅读更多

问题出在:

     Action对象是在 ActionContext 容器对象之前创建的,ActionContext 作为成员变量,还没有轮到创建它哦,

所以NullPointerExcetion.

     这个问题,烦扰了我很久:

     同样的Action改了个名字,原来是JoinAction 后来 独立出来 MemberAction(由JoinAction 复制而来)

     中间改过代码,把ActionContext作为了MemberAction成员变量了,之后,JoinAction可以访问,但MemberAction总是500错误。

     一直怀疑是applicationContent.xml出错,共用了一个singleton的service,怎么改都不成功。

    经过梳理,觉得,问题不是出在这里,因为 在Action里调用singleton 或prototype service 的代码,之前都写过,这个有问题就麻烦了。折腾了几次重启tomcat,才排除。这个原因。

    改成之前错误代码,重现下给大家看看:

    ==========错误的代码:============================================如下:

 

   public class MemberAction extends ActionSupport {

    private static final long serialVersionUID = 1L;

    Member member;
    MemberService service;
    HttpSession session = ServletActionContext .getRequest().getSession();
    /**
     * ========== 初始化:mofidyMe.jsp ==========
     */
    public String initModifyMe() {}

....

}

 

========== applicationContent.xml 配置: ============如下:

    <!-- 以下注入是Member Table 开始于 55555 结束于55555 -->
    <bean id="memberDao" class="db.dao.impl.MemberDaoImpl" scope="singleton">
        <property name="sessionFactory" ref="sessionFactory"></property>
    </bean>
    <bean id="memberService" class="marego.service.impl.MemberServiceImpl" scope="singleton">
        <property name="memberDao" ref="memberDao"></property>
    </bean>
    <bean id="joinAction" class="marego.action.JoinAction" scope="prototype">
        <property name="service" ref="memberService"></property>
    </bean>
   
    <!-- 以下注入是Member Table 开始于 66666 结束于66666 -->
    <bean id="memberAction" class="marego.action.MemberAction" scope="prototype">
        <property name="service" ref="memberService"></property>
    </bean>

 

 

重启,不报错,ok。

输入本地Url:http://127.0.0.1:8088/wyweb/marego/modifyMe

HTTP Status 500 -

Apache Tomcat/6.0.20 - Error report<!--H1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} H2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} H3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} BODY {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} B {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} P {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;}A {color : black;}A.name {color : black;}HR {color : #525D76;}-->

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

Unable to instantiate Action, memberAction,  defined for 'modifyMe' in namespace '/marego'Error creating bean with name 'memberAction' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [marego.action.MemberAction]: Constructor threw exception; nested exception is java.lang.NullPointerException
	com.opensymphony.xwork2.DefaultActionInvocation.createAction(DefaultActionInvocation.java:306)
	com.opensymphony.xwork2.DefaultActionInvocation.init(DefaultActionInvocation.java:387)
	com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:186)
	org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:61)
	org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:39)
	com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:47)
	org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:458)
	org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:395)

 

root cause

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'memberAction' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [marego.action.MemberAction]: Constructor threw exception; nested exception is java.lang.NullPointerException
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:451)
	org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:268)
	org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160)
	org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:757)
	com.opensymphony.xwork2.spring.SpringObjectFactory.buildBean(SpringObjectFactory.java:126)
	com.opensymphony.xwork2.ObjectFactory.buildBean(ObjectFactory.java:139)
	com.opensymphony.xwork2.ObjectFactory.buildAction(ObjectFactory.java:109)
	com.opensymphony.xwork2.DefaultActionInvocation.createAction(DefaultActionInvocation.java:287)
	com.opensymphony.xwork2.DefaultActionInvocation.init(DefaultActionInvocation.java:387)
	com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:186)
	org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:61)
	org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:39)
	com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:47)
	org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:458)
	org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:395)

 

root cause

org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [marego.action.MemberAction]: Constructor threw exception; nested exception is java.lang.NullPointerException
	org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:100)
	org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:61)
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:757)
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:722)
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:386)
	org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:268)
	org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160)
	org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:757)
	com.opensymphony.xwork2.spring.SpringObjectFactory.buildBean(SpringObjectFactory.java:126)
	com.opensymphony.xwork2.ObjectFactory.buildBean(ObjectFactory.java:139)
	com.opensymphony.xwork2.ObjectFactory.buildAction(ObjectFactory.java:109)
	com.opensymphony.xwork2.DefaultActionInvocation.createAction(DefaultActionInvocation.java:287)
	com.opensymphony.xwork2.DefaultActionInvocation.init(DefaultActionInvocation.java:387)
	com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:186)
	org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:61)
	org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:39)
	com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:47)
	org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:458)
	org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:395)

 

root cause

java.lang.NullPointerException
	marego.action.MemberAction.<init>(MemberAction.java:36)
	sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
	sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
	java.lang.reflect.Constructor.newInstance(Constructor.java:513)
	org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:85)
	org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:61)
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:757)
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:722)
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:386)
	org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:268)
	org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160)
	org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:757)
	com.opensymphony.xwork2.spring.SpringObjectFactory.buildBean(SpringObjectFactory.java:126)
	com.opensymphony.xwork2.ObjectFactory.buildBean(ObjectFactory.java:139)
	com.opensymphony.xwork2.ObjectFactory.buildAction(ObjectFactory.java:109)
	com.opensymphony.xwork2.DefaultActionInvocation.createAction(DefaultActionInvocation.java:287)
	com.opensymphony.xwork2.DefaultActionInvocation.init(DefaultActionInvocation.java:387)
	com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:186)
	org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:61)
	org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:39)
	com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:47)
	org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:458)
	org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:395)

 

note The full stack trace of the root cause is available in the Apache Tomcat/6.0.20 logs.


Apache Tomcat/6.0.20

错误出来了。

 

  改正:

  去掉 之后初始化的成员变量,再输入刚那个Url,OK,可以访问了。

 

 

 

 

 

 

分享到:
评论

相关推荐

    struts2中的ActionContext与ognl

    NULL 博文链接:https://lijiejava.iteye.com/blog/628636

    struts2OGNL表达式ActionContext及valuesStack.pdf

    struts2OGNL表达式ActionContext及valuesStack.pdf

    基于struts2注册登录ActionContext.zip

    struts2大量使用拦截器来处理请求,从而允许与业务逻辑控制器 与 servlet-api分离,避免了侵入性(所谓侵入性就是指的这个架构设计出来的部件对系统的影响范围,标签库几乎可以完全替代JSTL的标签库,并且 struts2.x...

    ActionContext介绍(在Struts2中)

    在Web应用程序开发中,除了将请求参数自动设置到Action的字段中,我们往往也需要在Action里直接获取请求(Request)或会话 (Session)的一些信息, 甚至需要直接对JavaServlet Http的请求(HttpServletRequest),响应...

    Struts2中Servlet的配置

    1、在struts2的action中可以通过实现ServletResponseAware/ServletResquestAware接口 (org.apache.struts2.inteceptor.ServletResponseAware/ServletResquestAware)直接访问 HttpServletResponse/HttpServletRequest...

    Struts2通过使用ActionContext类获取request和response对象

    NULL 博文链接:https://zhouhaitao.iteye.com/blog/1126042

    Struts2 in action中文版

    6.7.2 Struts 2中常用的表达式语言特性 131 6.7.3 表达式语言的高级特性 135 6.8 小结 137 第7章 UI组件标签 139 7.1 为什么需要UI组件标签 139 7.2 标签、模板和主题 144 7.2.1 标签 146 7.2.2 模板 146 7.2.3 ...

    struts2_OGNL表达式ActionContext及valuesStack

    struts2 OGNL,struts2 表达式语言,Struts2 中OGNL表达式的用法,Struts2 #,表达式语言的好处,Struts2 $,struts2 井号,星号,百分号

    struts2流程与流程图

    一个请求在Struts 2框架中的处理大概分为以下几个步骤。...Struts 2的核心控制器是FilterDispatcher,有3个重要的方法:destroy()、doFilter()和Init(),可以在Struts 2的下载文件夹中找到源代码,如代码1所示。

    使用Action访问ActionContext方式的网站计数器

    使用Action访问ActionContext方式的网站计数器,可直接运行

    Struts2 学习笔记

    01 Struts2-Action 5 一、 Struts作用: 5 二、 搭建Struts2的运行环境: 5 三、 Namespace 6 四、 标签 6 五、 Action 6 六、 路径问题的说明 8 七、 Action的动态调用方法 8 八、 Action通配符(wildcard)的配置 9 ...

    ActionContext在struts2.0中的详细应用

    ActionContext(com.opensymphony.xwork.ActionContext)是Action执行时的上下文,上下文可以看作是一个容器(其实我们这里的容器就是一个Map而已),它存放放的是Action在执行时需要用到的对象

    Struts2帮助```````

    01 Struts2-Action 5 一、 Struts作用: 5 二、 搭建Struts2的运行环境: 5 三、 Namespace 6 四、 标签 6 五、 Action 6 六、 路径问题的说明 8 七、 Action的动态调用方法 8 八、 Action通配符(wildcard)的配置 9 ...

    Struts2 ActionContext 中的数据详解

    主要介绍了Struts2 ActionContext 中的数据详解,需要的朋友可以参考下

    Struts2整合SiteMesh技巧

    注意ActionContextCleanUp过滤器必须在FilterDispatcher之前配置,ActionContextCleanUp的主要功能是通知FilterDispatcher执行完毕不要清除ActionContext,以便sitemesh装饰器可以访问Struts值堆栈。 配置装饰器 ...

    struts2验证码完整实例

    (参照别人的代码) 部署: 1、将整个源码引入到MyEclipse当中. 2、部署到Tomcat下面,启动服务器,直接 敲...2、当你登录时候,提交的输入框中的验证码和session中存放的验证码比较,如果一样,则通过,不一样,则失败

    西安领航核心项目Struts2重点、难点总结

    对Struts2框架中的相关知识还有困惑的同学有福了,此次上传的是西安领航何足道老师的核心项目Struts2部分的重点难点的归纳总结,他对Struts2理解非常深刻,讲的非常的详细易懂,堪称经典。主要包括的知识有Action的...

    Struts2实战总结

    1:在action中定义的变量,在jsp页面中显示用:变量名" /&gt; 2:在页面中实现自动增加的序号用iterator的statuts的index属性 eg: &lt;s:iterator value="#request.inOutAccountList" id="data" status="listStat"&gt; ...

    struts2 标签库 帮助文档

    可以输出值栈、StackContext 、ActionContext中的值。 push:将某个值放入值栈。 set:设置一个新的变量。 text:输出国际化信息。 url:生成一个URL地址。 表单标签: checkbox标签:复选框。 checkboxlist标签...

    Struts2_TypeConvertion

    在Struts2中底层的session都被封装成了Map类型,我们称之为SessionMap,而平常我们所说的session则是指HttpSession对象,具体的获得方法如下所示。 A.Map session=ActionContext.getSession(); B.Map session=(Map...

Global site tag (gtag.js) - Google Analytics