当前位置:编程学习 > JAVA >>

ssh搭建,执行loginaction类中的exceute方法报空指针异常

小弟我是根据下面这个教程搭建的:
   http://blog.csdn.net/zhdjbabygo/article/details/7730791
但在执行的过程中,execute方法报以下异常:
java.lang.NullPointerException
at com.mch.action.LoginAction.execute(LoginAction.java:16)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
...
即users对象为空,初步怀疑是applicationcontext.xml文件配置问题,但在修改了配置文件后,报的另一种异常(寻找了相似例子)仍然不发解决问题。
type Exception report
message 
description The server encountered an internal error () that prevented it from fulfilling this request.
exception 
Unabl to instantiate Action, loginAction,  defined for 'login' in namespace '/'loginAction
com.opensymphony.xwork2.DefaultActionInvocation.createAction(DefaultActionInvocation.java:316)...
请大虾们指点下小弟我.感觉不尽.分数不多,请笑纳. --------------------编程问答-------------------- 还是改回去把,虽然报错了但第一种配置是正确的。 --------------------编程问答-------------------- 看看是不是这个原因 --------------------编程问答--------------------
引用 1 楼 f893147944 的回复:
还是改回去把,虽然报错了但第一种配置是正确的。

嗯,不过空指针问题解决不了,实在不知道怎么弄了.你知道解决方法么? --------------------编程问答--------------------
引用 1 楼 f893147944 的回复:
还是改回去把,虽然报错了但第一种配置是正确的。

程序应该不存在包重复问题,web.xml配置文件:
<context-param>
   <param-name>contextConfigLocation</param-name>
   <param-value>classpath:com/mch/config/applicationContext.xml</param-value>
  </context-param>
调试时,已经可以获取到所输入的用户名、密码.唯独users这个对象为空.不知是否因为没有实例化造成. --------------------编程问答-------------------- 如图:
--------------------编程问答--------------------
引用 5 楼 zh22ou 的回复:
如图:
发代码上来瞅瞅呗 --------------------编程问答--------------------
引用 6 楼 songbgi 的回复:
Quote: 引用 5 楼 zh22ou 的回复:

如图:
发代码上来瞅瞅呗

代码跟下面这个博客上的是一样的,唯一的差别就是命名的大小写不一样或者名字不一样而已
http://blog.csdn.net/zhdjbabygo/article/details/7730791
--------------------编程问答--------------------
引用 3 楼 zh22ou 的回复:
Quote: 引用 1 楼 f893147944 的回复:

还是改回去把,虽然报错了但第一种配置是正确的。

嗯,不过空指针问题解决不了,实在不知道怎么弄了.你知道解决方法么?

我看了一下这个配置步骤,里面没有提到users,所以我也不清楚你这个action 16行是不是users,还是一步步去找一下,看看users的值应该从那里来,为什么没有赋值进去。 --------------------编程问答-------------------- 你的users 不会是把人家的  private UserService userService;  这行改成private UserService users;  了把?
--------------------编程问答--------------------
引用 9 楼 f893147944 的回复:
你的users 不会是把人家的  private UserService userService;  这行改成private UserService users;  了把?

嗯,是的.这个有关系么? --------------------编程问答-------------------- package com.mch.action;


import com.mch.action.bean.BeanAction;
import com.mch.service.UserService;

public class LoginAction extends BeanAction {

private static final long serialVersionUID = 7803370514585593518L;
private UserService users;
private String username;
private String userpass;

public String execute(){
try{
if(users.login(username, userpass))
return "success";
return "error";
}catch(Exception e){
e.printStackTrace();
return "error";
}
}

public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}

public String getUserpass() {
return userpass;
}

public void setUserpass(String userpass) {
this.userpass = userpass;
}

public void setUsers(UserService users) {
this.users = users;
}
}
--------------------编程问答--------------------
引用 10 楼 zh22ou 的回复:
Quote: 引用 9 楼 f893147944 的回复:

你的users 不会是把人家的  private UserService userService;  这行改成private UserService users;  了把?

嗯,是的.这个有关系么?

那关系大了,这个事例中的spring 配置文件确实配置,没有把service层和dao层配进去的,也就是UserService 
根本没有实例化。 --------------------编程问答--------------------
引用 12 楼 f893147944 的回复:
Quote: 引用 10 楼 zh22ou 的回复:

Quote: 引用 9 楼 f893147944 的回复:

你的users 不会是把人家的  private UserService userService;  这行改成private UserService users;  了把?

嗯,是的.这个有关系么?

那关系大了,这个事例中的spring 配置文件确实配置,没有把service层和dao层配进去的,也就是UserService 
根本没有实例化。

嗯,我也怀疑是这个,但是实在不知道怎么配置,找了类似的例子根据解决方法配置,程序就不到execute方法里去,而且报另外一种异常.所以才来这里请教. --------------------编程问答--------------------
引用 13 楼 zh22ou 的回复:
Quote: 引用 12 楼 f893147944 的回复:

Quote: 引用 10 楼 zh22ou 的回复:

Quote: 引用 9 楼 f893147944 的回复:

你的users 不会是把人家的  private UserService userService;  这行改成private UserService users;  了把?

嗯,是的.这个有关系么?

那关系大了,这个事例中的spring 配置文件确实配置,没有把service层和dao层配进去的,也就是UserService 
根本没有实例化。

嗯,我也怀疑是这个,但是实在不知道怎么配置,找了类似的例子根据解决方法配置,程序就不到execute方法里去,而且报另外一种异常.所以才来这里请教.


给你个方向,这个事例的配置都不用动,只是需要再添加一些配置,建议去看一下spring的依赖注入和spring的事务管理配置,基本上就缺这两部分配置,在spring配置文件中加这两方面的配置就应该可以了,可不是两行配置代码哈,只能帮到这里了,在说就该给你贴代码了,结贴给分慢慢去学习把。 --------------------编程问答-------------------- 给你个方向,这个事例的配置都不用动,只是需要再添加一些配置,建议去看一下spring的依赖注入和spring的事务管理配置,基本上就缺这两部分配置,在spring配置文件中加这两方面的配置就应该可以了,可不是两行配置代码哈,只能帮到这里了,在说就该给你贴代码了,结贴给分慢慢去学习把。

<?xml version="1.0" encoding="UTF-8"?>
<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"
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"
default-autowire="byName" default-lazy-init="true">

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
<property name="url" value="jdbc:sqlserver://localhost:1434;database=shoppingDB"/>
<property name="username" value="sa"/>
<property name="password" value="123456"/>
</bean>
<bean id="MySessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource"/>
</property>
<property name="mappingResources">
<value>com/mch/config/user.hbm.xml</value>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
</props>
</property>
</bean>
<bean id="uDao" class="com.mch.dao.impl.UserDaoImpl">
<property name="sessionFactory" ref="MySessionFactory"/>
</bean>
<bean id="uService" class="com.mch.service.impl.UserServiceImpl">
<property name="userDao" ref="uDao"/>
</bean>
<bean id="LoginAction" class="com.mch.action.LoginAction">
<property name="userService">
<ref bean="uService"/>
</property>
</bean>
</beans>

还是空指针异常,不知为何,spring始终没有给对象实例化. --------------------编程问答-------------------- 除 --------------------编程问答--------------------
引用 15 楼 zh22ou 的回复:
给你个方向,这个事例的配置都不用动,只是需要再添加一些配置,建议去看一下spring的依赖注入和spring的事务管理配置,基本上就缺这两部分配置,在spring配置文件中加这两方面的配置就应该可以了,可不是两行配置代码哈,只能帮到这里了,在说就该给你贴代码了,结贴给分慢慢去学习把。


