问题背景:
       刚学习完Struts2,Hibernate3,Spring的基础入门知识,想做一个登录系统。该项目目前已能满足——验证登录页面中输入的用户信息是否与数据库中存在的用户信息相同。
       配置完登录页面后我想做一个注册页面,我期望在注册页面的表单中提交输入信息后能将它持久化,保存到数据库中,可一直报错项目结构:
源码:
Action:package action;
import service.UserService;
public class LoginAction  {
private String name;
private String password;
private UserService userService; public String login() { //接收从login.jsp页面传过来的值

if (null == name && null == password) {
return "login";
} else {
Boolean u = userService.login(name, password); //把值传到UserService.login方法中

if (u) {
return "ok";                //根据返回的boolean值跳转到不同的JSP页面
} else {
return "error";
}
}
}
//省略getter与setter方法
package action;
import service.UserService;public class RegisterAction  {
private String name;
private String password;
private UserService userService;
public String register(){
if (null == name && null == password) {
return "login";
} else {
Boolean r = userService.register(name, password); //把值传到UserService.register方法中

if (r) {
return "registerOK";                   //根据返回的boolean值跳转到不同的JSP页面
} else {
return "registerError";
}
}
}//省略getter与setterService:public class UserServiceImpl implements UserService {
private UserDAO userDAO; public boolean login(String name, String password) {   //接收从LoginAction中传来的值,并传给UseDao中的queryUserByName
TUser u = userDAO.queryUserByName(name);
if (u == null) {
return false;
} else {
if (u.getPassword().equals(password)) {    //根据UserDaoImpl中返回的用户实例TUser来匹配密码,返回boolean值
return true;
} else {
return false;
}
}
}
public boolean register(String name,String password){
TUser r = userDAO.registerUser(name,password);
if (r == null) {
return false;
} else return true;
  //根据UserDaoImpl中返回的用户实例TUser来匹配密码,返回boolean值,这里并未做具体的注册判断,毕竟注册功能一直没实现
}//省略getter与setterUserService接口:public interface UserService {
public boolean login(String name,String password);
public boolean register(String name, String password);
}
DAO:
重点来了!package dao;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;import entity.HibernateSessionFactory;
import entity.TUser;public class UserDAOImpl implements UserDAO {
private SessionFactory sessionFactory;
private Session session;
public TUser queryUserByName(String name) {                     //该方法是验证登录信息的方法,能正常执行
Query query = sessionFactory.getCurrentSession().createQuery(
"from TUser as u where u.name = ?");
query.setString(0, name);
TUser u = (TUser) query.uniqueResult();    //根据name返回一个用户实例Tuser
return u;
}
public TUser registerUser(String name,String password){            //该方法是持久化注册信息的方法
TUser r = new TUser();                                                //运行报错的源头,不知道是什么问题造成的
r.setName(name);
r.setPassword(password);
try{
session = sessionFactory.getCurrentSession();
session.beginTransaction();
session.save(r);
session.getTransaction().commit();
}catch(Exception e){
session.getTransaction().rollback();
System.out.println("数据库添加失败");
e.printStackTrace();
}finally{
HibernateSessionFactory.closeSession();
}
return r;

}entity:
就是普通的UserBean,定义了name和password两个属性与他们的getter/setter方法
TUser.hbm.xml:<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="entity.TUser" table="t_user" catalog="sshtest">
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="identity" />
        </id>
        <property name="name" type="java.lang.String">
            <column name="name" />
        </property>
        <property name="password" type="java.lang.String">
            <column name="password" />
        </property>
    </class>
</hibernate-mapping>配置文件:
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:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd" xmlns:tx="http://www.springframework.org/schema/tx">
 <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:jdbc.properties</value>
            </list>
        </property>
    </bean> 
 
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName"  value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/sshtest?useSSL=true"></property>
<property name="username" value="root"></property>
<property name="password" value="888555mm"></property>
    </bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>entity/TUser.hbm.xml</value>
</list>
</property>
</bean>
<bean id="transactionManager"
class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<bean id="baseTransactionProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" abstract="true">
<property name="transactionManager" ref="transactionManager" /> 
<property name="transactionAttributes">
<props>
<!-- 指明进行事务管理业务方法名[*是通配符] -->
<prop key="get*">PROPAGATION_NOT_SUPPORTED</prop>  
                <prop key="count*">PROPAGATION_NOT_SUPPORTED</prop>  
                <prop key="select*">PROPAGATION_NOT_SUPPORTED</prop>  
                <prop key="find*">PROPAGATION_NOT_SUPPORTED</prop>  
                <prop key="load*">PROPAGATION_NOT_SUPPORTED</prop>  
                <prop key="add*">PROPAGATION_REQUIRED,-Exception</prop>  
                <prop key="insert*">PROPAGATION_REQUIRED,-Exception</prop>  
                <prop key="update*">PROPAGATION_REQUIRED,-Exception</prop>  
                <prop key="delete*">PROPAGATION_REQUIRED,-Exception</prop>  
                <prop key="import*">PROPAGATION_REQUIRED,-Exception</prop>  
                <prop key="remove*">PROPAGATION_REQUIRED,-Exception</prop>  
                <prop key="batch*">PROPAGATION_REQUIRED,-Exception</prop>  
                <prop key="del*">PROPAGATION_REQUIRED,-Exception</prop>  
                <prop key="save">PROPAGATION_REQUIRED,-Exception</prop>  
                <prop key="save*">PROPAGATION_REQUIRED,-Exception</prop>  
                <prop key="union*">PROPAGATION_REQUIRED,-Exception</prop>  
                <prop key="*">PROPAGATION_REQUIRED</prop>  
</props>
</property>
</bean>

 <!-- 登录Action -->
<bean id="loginAction" class="action.LoginAction" scope="singleton">
<property name="userService" ref="userService" />
</bean>
<!-- 注册Action -->
<bean id="RegisterAction" class="action.RegisterAction" scope="singleton">
<property name="userService" ref="userService" />
</bean>

<!-- userDAO  -->
<bean id="userDAO" class="dao.UserDAOImpl" parent="daoTemplate" />
    <bean id="userService" parent="baseTransactionProxy">
<property name="target">
<bean class="service.UserServiceImpl">
<property name="userDAO" ref="userDAO"/>
</bean>
</property>
</bean>

<bean id="daoTemplate" abstract="true">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<tx:annotation-driven transaction-manager="transactionManager" /></beans>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="default" extends="struts-default">
    <action name="login" class="action.LoginAction" method="login" >
         <result name="login">login.jsp</result>
         <result name="ok">loginOk.jsp</result>
         <result name="error">loginError.jsp</result>
      </action>
      <action name="register" class="action.RegisterAction" method="register">
      <result name="registerOK">registerOK.jsp</result>
      <result name="registerError">registerError.jsp</result>
      </action>
</package>
</struts>    JSP页面:
登录页面,我在页面中添加了register按钮,可以跳转到注册页面,除了注册功能用不了,登录页面所有功能正常
<html><body>
<center><form method="post" action="login" >
  UserName<input type="text" name="name" id="name"/><br/>
  Password<input type="password" name="password" id="password"/><br/>
          <input type="submit" value="login" />
          </form>
           <input type="button" value="register" onclick="window.location.href('register.jsp')" />
          </center>
         
</body></html>注册页面:在注册页面的表单中输入信息点击提交后,错误内容如下: