ssh整合配置

本文详细介绍SSH(Struts+Spring+Hibernate)框架的集成配置过程,包括Spring配置文件的组织、数据库连接配置、事务管理配置等核心内容,并展示了具体的类文件及映射文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 (1)
spring.xml 主配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "WEB-INF/spring-beans.dtd">
<!-- dtd可以从本地找文件找-->
<beans>
<!--拆分成不同的文件 -->
<import resource="daoContext.xml" />
<import resource="serviceContext.xml" />
<import resource="strutsContext.xml" />
<!--读取*.properties 资料文件-->
<bean id="propertyConfigurer"
   class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
   <property name="locations">
    <list>
     <value>classpath:config/config.properties</value>
    </list>
   </property>
</bean>
</beans>


daocontext.xml hibernate-spring.xml 配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "
http://www.springframework.org/dtd/spring-beans.dtd">

<!--hibernate 在 spring 中的配置 -->
<beans>
<!--配置 jdbc 数据源-->
<bean id="dataSource"
   class="org.apache.commons.dbcp.BasicDataSource"
   destroy-method="close">
   <property name="driverClassName" value="${jdbc.driverClassName}"></property>
   <property name="url" value="${jdbc.url}"></property>
   <property name="username" value="${jdbc.username}"></property>
   <property name="password" value="${jdbc.password}"></property>
</bean>
<!-- 配置 hibernate sessionFactory -->
<bean id="sessionFactory"
   class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
   <property name="dataSource">
    <ref bean="dataSource" />
   </property>
   <property name="mappingDirectoryLocations">
    <list>
     <value>classpath:/config/hbm/</value>
    </list>
   </property>
   <property name="hibernateProperties">
    <props>
     <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
     <prop key="hibernate.connection.release_mode">auto</prop>
     <prop key="hibernate.show_sql">true</prop>
     <prop key="connection.useUnicode">true</prop>
     <prop key="connection.characterEncoding">gbk</prop>
<!--出现中文乱码的问题 -->
     <prop key="hibernate.query.factory_class">
     org.hibernate.hql.classic.ClassicQueryTranslatorFactory</prop>
    </props>
   </property>
</bean>
<!-- 配置事务管理器 -->
<bean id="transactionManager"
   class="org.springframework.orm.hibernate3.HibernateTransactionManager">
   <property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- 配置拦截器 -->
<bean id="baseService"
   class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
   abstract="true">
   <property name="transactionManager" ref="transactionManager" />
   <property name="proxyTargetClass" value="true" />
   <property name="transactionAttributes">
    <props>
     <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
     <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
     <prop key="load*">PROPAGATION_REQUIRED,readOnly</prop>
     <prop key="save*">PROPAGATION_REQUIRED</prop>
     <prop key="insert*">PROPAGATION_REQUIRED</prop>
     <prop key="delete*">PROPAGATION_REQUIRED</prop>
     <prop key="update*">PROPAGATION_REQUIRED</prop>
     <prop key="remove*">PROPAGATION_REQUIRED</prop>
     <prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
    </props>
   </property>
</bean>
<!-- 配置 DAO -->

<!--利用 spring 依赖注入-->
<bean id="sygroupDao" class="cn.aowin.pms.dao.impl.SygroupDao">
   <property name="sessionFactory">
    <ref bean="sessionFactory" />
   </property>
</bean>
<bean id="msphaseDao" class="cn.aowin.pms.dao.impl.MsphaseDao">
   <property name="sessionFactory">
    <ref bean="sessionFactory" />
   </property>
</bean>
<bean id="syuserDao" class="cn.aowin.pms.dao.impl.SyuserDao">
   <property name="sessionFactory">
    <ref bean="sessionFactory" />
   </property>
</bean>
<bean id="syroleDao" class="cn.aowin.pms.dao.impl.SyroleDao">
   <property name="sessionFactory">
    <ref bean="sessionFactory" />
   </property>
</bean>

<!-- 配置 pageinate DAO -->

<bean id="paginationDao" class="cn.aowin.pms.util.PaginationDao">
        <property name="sessionFactory">
            <ref bean="sessionFactory" />
        </property>
    </bean>


</beans>

struts.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "
http://www.springframework.org/dtd/spring-beans.dtd">

<!-- struts 由 spring 来管理-->