<?xml version="1.0" encoding="UTF-8"?>
<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"
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"
default-autowire="byName" default-lazy-init="true">

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
<property name="url" value="jdbc:sqlserver://localhost:1434;database=shoppingDB"/>
<property name="username" value="sa"/>
<property name="password" value="123456"/>
</bean>
<bean id="MySessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource"/>
</property>
<property name="mappingResources">
<value>com/mch/config/user.hbm.xml</value>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
</props>
</property>
</bean>
<bean id="uDao" class="com.mch.dao.impl.UserDaoImpl">
<property name="sessionFactory" ref="MySessionFactory"/>
</bean>
<bean id="uService" class="com.mch.service.impl.UserServiceImpl">
<property name="userDao" ref="uDao"/>
</bean>
<bean id="LoginAction" class="com.mch.action.LoginAction">
<property name="userService">
<ref bean="uService"/>
</property>
</bean>
</beans>

还是空指针异常,不知为何,spring始终没有给对象实例化.

你的UserService  实例名不是叫users么?怎么这边配成了userService,把错误贴出来 --------------------编程问答--------------------
引用 17 楼 f893147944 的回复:
Quote: 引用 15 楼 zh22ou 的回复:

给你个方向,这个事例的配置都不用动,只是需要再添加一些配置,建议去看一下spring的依赖注入和spring的事务管理配置,基本上就缺这两部分配置,在spring配置文件中加这两方面的配置就应该可以了,可不是两行配置代码哈,只能帮到这里了,在说就该给你贴代码了,结贴给分慢慢去学习把。


<?xml version="1.0" encoding="UTF-8"?>
<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"
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"
default-autowire="byName" default-lazy-init="true">

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
<property name="url" value="jdbc:sqlserver://localhost:1434;database=shoppingDB"/>
<property name="username" value="sa"/>
<property name="password" value="123456"/>
</bean>
<bean id="MySessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource"/>
</property>
<property name="mappingResources">
<value>com/mch/config/user.hbm.xml</value>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
</props>
</property>
</bean>
<bean id="uDao" class="com.mch.dao.impl.UserDaoImpl">
<property name="sessionFactory" ref="MySessionFactory"/>
</bean>
<bean id="uService" class="com.mch.service.impl.UserServiceImpl">
<property name="userDao" ref="uDao"/>
</bean>
<bean id="LoginAction" class="com.mch.action.LoginAction">
<property name="userService">
<ref bean="uService"/>
</property>
</bean>
</beans>

还是空指针异常,不知为何,spring始终没有给对象实例化.


你的UserService  实例名不是叫users么?怎么这边配成了userService,把错误贴出来
我重新修改回来啦,免得你们看混了.哈哈 --------------------编程问答--------------------
引用 17 楼 f893147944 的回复:
Quote: 引用 15 楼 zh22ou 的回复:

给你个方向,这个事例的配置都不用动,只是需要再添加一些配置,建议去看一下spring的依赖注入和spring的事务管理配置,基本上就缺这两部分配置,在spring配置文件中加这两方面的配置就应该可以了,可不是两行配置代码哈,只能帮到这里了,在说就该给你贴代码了,结贴给分慢慢去学习把。


<?xml version="1.0" encoding="UTF-8"?>
<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"
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"
default-autowire="byName" default-lazy-init="true">

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
<property name="url" value="jdbc:sqlserver://localhost:1434;database=shoppingDB"/>
<property name="username" value="sa"/>
<property name="password" value="123456"/>
</bean>
<bean id="MySessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource"/>
</property>
<property name="mappingResources">
<value>com/mch/config/user.hbm.xml</value>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
</props>
</property>
</bean>
<bean id="uDao" class="com.mch.dao.impl.UserDaoImpl">
<property name="sessionFactory" ref="MySessionFactory"/>
</bean>
<bean id="uService" class="com.mch.service.impl.UserServiceImpl">
<property name="userDao" ref="uDao"/>
</bean>
<bean id="LoginAction" class="com.mch.action.LoginAction">
<property name="userService">
<ref bean="uService"/>
</property>
</bean>
</beans>

还是空指针异常,不知为何,spring始终没有给对象实例化.


