我的userAction是实现的com.opensymphony.xwork2.Action这个类,我用
ActionContext ctx = ActionContext.getContext(); 
Map<String,String> session = ctx.getSession();//两个都是实例变量
创建session后,在普通方法里用put("username", vo.getUsername())时会提示put()这步空指针异常。
我把ctx,session作为局部变量来创建,再紧接着用put()就没问题。
++++++++++++++++++++++++++++++++++++++++
我用HttpServletRequest request = ServletActionContext.getRequest();
HttpSession session = request.getSession();//两个都是实例变量
创建session后,在启动tomcat时就报错:严重: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'Action' defined in class path resource [applicationContext.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.jndi.test.action.Action]: Constructor threw exception; nested exception is java.lang.NullPointerException
Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.jndi.test.action.Action]: Constructor threw exception; nested exception is java.lang.NullPointerException
Caused by: java.lang.NullPointerException
at com.jndi.test.action.Action.<init>(Action.java:22)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:85)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:61)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:757)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:722)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:386)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:249)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:155)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:246)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:291)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:352)
at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:246)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:189)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:49)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4135)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4630)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:546)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1041)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:964)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:502)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1277)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:321)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:445)
at org.apache.catalina.core.StandardService.start(StandardService.java:519)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
at org.apache.catalina.startup.Catalina.start(Catalina.java:581)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)。。但是把session作为局部变量来创建紧接着用setAttribute()发布和使用都没问题。
++++++++++++++++++++++++++++++
以上两种方式的get/set和构造方法都是自动生成的。、、怎么解决?谢谢!

解决方案 »

  1.   

    你意思是说:你用全局变量就报空指针异常?我觉得不可能吧?
    你把你这个com.jndi.test.action.Action 的代码贴出来让我们看看呢?
      

  2.   

    ++++++++++++++++++++++++++++++
    package com.jndi.test.action;import java.util.List;
    import java.util.Map;import com.jndi.test.service.IService;
    import com.jndi.test.vo.UserVo;
    import com.opensymphony.xwork2.ActionContext;/*author:邓瑶冬
     2010-9-8下午06:53:25*/
    public class Action implements com.opensymphony.xwork2.Action {
    private IService service;
    private List<UserVo> listvo;
    private String string;
    private UserVo uservo;
    ActionContext ctx = ActionContext.getContext();
    Map<String, String> session = ctx.getSession(); public Action() {
    super();
    } public Action(ActionContext ctx, List<UserVo> listvo, IService service,
    Map session, String string, UserVo uservo) {
    super();
    this.ctx = ctx;
    this.listvo = listvo;
    this.service = service;
    this.session = session;
    this.string = string;
    this.uservo = uservo;
    } public IService getService() {
    return service;
    } public void setService(IService service) {
    this.service = service;
    } public List<UserVo> getListvo() {
    return listvo;
    } public void setListvo(List<UserVo> listvo) {
    this.listvo = listvo;
    } public String getString() {
    return string;
    } public void setString(String string) {
    this.string = string;
    } public UserVo getUservo() {
    return uservo;
    } public void setUservo(UserVo uservo) {
    this.uservo = uservo;
    } public ActionContext getCtx() {
    return ctx;
    } public void setCtx(ActionContext ctx) {
    this.ctx = ctx;
    } public Map getSession() {
    return session;
    } public void setSession(Map session) {
    this.session = session;
    } public String execute() throws Exception {
    String str = "";
    if ("findall".equals(getString())) {
    str = this.findAll();
    } else if ("add".equals(getString())) {
    System.out.println("注册中...");
    str = this.save();
    } else if ("login".equals(getString())) {
    System.out.println("登陆中...");
    str = this.login();
    } else if ("update".equals(getString())) {
    System.out.println("更新中...");
    str = this.update();
    }
    return str;
    } private String update() {
    System.out.println(uservo.getUsername());
    System.out.println(uservo.getCGroup());
    System.out.println(uservo.getSex());
    service.update(uservo);
    string = "ok";
    return string;
    } public String findAll() {
    this.setListvo(service.findAll());
    System.out.println(listvo.size());
    return "all";
    } public String save() {
    System.out.println(uservo.getUsername());
    System.out.println(uservo.getPassword());
    System.out.println(uservo.getCGroup());
    System.out.println(uservo.getSex());
    service.save(uservo);
    string = "ok";
    return string;
    } public String login() {
    System.out.println(uservo.getUsername());
    System.out.println(uservo.getPassword());
    UserVo vo = service.login(uservo);
    if (vo == null) {
    string = "shibai";
    return string;
    }
    // 登陆成功
    // 向session之中设置内容
    System.out.println(vo.getUsername());
    session.put("username", vo.getUsername()); System.out.println(session.get("username"));
    // 因为jsp页面只能接收这个Action里的成员变量而不能接收局部变量,所以要将vo的值赋给uservo
    uservo = vo;
    string = "ok";
    return string;
    }
    }
    +++++++++++++++++++++++++++++++++++
      

  3.   

    异常:
    Servlet.service() for servlet default threw exception
    java.lang.NullPointerException
    at com.jndi.test.action.Action.login(Action.java:136)
    at com.jndi.test.action.Action.execute(Action.java:92)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:399)
    at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:262)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:224)
    at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:213)
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)
    at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219)
    at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218)
    at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216)
    at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:150)
    at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:48)
      

  4.   

    action每个方法对应不同的请求,request肯定不能用全局变量, 因为每次request都不一样的。
      

  5.   

    我要在jsp中用session,session是必须作为实例变量的吗?