问题出在:
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.
错误出来了。
改正:
去掉 之后初始化的成员变量,再输入刚那个Url,OK,可以访问了。