`
softdn
  • 浏览: 41137 次
  • 性别: 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

    ActionContext是Struts2框架中一个关键的组件,它提供了当前请求上下文的信息,而OGNL(Object-Graph Navigation Language)则是Struts2中的表达式语言,用于在模型和视图之间进行数据传递。下面将详细探讨这两个...

    struts2OGNL表达式ActionContext及valuesStack.pdf

    如果我们在Action中设置`ActionContext`的值栈,然后将`User`对象压入栈中,那么在视图层的JSP或Freemarker模板中,可以直接使用`${name}`来显示用户名,因为`User`对象现在是栈顶的根对象。 总的来说,Struts2的...

    struts2 Action 包 命名空间 servlet API

    总之,Struts2通过ActionContext类实现了对Servlet API的间接访问,使得在不破坏Action的独立性的同时,能够方便地处理Web相关的任务,如管理请求参数、会话状态和应用级别的数据。这种设计提高了代码的灵活性和可...

    ActionContext在struts2.0中的详细应用

    在Struts2框架中,ActionContext扮演着至关重要的角色,它是Action执行时的上下文环境,可以理解为一个存储Action执行过程中所需对象的容器。实际上,这个容器是一个Map,用于保存Action执行期间需要的各种信息。 ...

    Struts2在Action中获得Response对象的四种方法

    通过这个接口,Struts2框架会在执行execute方法前自动将HttpServletResponse对象注入到Action类的成员变量中。例如: ```java public class MyAction extends ActionSupport implements ServletResponseAware { ...

    struts2中action如何获取jsp页面参数1.pdf

    - ActionContext是Struts2框架中执行Action时的上下文环境,它是一个存储各种对象的容器,主要包含了请求(Request)、会话(Session)以及ActionContext本身的信息。 - 通常,我们可以通过`ActionContext context = ...

    struts2学习笔记

    更值得注意的是,Struts2并不强制使用Action接口,任何包含`execute()`方法的Plain Old Java Object (POJO)都可以作为Action使用,这极大地提高了代码的可复用性和灵活性。 Action的生命周期在Struts2中由Struts和...

    struts2中Action获取参数的3种方式代码

    在Struts2中,Action类是处理用户请求的核心组件,它负责接收前端传递的参数并进行业务逻辑处理。本文将详细介绍Struts2中Action获取参数的三种主要方式,并通过实际代码示例来阐述每种方法的使用。 1. **通过...

    Struts2调试方法

    6. **查看Action上下文**:Struts2的ActionContext封装了当前请求的所有上下文信息,如session、parameters等。在调试时,可以检查ActionContext中的内容来了解请求的状态。 7. **处理结果类型**:调试时,要留意...

    应用Struts2处理表单数据

    2. **表单域(Form Fields)**:表单中的输入字段在Action类中通常表现为成员变量,通过getter和setter方法进行访问。Struts2会自动将请求参数绑定到这些字段,实现数据的映射。 3. **结果类型(Result Types)**:...

    Struts2项目案例

    5. **ValueStack**:存储ActionContext中的所有对象,包括Action实例、OGNL表达式中的变量等。OGNL(Object-Graph Navigation Language)是Struts2中用于访问和操作这些对象的表达式语言。 现在,我们来看这个...

    Struts2 学习 2

    在“第九讲 ActionContext.docx”中,你将学习到ActionContext是Struts2中非常关键的一个组件,它提供了请求和响应之间的上下文信息。ActionContext封装了当前线程中的请求、响应、session以及application等对象,...

    Struts2总结-2

    3. 在Action的成员变量中定义变量并生成getter方法,Struts2会自动将数据放入值栈。 在JSP中,可以通过以下方式获取数据: 1. 直接通过OGNL表达式访问。 2. 使用ActionContext获取值栈,然后从栈中弹出数据。 3. ...

    Struts2例子8

    但在Struts2的IoC场景下,`UserService`将被声明为`LoginAction`的成员变量,并通过注解或配置文件进行注入。 1. **注解注入**: 使用Struts2的注解`@Inject`或者Spring的`@Autowired`,可以直接在Action类的字段...

    Struts2五个核心包

    XWork提供了一套动作框架,包括Action、ActionContext、Interceptor等,是Struts2处理请求、执行业务逻辑的基础。 这五个核心包共同构成了Struts2的核心架构,使得开发者能够轻松地构建可扩展、可维护的Web应用程序...

    Struts2中的OGNL

    3. **上下文感知**:OGNL能够根据当前上下文查找变量,例如在Struts2中,ActionContext可以作为默认上下文。 4. **动态性**:OGNL表达式可以动态改变,使得程序更具灵活性。 5. **简洁性**:OGNL的语法简洁,易于...

    Struts2_0700_ActionAtrrParamInput

    - 在Action类中,我们定义了各种属性(成员变量),这些属性可以用来接收从视图层传递过来的请求参数。例如,如果我们有一个名为`username`的参数,可以在Action类中声明对应的`private String username;`,然后...

    用struts2加hibernate对学员信息进行增删改查操作

    8. **页面跳转与数据传递**:在Struts2中,Action类的方法返回的结果名对应一个视图,如jsp页面,同时可以通过ActionContext或ModelDriven接口将数据传递到视图。页面之间的跳转和数据传递是Struts2的一大特点,简化...

Global site tag (gtag.js) - Google Analytics