Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我的登录服务为空?_Java_Spring_Spring Mvc_Struts2_Spring Data - Fatal编程技术网

Java 为什么我的登录服务为空?

Java 为什么我的登录服务为空?,java,spring,spring-mvc,struts2,spring-data,Java,Spring,Spring Mvc,Struts2,Spring Data,我有一个LoginService类,如下所示: @Service("loginService") public class LoginService { public boolean isValidUser(CustomerDTO customerDTO){ if(customerDTO.getUsername().equals("admin") && customerDTO.getPassword().equals("admin")){

我有一个
LoginService
类,如下所示:

@Service("loginService")
public class LoginService {

public boolean isValidUser(CustomerDTO customerDTO){
    if(customerDTO.getUsername().equals("admin") && 
            customerDTO.getPassword().equals("admin")){
                return true;
            }
    return false;
   }
}
@Controller
public class LoginAction{

private CustomerDTO customerDTO;
@Autowired
private LoginService loginService;

public CustomerDTO getCustomerDTO() {
    return customerDTO;
}

public void setCustomerDTO(CustomerDTO customerDTO) {
    this.customerDTO = customerDTO;
}

public String execute(){
    if(loginService.isValidUser(this.getCustomerDTO())){
        return "success";           
    }
    return "failure";
  }
}
还有这样一个
LoginAction
类:

@Service("loginService")
public class LoginService {

public boolean isValidUser(CustomerDTO customerDTO){
    if(customerDTO.getUsername().equals("admin") && 
            customerDTO.getPassword().equals("admin")){
                return true;
            }
    return false;
   }
}
@Controller
public class LoginAction{

private CustomerDTO customerDTO;
@Autowired
private LoginService loginService;

public CustomerDTO getCustomerDTO() {
    return customerDTO;
}

public void setCustomerDTO(CustomerDTO customerDTO) {
    this.customerDTO = customerDTO;
}

public String execute(){
    if(loginService.isValidUser(this.getCustomerDTO())){
        return "success";           
    }
    return "failure";
  }
}
当我试图从
LoginAction
类调用方法
isValidUser
时,我得到一个空指针异常。这是因为我的
loginService
对象是
null
。我做错了什么

这是我的异常堆栈:

java.lang.NullPointerException 
com.sc.web.LoginAction.execute(LoginAction.java:26)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:483)
com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:450)
com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:289)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:252)
org.apache.struts2.interceptor.DeprecationInterceptor.intercept(DeprecationInterceptor.java:41)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:256)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:167)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:265)
org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:249)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:249)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:191)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:73)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:91)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:252)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:139)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:193)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:189)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54)
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:562)
org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
java.lang.Thread.run(Thread.java:745)

在LoginService类中,替换:

@Service("loginService")
与:

@Service
@Configurable

从stacktrace可以看出您没有使用集成。支柱和弹簧通过集成在一起。默认情况下,Struts按名称自动连接

Spring插件通过重写Struts ObjectFactory来增强核心框架对象的创建。在创建对象时,它使用Struts配置中的class属性来对应Spring配置中的id属性。如果找不到,该类将尝试像往常一样创建,然后由Spring自动连接。对于操作,Spring2的bean作用域特性可用于将操作实例的作用域定义为会话、应用程序或自定义作用域,从而在默认的每请求作用域之上提供高级自定义

要使用插件,只需将其添加到类路径

要实现Spring集成,只需在应用程序中包含struts2-Spring-plugin-x-x-x.jar


您的Spring配置是什么样子的?你在使用组件扫描吗?包中的类是否由组件扫描搜索?struts从spring自动连接bean,但您应该编写一个自动连接bean的setter方法。@Jesper是的,我使用的是组件扫描。Spring扫描基本包“com.sc”。我的LoginService类在com.sc.service包中,而我的LoginAction类在com.sc.web包中。@RomanC试过了。未修复错误。@user2191903如果有错误,请发布stacktrace并从action类中删除
@Controller
注释,因为Struts不需要使用Spring MVC annotations对bean进行注释。哦,您使用了哪个Spring版本?关于我的更新,在您的类上使用@Configurable annotation如何?啊,sry,我是说这两个服务和可配置anno在您的控制器登录类上进行注释。仍然错误?这就是问题所在。非常感谢你。