你的UserService  实例名不是叫users么?怎么这边配成了userService,把错误贴出来
错误如下:
java.lang.NullPointerException
at com.mch.action.LoginAction.execute(LoginAction.java:18)
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:589)
at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:450)
at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:289)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:252)
at org.apache.struts2.interceptor.DeprecationInterceptor.intercept(DeprecationInterceptor.java:41)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:256)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:167)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:265)
at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:249)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:249)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:191)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:73)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:91)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:252)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:139)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:193)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:189)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:562)
at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:228)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:216)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:634)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445)
at java.lang.Thread.run(Thread.java:619)
--------------------编程问答-------------------- 你的18行实例名是userService? --------------------编程问答-------------------- set方法的没有,struts的标签是通过set方法来注入值的 --------------------编程问答--------------------
引用 20 楼 f893147944 的回复:
你的18行实例名是userService?

是的呀,如图:
--------------------编程问答--------------------
引用 21 楼 qiuqiupeng 的回复:
set方法的没有,struts的标签是通过set方法来注入值的

set方法是有的,就是不知道为何spring不实例化
--------------------编程问答-------------------- 刚才看了一下,原来你这个配置代码是直接从人家事例回复中直接复制的,就告诉你一点,依赖注入中的id名称必须和你代码中的实例名称一致,也就是说 <bean id="uService" class="com.mch.service.impl.UserServiceImpl">这个id名称也必须是userService,同样在action层引用配置中也必须都是userService,看来你的自学能力还是得加强,程序猿这行不好混,改行把小白。 --------------------编程问答--------------------
引用 24 楼 f893147944 的回复:
刚才看了一下,原来你这个配置代码是直接从人家事例回复中直接复制的,就告诉你一点,依赖注入中的id名称必须和你代码中的实例名称一致,也就是说 <bean id="uService" class="com.mch.service.impl.UserServiceImpl">这个id名称也必须是userService,同样在action层引用配置中也必须都是userService,看来你的自学能力还是得加强,程序猿这行不好混,改行把小白。

 <bean id="userService" class="com.mch.service.impl.UserServiceImpl">
照你这么说,UserService只是个接口,而实现这个接口的是UserServiceImpl,那上面的id应该改成
<bean id="userServiceImpl" class="com.mch.service.impl.UserServiceImpl"> --------------------编程问答--------------------
引用 25 楼 zh22ou 的回复:
Quote: 引用 24 楼 f893147944 的回复:

刚才看了一下,原来你这个配置代码是直接从人家事例回复中直接复制的,就告诉你一点,依赖注入中的id名称必须和你代码中的实例名称一致,也就是说 <bean id="uService" class="com.mch.service.impl.UserServiceImpl">这个id名称也必须是userService,同样在action层引用配置中也必须都是userService,看来你的自学能力还是得加强,程序猿这行不好混,改行把小白。

 <bean id="userService" class="com.mch.service.impl.UserServiceImpl">
照你这么说,UserService只是个接口,而实现这个接口的是UserServiceImpl,那上面的id应该改成
<bean id="userServiceImpl" class="com.mch.service.impl.UserServiceImpl">


汗…… 你这java基础也太……,这个就跟写代码一样,
UserService userService = new UserServiceImpl();
UserService userService2 = new UserServiceImplDemo();
这两个都可以,new的对象名称和后边的实现类有直接关系不?  --------------------编程问答--------------------
引用 26 楼 f893147944 的回复:

嗯,我的基础是很差.
但是我也试过你说的那种写了,一样的空指针


