zoukankan      html  css  js  c++  java
  • java.lang.NullPointerException&com.cb.action.LoginAction.execute(LoginAction.java:48)

    今天做一个Spring和Struts的融合,通过bean注入后,程序一跑起来,就报这个错误:

    java.lang.NullPointerException
    	com.cb.action.LoginAction.execute(LoginAction.java:48)
    	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    	java.lang.reflect.Method.invoke(Method.java:597)
    	com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:452)
    	com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:291)
    	com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:254)
    	com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176)
    	com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)

    下面先交待下各配置文件的情况:


    struts.xml如下:

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
    <struts>
    	<package name="login2" extends="struts-default" >
    		<action name="login" class="loginAction">
    			<result name="error">/err.jsp</result>
    			<result name="success">/welcome.jsp</result>
    		</action>
    		<!-- 让用户直接访问该应用时列出所有视图页面 -->
    		<action name="*">
    			<result>/WEB-INF/content/{1}.jsp</result>
    		</action>
    	</package>
    </struts>    
    

    Spring的applicationContext.xml如下:

    <?xml version="1.0" encoding="GBK"?>
        <!-- Spring配置文件的根元素,使用spring-beans-3.0.xsd语义约束 -->
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
        xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
               http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
               http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
               http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
               http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
    
        <bean id="myService" class="com.cb.serviceImpl.MyServiceImpl">
        </bean>
    
    	<!-- controller -->
        <bean id="loginAction" class="com.cb.action.LoginAction" scope="prototype">
            <property name="ms" ref="myService"></property>
        </bean> 
    <!-- <bean id="ms" class="com.cb.serviceImpl.MyServiceImpl"/> -->
    </beans>

    唯一的action如下,LoginAction.java

    package com.cb.action;
    
    import com.cb.serviceInter.MyService;
    import com.opensymphony.xwork2.Action;
    
    public class LoginAction implements Action{
    
    	private String username;
    	private String password;
    	private String tip;
    	//系统所需业务逻辑组件
    	private MyService ms;
    	
    	public String getUsername() {
    		return username;
    	}
    
    	public void setUsername(String username) {
    		this.username = username;
    	}
    
    	public String getPassword() {
    		return password;
    	}
    
    	public void setPassword(String password) {
    		this.password = password;
    	}
    
    	public String getTip() {
    		return tip;
    	}
    
    	public void setTip(String tip) {
    		this.tip = tip;
    	}
    
    	public MyService getMs() {
    		return ms;
    	}
    
    	public void setMs(MyService ms) {
    		this.ms = ms;
    	}
    
    	public String execute() throws Exception {
    		System.out.println("************test1****"+ms+"名字是:"+getUsername());
    		if(ms.valid(getUsername(), getPassword())){
    			setTip("恭喜,整合成功!");
    			return SUCCESS;
    		}else {
    			setTip("对不起,登录失败!");
    			return ERROR;
    		}
    	}
    
    }
    
                【分析】通过报的错误,可以明确的知道,private MyService ms;没有正常注入,就是这个实例是null。显然是spring的注入出现问题,但是我检查了所有的情况,发现ms的setMs也有,配置的也没有任何问题,这就奇怪了,怎么回一直提示注入失败呢?

                 【解决】最后发现一切问题出在struts.xml中,有两种解决办法:1,在<package name="login2" extends="struts-default" >中加上namespace=“/”。2,把action的<action name="login" class="loginAction">中name=“login”改成别的任何名字,估计有可能是login为struts2的保留字,所以以后的命名,尽量不要使用login,换个别的名字。但是第一种方法,加上namespace=“/”我始终没想明白是什么原因,加上命名空间了以后就没有错误,因为命名空间是一个逻辑名,访问action的时候,我不加逻辑名,应该不会有问题的。还是没想明白,希望各位看出问题的,能交流下,万分感谢!



  • 相关阅读:
    设计师
    仅用递归函数和栈操作逆序一个栈
    用两个栈实现队列
    设计一个有getMin功能的栈(2)
    设计一个有getMin功能的栈(1)
    Java 泛型
    servlet里获得jsp页面里select的选项之值
    mac上mysql的GUI工具sequel pro
    mac安装mysql的两种方法(含配置)
    [转]在Mac系统中安装配置Tomcat及和Eclipse 配置
  • 原文地址:https://www.cnblogs.com/rookiebob/p/3749390.html
Copyright © 2011-2022 走看看