<
<beans default-autowire="byName">
<bean name="/user" class="cn.aowin.pms.web.action.SyuserAction"/>


<!-- 分页 -->
<bean name="/splitPage" class="cn.aowin.pms.web.action.SplitPageAction" />
   
    <!-- 投资管理 -->
    <!-- 1 编制年投计划 -->
    <bean name="/invest" class="cn.aowin.pms.web.action.InvestAction" />
</beans>


(SSH框架集成需要注意的配置问题
文章出处:DIY部落(
http://www.diybl.com/course/3_program/java/javajs/20090207/154878.html))
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "
http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!-- struts-config.xml-->
<!--action的class属性需要改成代理类 org.springframework.web.struts.DelegatingActionProxy -->
<action name="userForm" parameter="method" path="/user" scope="request" type="org.springframework.web.struts.DelegatingActionProxy" validate="false" />
<!--添加控制器和插件-->
<controller>
<set-property property="processorClass" value="org.springframework.web.struts.DelegatingRequestProcessor" />
</controller>
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation" value="WEB-INF/applicationContext.xml" />
</plug-in>
<!-- applicationContext.xml -->
<!-- 把 Action 交给Spring管理-->
<bean name="/user" class="yourcompany.yourprogram.action.UserAction">
<property name="biz" ref="userBiz"></property>
</bean>
<!-- 实体类映射关系 hbm.xml -->
<!-- hibernate对应关系时注意添加 用户表:User 多个用户对应一个角色 角色表:Role 一个角色对应多个用户 -->
<!-- many-to-one -->
<!-- 添加
cascade=&quot;save-update&quot;
outer-join=&quot;auto&quot;
-->
<many-to-one name="role" class="sw.role.entity.Role" fetch="select" cascade="save-update" outer-join="auto">
<column name="RoleId" not-null="true" />
</many-to-one>
<!-- one-to-many -->
<!-- 添加
inverse=&quot;false&quot;
cascade=&quot;all-delete-orphan&quot;
outer-join=&quot;true&quot;
-->
<set name="user" inverse="false" cascade="all-delete-orphan" outer-join="true">
<key>
<column name="RoleId" not-null="true" />
</key>
<one-to-many class="sw.role.entity.Users" />
</set>
</beans>

(SSH集成要点)
Struts,Spring与hibernate集成:
1、在工程中导入spring支持,导入的Jar包有:
* Spring 2.0 Core Libraries
* Spring 2.0 ORM/DAO/Hibernate3 Libraries
* Spring 2.0 AOP Libraries
* Spring 2.0 Web Libraries
2、在Spring配置文件中配置dataSource和SessionFactory,将hibernate配置与Spring配置整合在一起(可以删除hibernate.cfg.xml文件);
3、导入数据库源所要使用的Jar包,如:DBCP所用的JAR包(commons-pool.jar);
4、修改所有DAO的hibernate实现,因为Spring中提供了一个HibernateDAOSupport类,可以简化数据库的操作。使用所有DAO类都继承自该类;
5、将DAO采用依赖注入的方式注入到Biz中,再将Biz采用依赖注入的方式注入到Action中,在Spring配置文件中做相应配置;
6、将Spring与Struts集成:
1)在spring配置文件配置Action:将Biz注入到Action中;
2)修改Struts的配置文件:添加节点<controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor" />

3)在web.xml文件中配置监听器以及web应用的初始化参数:
<!-- 向监听器类中传递初始化参数,以获取beanFactory对象 -->
   <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/applicationContext.xml /WEB-INF/applicationContext-beans.xml</param-value>
   </context-param>
 
   <!-- 使用监听器初始化Spring的beanFactory,并将其放入到Context中,在使用时将其取出,以获取IOC容器中的bean -->
   <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
   </listener>
7、为了解决应用中的中文乱码问题,我们可以不用自己开发过滤器类,Spring为我们提供了一个,只需要配置一下即可:
  <!-- 使用Spring中的过滤器解决中文乱码问题 -->
   <filter>
    <filter-name>characterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
     <param-name>encoding</param-name>
     <param-value>UTF-8</param-value>
    </init-param>
   </filter>
 
   <filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
   </filter-mapping>