<?xml version="1.0" encoding="UTF-8"?>
<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"
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"
default-autowire="byName" default-lazy-init="true">

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
<property name="url" value="jdbc:sqlserver://localhost:1434;database=shoppingDB"/>
<property name="username" value="sa"/>
<property name="password" value="123456"/>
</bean>
<bean id="MySessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource"/>
</property>
<property name="mappingResources">
<value>com/mch/config/user.hbm.xml</value>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
</props>
</property>
</bean>
<bean id="UserDao" class="com.mch.dao.impl.UserDaoImpl">
<property name="sessionFactory" ref="MySessionFactory"/>
</bean>
<bean id="UserService" class="com.mch.service.impl.UserServiceImpl">
<property name="userDao">
<ref bean="UserDao"/>
</property>
</bean>
<bean id="LoginAction" class="com.mch.action.LoginAction">
<property name="userService">
<ref bean="UserService"/>
</property>
</bean>
</beans> --------------------编程问答-------------------- <bean id="LoginAction" class="com.mch.action.LoginAction">
<property name="userService">
这里<property name="userService">叫做userService,那么你LoginAction也必须叫做userService,再有setUserService方法。
而<ref bean="UserService"/>的UserService就对应上<bean id="UserService" class="com.mch.service.impl.UserServiceImpl">里的id就好了。
建议你把名字取成一样,这也是一种代码习惯。别uService,又是users,出现多个名称自己容易出错,别人看你代码也不舒服~
再问一句:你服务启动spring没有报错的吧!这是前提。 --------------------编程问答--------------------
引用 28 楼 song_1990 的回复:
<bean id="LoginAction" class="com.mch.action.LoginAction">
<property name="userService">
这里<property name="userService">叫做userService,那么你LoginAction也必须叫做userService,再有setUserService方法。
而<ref bean="UserService"/>的UserService就对应上<bean id="UserService" class="com.mch.service.impl.UserServiceImpl">里的id就好了。
建议你把名字取成一样,这也是一种代码习惯。别uService,又是users,出现多个名称自己容易出错,别人看你代码也不舒服~
再问一句:你服务启动spring没有报错的吧!这是前提。

呃...说得我有点糊涂,<property name="userService">这里的userService不是LoginAction中声明的对象名称吗(有可能你说的我理解错了)?
运行都正常,就是输入用户名、密码点击登录时,对象为空... --------------------编程问答--------------------
引用 29 楼 zh22ou 的回复:
Quote: 引用 28 楼 song_1990 的回复:

<bean id="LoginAction" class="com.mch.action.LoginAction">
<property name="userService">
这里<property name="userService">叫做userService,那么你LoginAction也必须叫做userService,再有setUserService方法。
而<ref bean="UserService"/>的UserService就对应上<bean id="UserService" class="com.mch.service.impl.UserServiceImpl">里的id就好了。
建议你把名字取成一样,这也是一种代码习惯。别uService,又是users,出现多个名称自己容易出错,别人看你代码也不舒服~
再问一句:你服务启动spring没有报错的吧!这是前提。

呃...说得我有点糊涂,<property name="userService">这里的userService不是LoginAction中声明的对象名称吗(有可能你说的我理解错了)?
运行都正常,就是输入用户名、密码点击登录时,对象为空...

是你理解的,我是提醒你要写成一样。你可以尝试在LoginAction中自己声明变量,即userService=new userServiceImpl();如果可以就是你spring配置的问题了额 --------------------编程问答--------------------
引用 11 楼 zh22ou 的回复:
package com.mch.action;


import com.mch.action.bean.BeanAction;
import com.mch.service.UserService;

public class LoginAction extends BeanAction {

private static final long serialVersionUID = 7803370514585593518L;
private UserService users;
private String username;
private String userpass;

public String execute(){
try{
if(users.login(username, userpass))
return "success";
return "error";
}catch(Exception e){
e.printStackTrace();
return "error";
}
}

public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}

public String getUserpass() {
return userpass;
}

public void setUserpass(String userpass) {
this.userpass = userpass;
}

public void setUsers(UserService users) {
this.users = users;
}
}
users在application中配置对了吗,显然没有注入进去 --------------------编程问答-------------------- 你就不能老老实实的copy下人家的代码,看看能不能跑通,然后在理解的基础上再进行修改或者增加other action方法,再进行调试啊,什么的! --------------------编程问答--------------------
引用 15 楼 zh22ou 的回复:
给你个方向,这个事例的配置都不用动,只是需要再添加一些配置,建议去看一下spring的依赖注入和spring的事务管理配置,基本上就缺这两部分配置,在spring配置文件中加这两方面的配置就应该可以了,可不是两行配置代码哈,只能帮到这里了,在说就该给你贴代码了,结贴给分慢慢去学习把。


