本示例是 Spring+Struts+Hibernate 整合來(lái)編寫(xiě)一個(gè)用戶注冊(cè)的簡(jiǎn)單示例 , 項(xiàng)目名稱為 mySSH, 示例中連接的數(shù)據(jù)庫(kù)為 MySQL, 使用前應(yīng)在 MySQL 中創(chuàng)建一個(gè)數(shù)據(jù)庫(kù) mySSH,mySSH 中創(chuàng)建數(shù)據(jù)庫(kù)表 user,SQL 語(yǔ)句如下 ,CREATE TABLE ‘user’(‘id’ VARCHAR(32)NOT MULL,’username’ VARCHAR(32) NOT NULL,’password’ VARCHAR(32) NOT NULL,PRIMARY KEY (‘id’))ENGINE=MYISAM; 示例的簡(jiǎn)單代碼如下 :
< 一 > 在 mySSH/WEB-INF 目錄下編寫(xiě) web.xml
<? 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" >
< servlet >
< servlet-name > actionServlet </ servlet-name >
< servlet-class > org.apache.struts.action.ActionServlet </ servlet-class >
< init-param >
< param-name > config </ param-name >
< param-value > /WEB-INF/struts-config.xml </ param-value >
</ init-param >
< load-on-startup > 1 </ load-on-startup >
</ servlet >
< servlet-mapping >
< servlet-name > actionServlet </ servlet-name >
< url-pattern > *.do </ url-pattern >
</ servlet-mapping >
</ web-app >
< 二 > 在 mySSH/WEB-INF/jsp 目錄下編寫(xiě)用戶注冊(cè)頁(yè)面 regedit.jsp
<%@ page contentType = "text/html;charset=GBK" %>
< html >
< head >< title > Spring,Struts 和 Hibernate 整合實(shí)例 </ title ></ head >
<%
String msg=request.getAttribute( "msg" )== null ? "" :(String)request.getAttribute( "msg" );
%>
< body > <%= msg %>
< form action = "/mySSH/regedit.do" method = "post" >
用戶名 : < input type = "text" name = "name" value = "${user.username }"/><br>
密碼 : < input type = "password" name = "password" value = "" />< br >
< input type = "submit" name = "method" value = " 提交 " />
</ form >
</ body >
</ html >
< 三 > 在 mySSH/WEB-INF/jsp 目錄下編寫(xiě)用戶注冊(cè)成功頁(yè)面 success.jsp
<%@ page contentType = "text/html;charset=GBK" %>
< html >
< head >< title > Spring,Struts 和 Hibernate 整合實(shí)例 </ title ></ head >
< body >
提交成功 : 你輸入的用戶名是 :${user.name }, 密碼是 :${user.password }
</ body >
</ html >
< 四 > 在 com.gc.vo 包下編寫(xiě) POJO---User.java
package com.gc.vo;
public class User {
private String id ;
private String username ;
private String password ;
public User(String username,String password){
this . username =username;
this . password =password;
}
public User(){
}
public String getId() {
return id ;
}
public void setId(String id) {
this . id = id;
}
public String getPassword() {
return password ;
}
public void setPassword(String password) {
this . password = password;
}
public String getUsername() {
return username ;
}
public void setUsername(String username) {
this . username = username;
}
}
< 五 > 在 com.gc.vo 包下編寫(xiě)映射文件 User.hbm.xml
<? xml version = "1.0" encoding = "UTF-8" ?>
<! DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 2.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" >
< hibernate-mapping >
< class name = "com.gc.vo.User" table = "user" >
< id name = "id" type = "java.lang.String" >
< generator class = "uuid.hex" ></ generator >
</ id >
< property name = "username"
type = "java.lang.String"
column = "username"
not-null = "true"
length = "32" >
</ property >
< property name = "password"
type = "java.lang.String"
column = "password"
not-null = "true"
length = "32" >
</ property >
</ class >
</ hibernate-mapping >
< 六 > 在 com.gc.dao 包下編寫(xiě)接口類 UserDAO.java
package com.gc.dao;
import com.gc.vo.*;
public interface UserDAO {
// 新增用戶
public abstract void createUser(User user);
// 修改用戶
public abstract void updateUser(User user);
// 刪除用戶
public abstract void deleteUser(User user);
// 查詢用戶
public abstract User queryUser(String name);
}
< 七 > 在 com.gc.dao.impl 包下編寫(xiě)接口類 UserDAO 的實(shí)現(xiàn)類 UserDAOImpl.java
package com.gc.dao.impl;
import com.gc.dao.UserDAO;
import com.gc.vo.User;
import java.util.ArrayList;
import java.util.List;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.orm.toplink.SessionFactory;
public class UserDAOImpl extends HibernateDaoSupport implements UserDAO{
// 依賴注入 SessionFactory
private SessionFactory sessionFactory ;
// 定義查詢 SQL 語(yǔ)氣
private String SQL = "from user u where u.username=?" ;
// 新增用戶
public void createUser(User user){
this .getHibernateTemplate().save(user);
}
// 修改用戶
public void updateUser(User user){
this .getHibernateTemplate().update(user);
}
// 刪除用戶
public void deleteUser(User user){
this .getHibernateTemplate().delete(user);
}
// 查詢用戶
public User queryUser(String name){
List userList;
if ( this .getHibernateTemplate().find( SQL , name)== null )
userList= new ArrayList();
else
userList= this .getHibernateTemplate().find( SQL , name);
return (User)userList.get(0);
}
}
< 八 > 在 mySSH/WEB-INF 目錄下編寫(xiě) Struts 的配置文件 struts-config.xml
<? 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 >
<!-- 定義 formBean -->
< form-beans >
< form-bean name = "user" type = "com.gc.vo.User" />
</ form-beans >
< action-mappings >
< action path = "/regedit" type = "org.springframework.web.struts.DelegatingActionProxy" name = "user" >
< forward name = "success" path = "WEB-INF/jsp/success.jsp" ></ forward >
< forward name = "input" path = "WEB-INF/jsp/regedit.jsp" ></ forward >
</ action >
< action path = "/input" type = "org.apache.struts.actions.ForwardAction"
parameter = "/WEB-INF/jsp/regedit.jsp" >
</ action >
</ action-mappings >
<!-- 注冊(cè) Struts 插件 , 與 Spring 相結(jié)合 -->
< plug-in className = "org.springframework.web.struts.ContextLoaderPlugIn" >
< set-property property = "contextConfigLocation" value = "/WEB-INF/config.xml" />
</ plug-in >
</ struts-config >
< 九 > 在 mySSH/WEB-INF 目錄下編寫(xiě) Spring 的配置文件 config.xml
<? xml version = "1.0" encoding = "UTF-8" ?>
<! DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/sring-beans.dtd" >
< beans >
< bean id = "regedit" class = "com.gc.service.impl.RegeditImpl" >
< property name = "userDAO" >
< ref local = "userDAO" />
</ property >
</ bean >
< bean name = "/regedit" class = "com.gc.action.RegeditAction" >
< property name = "regedit" >
< ref bean = "regedit" />
</ property >
</ bean >
< bean name = "/input" class = "com.gc.action.RegeditAction" >
< property name = "regedit" >
< ref bean = "regedit" />
</ property >
</ bean >
<!-- 定義數(shù)據(jù)源 -->
< bean id = "dataSource"
class = "org.apache.commons.dbcp.BasicDataSource"
destroy-method = "close" >
<!-- 設(shè)定驅(qū)動(dòng) -->
< property name = "driverClassName" >
< value > com.mysql.jdbc.Driver </ value >
</ property >
<!-- 設(shè)定 URL -->
< property name = "url" >
< value > jdbc:mysql://localhost:3306/mySSH </ value >
</ property >
<!-- 設(shè)定用戶名 -->
< property name = "username" >
< value > tang </ value >
</ property >
<!-- 設(shè)定密碼 -->
< property name = "password" >
< value > admin </ value >
</ property >
</ bean >
<!-- 和 Hibernate 聯(lián)系起來(lái) -->
< bean id = "sessionFactory"
class = "org.springframework.orm.hibernate3.LocalSessionFactoryBean" >
< property name = "dataSource" >
< ref bean = "dataSource" />
</ property >
< property name = "mappingResources" >
< list >
< value > com\gc\vo\User.hbm.xml </ value >
</ list >
</ property >
< property name = "hibernateProperties" >
< props >
< prop key = "hibernate.dialect" > org.hibernate.dialect.MySQLDialect </ prop >
< prop key = "hibernate.show_sql" > true </ prop >
</ props >
</ property >
</ bean >
<!-- 進(jìn)行事務(wù)處理 -->
< bean id = "transactionManager"
class = "org.springframework.orm.hibernate3.HibernateTransactionManager" >
< property name = "sessionFactory" >
< ref bean = "sessionFactory" />
</ property >
</ bean >
<!-- 進(jìn)行事務(wù)代理 -->
< bean id = "userDAOProxy"
class = "org.springframework.transaction.interceptor.TransactionProxyFactoryBean" >
< property name = "transactionManager" >
< ref bean = "transactionManager" />
</ property >
< property name = "target" >
< ref local = "userDAO" />
</ property >
</ bean >
< bean id = "userDAO" class = "com.gc.dao.impl.UserDAOImpl" >
< property name = "sessionFactory" >
< ref bean = "sessionFactory" />
</ property >
</ bean >
</ beans >
< 十 > 在 com.gc.action 包下編寫(xiě)控制器 RegeditAction.java
package com.gc.action;
import com.gc.vo.User;
import com.gc.service.Regedit;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
public class RegeditAction extends Action{
private Regedit regedit ;
// 依賴注入
public Regedit getRegedit() {
return regedit ;
}
public void setRegedit(Regedit regedit) {
this . regedit = regedit;
}
public ActionForward execute(ActionMapping mapping,
ActionForm form,HttpServletRequest request,
HttpServletResponse response) throws Exception{
// 保存頁(yè)面提交的用戶信息
getRegedit().saveUser((User)form);
request.setAttribute( "user" ,(User)form);
return mapping.findForward( "success" );
}
}
< 十一 > 在 com.gc.service 包下編寫(xiě)業(yè)務(wù)邏輯接口 Regedit.java
package com.gc.service;
import com.gc.vo.User;
public interface Regedit {
// 保存用戶
public abstract void saveUser(User user);
}
< 十二 > 在 com.gc.service 包下編寫(xiě)具體的業(yè)務(wù)邏輯類 RegeditImpl.java
package com.gc.service.impl;
import com.gc.dao.UserDAO;
import com.gc.service.Regedit;
import com.gc.vo.User;
public class RegeditImpl implements Regedit{
private UserDAO userDao ;
// 保存用戶
public void saveUser(User user){
userDao .createUser(user);
}
// 修改用戶
public void updateUser(User user){
userDao .updateUser(user);
}
// 修改用戶
public void deleteUser(User user){
userDao .deleteUser(user);
}
// 查詢用戶
public User queryUser(String username){
return userDao .queryUser(username);
}
// 依賴注入
public UserDAO getUserDao() {
return userDao ;
}
public void setUserDao(UserDAO userDao) {
this . userDao = userDao;
}
}