8、为了解决hibernate延迟加载的问题,使用Spring中提供的过滤器来解决,它能够让Session
在请求响应完成之后再关闭,配置方式如下:
<!-- 解决hibernate延迟加载带来的异常,配置过滤器使Session在请求完成之后再关闭 -->
   <filter>
    <filter-name>hibernate session manager filter</filter-name>
    <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
   </filter>
 
   <filter-mapping>
    <filter-name>hibernate session manager filter</filter-name>
    <url-pattern>/*</url-pattern>
   </filter-mapping>
9、因为OpenSessionInViewFilter在getSession的时候,会把获取回来的session的flush mode 设为FlushMode.NEVER。故进行insert、
update和delete操作时会产生异常:org.springframework.dao.InvalidDataAccessApiUsageException:
Write operations are not allowed in read-only mode (FlushMode.NEVER/MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition.
因此需要采用spring的事务声明,使方法受transaction控制:
<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  <property name="sessionFactory" ref="sessionFactory" />
</bean>

<!-- 配置Advice(事务的传播特性) -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
  <tx:attributes>
   <tx:method name="add*" propagation="REQUIRED"/>
   <tx:method name="del*" propagation="REQUIRED"/>
   <tx:method name="update*" propagation="REQUIRED"/>
   <tx:method name="get*" propagation="SUPPORTS" read-only="true"/>
   <tx:method name="search*" propagation="SUPPORTS" read-only="true"/>
  </tx:attributes>
</tx:advice>

<!-- 配置事务管理器应用的范围 -->
<aop:config>
  <aop:pointcut id="affectMethods" expression="execution(* edu.accp.dao.hibImpl.*.*(..))"/>
  <aop:advisor advice-ref="txAdvice" pointcut-ref="affectMethods"/>
</aop:config>
10、 部署应用程序,启动服务器,如果发现异常:
java.lang.NoSuchMethodError:
org.objectweb.asm.ClassVisitor.visit(IILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V
这是由于整合时Jar包的冲突引起的。


(3)
http://www.blogjava.net/action/archive/2009/04/09/140566.html
首选创建web.xml 主要是配置Struts的ActionServlet和Spring的字符过滤器

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="
http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
 
  <filter>
    <filter-name>CharacterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
      <param-name>forceEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
  </filter>
 
  <filter-mapping>
    <filter-name>CharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
 
  <servlet>
    <servlet-name>action</servlet-name>
    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
    <init-param>
      <param-name>config</param-name>
      <param-value>/WEB-INF/struts/struts.xml</param-value>
    </init-param>
    <init-param>
      <param-name>debug</param-name>
      <param-value>3</param-value>
    </init-param>
    <init-param>
      <param-name>detail</param-name>
      <param-value>3</param-value>
    </init-param>
    <load-on-startup>0</load-on-startup>
  </servlet>
 
  <servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>
 
  <!-- session超时定义,单位为分钟 -->
  <session-config>
    <session-timeout>10</session-timeout>
  </session-config>
 
  <!-- 默认首页定义 -->
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>index.html</welcome-file>
  </welcome-file-list>
 
</web-app>

然后创建struts.xml(String配置文件) 要注意这里集成了Spring插件,把全部Spring配置文件注入到ContextLoaderPlugIn中

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "
http://struts.apache.org/dtds/struts-config_1_2.dtd">
<struts-config>

  <form-beans>
<form-bean name="loginVO" type="com.vo.LoginVO" />
  </form-beans>

  <global-forwards>
   <forward name="error" path="/error.jsp"/>
  </global-forwards>

  <action-mappings>
   <action path="/login"
     name="loginVO"
      type="org.springframework.web.struts.DelegatingActionProxy"
      parameter="action"
      scope="request">
      <forward name="login" path="/login.jsp"/>
      <forward name="index" path="/index.jsp"/>
    </action>
  </action-mappings>

  <!-- 集成Spring插件 -->
  <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
    <set-property property="contextConfigLocation" value="/WEB-INF/spring/*.xml" />
  </plug-in>

</struts-config>


配置Spring配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "
http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!-- 读入属性文件 -->
<bean id="propertyConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
  <property name="locations">
   <list>
    <value>classpath:hibernate.properties</value>
   </list>
  </property>
</bean>

<!-- 配置数据源,可以其他方式 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
     <property name="driverClassName" value="${hibernate.driverClassName}" />
  <property name="url" value="${hibernate.url}" />
  <property name="username" value="${hibernate.username}" />
  <property name="password" value="${hibernate.password}" />
     <property name="maxActive" value="${hibernate.maxActive}" />
  <property name="maxIdle" value="${hibernate.maxIdle}" />
  <property name="maxWait" value="${hibernate.maxWait}" />
    </bean>

<!-- 配置Hibernate的Session工厂,注入数据源、映射文件 -->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
     <property name="dataSource">
        <ref local="dataSource"/>
     </property>
        <property name="mappingResources">
            <list>
                <value>com/po/login.hbm.xml</value>
            </list>
        </property>
        <property name="hibernateProperties">
       <props>
         <prop key="hibernate.dialect">${hibernate.dialect}</prop>
         <prop key="hibernate.show_sql">${hibernate.showSQL}</prop>
       </props>
     </property>
    </bean>

<!-- 声明Hibernate事务管理,注入Session工厂 -->
    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
     <property name="sessionFactory">
       <ref local="sessionFactory"/>
     </property>
   </bean>

<!-- 配置事务代理,注入事务管理transactionManager,由Spring来代理事务,设置事务属性 -->
    <bean id="transactionProxy" abstract="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
     <property name="transactionManager">
       <ref bean="transactionManager"/>
     </property>
     <property name="transactionAttributes">
       <props>
           <prop key="save*">PROPAGATION_REQUIRED,-Exception</prop>
               <prop key="add*">PROPAGATION_REQUIRED,-Exception</prop>
               <prop key="remove*">PROPAGATION_REQUIRED,-Exception</prop>
               <prop key="delete*">PROPAGATION_REQUIRED,-Exception</prop>
               <prop key="update*">PROPAGATION_REQUIRED,-Exception</prop>
               <prop key="create*">PROPAGATION_REQUIRED,-Exception</prop>
               <prop key="query*">PROPAGATION_REQUIRED,readOnly</prop>
               <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
               <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
               <prop key="load*">PROPAGATION_REQUIRED,readOnly</prop>
               <prop key="*">PROPAGATION_REQUIRED</prop>
       </props>
     </property>
    </bean>
</beans>


配置Action将Service注入到Action

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "
http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!-- 配置Action,singleton属性设置为false表示不使用单例,每次都重新创建实例,避免并发问题,注入事务管理的Service -->
  <bean name="/login" class="com.action.LoginAction" singleton="false">
   <property name="loginService">
         <ref bean="loginService"/>
        </property>
  </bean>
</beans>

配置Service将Dao注入到Service

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "
http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!-- 配置事务代理Service,先将Dao注入到Service,再将Service注入给事务代理 -->
    <bean id="loginService" parent="transactionProxy">
     <property name="target">
      <ref bean="loginTempService"/>
     </property>
   </bean>
   <bean id="loginTempService" class="com.service.LoginService">
        <property name="loginDao">
         <ref bean="loginDao"/>
        </property>
    </bean>
</beans>

配置Dao 注入Session工厂

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "
http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!-- 配置Dao,注入Session工厂 -->
    <bean id="loginDao" class="com.dao.LoginDao">
        <property name="sessionFactory">
         <ref bean="sessionFactory"/>
        </property>
    </bean>
</beans>

数据源属性文件(注意不是Hibernate的配置文件,是为了让Spring读入的)

hibernate.dialect=org.hibernate.dialect.SQLServerDialect
hibernate.driverClassName=com.mysql.jdbc.Driver
hibernate.url=jdbc:mysql://127.0.0.1:3306/ssh
hibernate.username=root
hibernate.password=5719
hibernate.showSQL=true
hibernate.maxActive=50
hibernate.maxIdle=30
hibernate.maxWait=1000

log4j配置文件(简单)

log4j.rootLogger=ERROR,console,file

log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%-5p %d [%F,%L] - %m%n

log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=F://SSH.log
#log4j.appender.file.MaxFileSize=100000KB
#log4j.appender.file.MaxBackupIndex=1
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%-5p %d [%F,%L] - %m%n

下面是类文件

package com.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;

import com.service.LoginService;
import com.vo.LoginVO;

public class LoginAction extends DispatchAction {

private Log logger = LogFactory.getLog(LoginAction.class);
private LoginService loginService;

public void setLoginService(LoginService loginService) {
  this.loginService = loginService;
}

public ActionForward login(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response) {
  try {
   LoginVO loginVO = (LoginVO) form;
   String username = loginVO.getUsername();
   String password = loginVO.getPassword();
   System.out.println(username+password);
   if(loginService.validate(username, password)) {
    return mapping.findForward("index");
   }
   return mapping.findForward("error");
  } catch (Exception e) {
   logger.error(e);
   return mapping.findForward("error");
  }
}

public ActionForward save(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response) {
  try {
   LoginVO loginVO = (LoginVO) form;
   loginService.saveUser(loginVO);
   return mapping.findForward("index");
  } catch (Exception e) {
   logger.error(e);
   return mapping.findForward("error");
  }
}
}

package com.dao;

import java.util.List;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import com.po.LoginPO;

public class LoginDao extends HibernateDaoSupport {

@SuppressWarnings("unchecked")
public String getPassword(String username) {
  String hql = "from LoginPO l where l.username=?";
  List list = getSession().createQuery(hql).setString(0,username).list();
  if(list!=null && list.size()>0) {
   LoginPO loginPO = (LoginPO) list.get(0);
   return loginPO.getPassword();
  }
  return null;
}

public void save(LoginPO loginPO) {
  getSession().save(loginPO);
}
}

package com.po;

import java.io.Serializable;

public class LoginPO implements Serializable {

private static final long serialVersionUID = 1L;

private Integer id = null;
private String username = null;
private String password = null;

public Integer getId() {
  return id;
}
public String getPassword() {
  return password;
}
public String getUsername() {
  return username;
}
public void setId(Integer id) {
  this.id = id;
}
public void setPassword(String password) {
  this.password = password;
}
public void setUsername(String username) {
  this.username = username;
}
}

package com.service;

import com.dao.LoginDao;
import com.po.LoginPO;
import com.vo.LoginVO;

public class LoginService {

private LoginDao loginDao;

public void setLoginDao(LoginDao loginDao) {
  this.loginDao = loginDao;
}

public boolean validate(String username,String password) {
  String pass = loginDao.getPassword(username);
  if(pass!=null) {
   if(pass.equals(password)) {
    return true;
   }
  }
  return false;
}

public void saveUser(LoginVO loginVO) {
  LoginPO loginPO = new LoginPO();
  loginPO.setUsername(loginVO.getUsername());
  loginPO.setPassword(loginVO.getPassword());
  System.out.println(loginVO.getUsername()+"-"+loginVO.getPassword()+":save succeed...");
  loginDao.save(loginPO);
  //故意制造异常,测试事务。
  //loginDao.save(null);
}
}

package com.vo;

import org.apache.struts.action.ActionForm;

public class LoginVO extends ActionForm {

private static final long serialVersionUID = 1L;

private String username = null;

private String password = null;

public String getPassword() {
  return password;
}
public String getUsername() {
  return username;
}
public void setPassword(String password) {
  this.password = password;
}
public void setUsername(String username) {
  this.username = username;
}
}


Hibernate映射文件

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"
http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
    <class name="com.po.LoginPO" table="login">
        <comment></comment>
      
        <id name="id" type="int">
   <column name="id" />
   <generator class="native" />
  </id>
      
        <property name="username" type="string">
            <column name="username" not-null="true">
                <comment></comment>
            </column>
        </property>
      
        <property name="password" type="string">
            <column name="password" not-null="true">
                <comment></comment>
            </column>
        </property>
    </class>
</hibernate-mapping>

jsp页面文件

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body>
  <form name="form" action="login.do?action=login" method="post">
   <h1>Login</h1>
   <h4>username:</h4><input name="username" type="text">&nbsp;&nbsp;&nbsp;<span id="message"></span>
   <h4>password:</h4><input name="password" type="password">
   <br>
   <br>
   <input value="提交" type="button" onclick="form.submit();">
  </form>
  <br>
  <br>
  <br>
  <form name="form" action="login.do?action=save" method="post">
   <h1>Save</h1>
   <h4>username:</h4><input name="username" type="text">&nbsp;&nbsp;&nbsp;<span id="message"></span>
   <h4>password:</h4><input name="password" type="password">
   <br>
   <br>
   <input value="提交" type="button" onclick="form.submit();">
  </form>
</body>
</html>
()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值