<?xml version="1.0" encoding="UTF-8"?>
<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"
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"
default-autowire="byName" default-lazy-init="true">

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
<property name="url" value="jdbc:sqlserver://localhost:1434;database=shoppingDB"/>
<property name="username" value="sa"/>
<property name="password" value="123456"/>
</bean>
<bean id="MySessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource"/>
</property>
<property name="mappingResources">
<value>com/mch/config/user.hbm.xml</value>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
</props>
</property>
</bean>
<bean id="uDao" class="com.mch.dao.impl.UserDaoImpl">
<property name="sessionFactory" ref="MySessionFactory"/>
</bean>
<bean id="uService" class="com.mch.service.impl.UserServiceImpl">
<property name="userDao" ref="uDao"/>
</bean>
<bean id="LoginAction" class="com.mch.action.LoginAction">
<property name="userService">
<ref bean="uService"/>
</property>
</bean>
</beans>

还是空指针异常,不知为何,spring始终没有给对象实例化.
配置的是uService,程序中是users,所以注入不进去。 --------------------编程问答--------------------
引用 32 楼 Jason150214 的回复:
你就不能老老实实的copy下人家的代码,看看能不能跑通,然后在理解的基础上再进行修改或者增加other action方法,再进行调试啊,什么的!

就是根据他的代码来弄的呀,users/userService这个都试过了,一样空指针,我才去修改applicationcontext.xml文件的 --------------------编程问答--------------------
引用 33 楼 guduyishuai 的回复:
Quote: 引用 15 楼 zh22ou 的回复:

给你个方向,这个事例的配置都不用动,只是需要再添加一些配置,建议去看一下spring的依赖注入和spring的事务管理配置,基本上就缺这两部分配置,在spring配置文件中加这两方面的配置就应该可以了,可不是两行配置代码哈,只能帮到这里了,在说就该给你贴代码了,结贴给分慢慢去学习把。


<?xml version="1.0" encoding="UTF-8"?>
<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"
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"
default-autowire="byName" default-lazy-init="true">

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
<property name="url" value="jdbc:sqlserver://localhost:1434;database=shoppingDB"/>
<property name="username" value="sa"/>
<property name="password" value="123456"/>
</bean>
<bean id="MySessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource"/>
</property>
<property name="mappingResources">
<value>com/mch/config/user.hbm.xml</value>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
</props>
</property>
</bean>
<bean id="uDao" class="com.mch.dao.impl.UserDaoImpl">
<property name="sessionFactory" ref="MySessionFactory"/>
</bean>
<bean id="uService" class="com.mch.service.impl.UserServiceImpl">
<property name="userDao" ref="uDao"/>
</bean>
<bean id="LoginAction" class="com.mch.action.LoginAction">
<property name="userService">
<ref bean="uService"/>
</property>
</bean>
</beans>

还是空指针异常,不知为何,spring始终没有给对象实例化.

配置的是uService,程序中是users,所以注入不进去。
呃...我把你给绕混了,现在我已经修改回来了.
LoginAction中的对象叫 userService,配置文件中也使用userService了,但是还是空指针。 --------------------编程问答--------------------
引用 30 楼 song_1990 的回复:
Quote: 引用 29 楼 zh22ou 的回复:

Quote: 引用 28 楼 song_1990 的回复:

<bean id="LoginAction" class="com.mch.action.LoginAction">
<property name="userService">
这里<property name="userService">叫做userService,那么你LoginAction也必须叫做userService,再有setUserService方法。
而<ref bean="UserService"/>的UserService就对应上<bean id="UserService" class="com.mch.service.impl.UserServiceImpl">里的id就好了。
建议你把名字取成一样,这也是一种代码习惯。别uService,又是users,出现多个名称自己容易出错,别人看你代码也不舒服~
再问一句:你服务启动spring没有报错的吧!这是前提。

呃...说得我有点糊涂,<property name="userService">这里的userService不是LoginAction中声明的对象名称吗(有可能你说的我理解错了)?
运行都正常,就是输入用户名、密码点击登录时,对象为空...

是你理解的,我是提醒你要写成一样。你可以尝试在LoginAction中自己声明变量,即userService=new userServiceImpl();如果可以就是你spring配置的问题了额

还是无效...哎。
补充:Java ,  Web 开发
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,