读书人

struts2、Spring3、hibernate运行时

发布时间: 2012-03-08 13:30:13 作者: rapoo

struts2、Spring3、hibernate,运行时Action中提示service空指针
Action代码如下:

Java code
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代码:
Java code
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 code
<?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 code
<?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> 




[解决办法]
你把这段代码
XML code
<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>
[解决办法]
既然在applicationContext.xml里加上了default-autowire="byName",那么,你把下面配置bean的,全部去掉property
当然了,楼上说的也得改!这两个都改了你在试下吧!
[解决办法]
userService为空,看了代码和配置还真看不出为什么为null。。
[解决办法]
default-autowire="byName", 去掉这个试试
[解决办法]
两个疑点:
1.userService注入进去了?
2.userName在数据库中存在?
这两个点都有可能出现空指针异常。如果我用户名不存在你登陆了 返回给你的绝对是个null
[解决办法]
探讨

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

读书人网 >Java Web开发

热点推荐