struts2、Spring3、hibernate,运行时Action中提示service空指针

java_MagicWang 2012-02-01 01:34:14
Action代码如下:
package com.bbs.action;

import com.bbs.bean.User;
import com.bbs.service.UserService;

public class LoginAction {
private User user;
private String userName;
private String pwd;
private UserService userService;

public String getUserName() {
return userName;
}

public void setUserName(String userName) {
this.userName = userName;
}

public String getPwd() {
return pwd;
}

public void setPwd(String pwd) {
this.pwd = pwd;
}

public User getUser() {
return user;
}

public void setUser(User user) {
this.user = user;
}

public String Login() {
String rs = null;
try {
User user = userService.findUser(userName);
System.out.println(user.getName() + user.getPasw());
if (user != null && user.getPasw().equals(pwd)) {
rs = "success";
} else {
rs = "error";
}
} catch (Exception e) {
e.printStackTrace();
}
return rs;
}

public UserService getUserService() {
return userService;
}

public void setUserService(UserService userService) {
this.userService = userService;
}

}

UserServiceImpl代码:
package com.bbs.service.impl;

import com.bbs.bean.User;
import com.bbs.dao.UserDao;
import com.bbs.service.UserService;

public class UserServiceImpl implements UserService{

private UserDao userDao;

@Override
public User findUser(String userName) {
return userDao.findUser(userName);
}

public UserDao getUserDao() {
return userDao;
}

public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}

}

struts.xml代码:
<?xml version="1.0" encoding="GBK" ?>   
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="front" namespace="/" extends="struts-default">
<action name="index">
<result>/index.jsp</result>
</action>
<action name="toLogin">
<result>/WEB-INF/jsp/login.jsp</result>
</action>
<action name="login" class="com.bbs.action.LoginAction" method="Login">
<result name="success">/index.jsp</result>
<result name="error">/WEB-INF/jsp/error.jsp</result>
</action>
</package>
</struts>

applicationContext.xml代码:
<?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"
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/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"
default-autowire="byName" default-lazy-init="true">

<!-- 配置数据源 -->
<bean id="myDataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource"
destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/forum" />
<property name="username" value="root" />
<property name="password" value="root" />
</bean>
<!-- 配置sessionFactory -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="myDataSource" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>classpath:com/bbs/bean/User.hbm.xml</value>
</list>
</property>
</bean>

<bean id="userDao" class="com.bbs.dao.impl.UserDaoImpl">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<bean id="userService" class="com.bbs.service.impl.UserServiceImpl">
<property name="userDao">
<ref local="userDao" />
</property>
</bean>
<!-- 配置struts2的Action -->
<bean name="loginAction" scope="prototype" class="com.bbs.action.LoginAction">
<property name="userService">
<ref local="userService" />
</property>
</bean>

</beans>

...全文
283 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
java_MagicWang 2012-02-03
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 java_magicwang 的回复:]
引用 8 楼 zhk0377 的回复:
引用 6 楼 q327339905 的回复:

default-autowire="byName", 去掉这个试试


既然都有 <property name="userDao">
<ref local="userDao" />
</property>
ref引用了,就不要default-autowire="byName"

是不是加了……
[/Quote]
但是去掉ref就报错了,
去掉default-autowire="byName"正常运行
java_MagicWang 2012-02-03
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 zhk0377 的回复:]
引用 6 楼 q327339905 的回复:

default-autowire="byName", 去掉这个试试


既然都有 <property name="userDao">
<ref local="userDao" />
</property>
ref引用了,就不要default-autowire="byName"
[/Quote]
是不是加了default-autowire="byName"之后会根据你<property name="">的值自己去装配,下面的ref就多此一举了?不过我这样写也没报错~
java_MagicWang 2012-02-03
  • 打赏
  • 举报
回复
谢谢楼上大各位了,我解决了,之所以空指针居然是因为少了个commons-pool.jar,struts.xml,applicationContext.xml我都没改。
我就改个名 2012-02-02
  • 打赏
  • 举报
回复
default-autowire="byName", 去掉这个试试
iteasy 2012-02-02
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 q327339905 的回复:]

default-autowire="byName", 去掉这个试试
[/Quote]

既然都有 <property name="userDao">
<ref local="userDao" />
</property>
ref引用了,就不要default-autowire="byName"
  • 打赏
  • 举报
回复
userService为空,看了代码和配置还真看不出为什么为null。。
wel_Sky 2012-02-02
  • 打赏
  • 举报
回复
两个疑点:
1.userService注入进去了?
2.userName在数据库中存在?
这两个点都有可能出现空指针异常。如果我用户名不存在你登陆了 返回给你的绝对是个null
Spring89 2012-02-01
  • 打赏
  • 举报
回复
既然在applicationContext.xml里加上了default-autowire="byName",那么,你把下面配置bean的,全部去掉property
当然了,楼上说的也得改!这两个都改了你在试下吧!
java爱好者 2012-02-01
  • 打赏
  • 举报
回复
你把这段代码

<action name="login" class="com.bbs.action.LoginAction" method="Login">
<result name="success">/index.jsp</result>
<result name="error">/WEB-INF/jsp/error.jsp</result>
</action>

改成

<action name="login" class="loginAction" method="Login">
<result name="success">/index.jsp</result>
<result name="error">/WEB-INF/jsp/error.jsp</result>
</action>

试试
java_MagicWang 2012-02-01
  • 打赏
  • 举报
回复
控制台错误信息:
java.lang.NullPointerException
at com.bbs.action.LoginAction.Login(LoginAction.java:39)
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:453)
at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:292)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:255)
at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:256)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
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:249)
at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:211)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:211)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:190)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:90)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:243)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
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:249)
at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:192)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:510)
at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
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:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:662)

81,120

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