搭建SSH三大框架WEB项目过程(Struts2.3+Hibernate4.3+Spring4.1)

ben52th 8年前

来自: http://blog.csdn.net/u014427391/article/details/50621111




我以我做的一个例子来说明框架的搭建过程 ^V^!


项目结构如图:

action:存放Action类,也就是控制类

daoDAO数据库操作

poPOJO类,也就是持久化类

service:存放Service


dao类在Service类里调用,然后Service类再到action类里调用



搭建过程

我们先要准备jar价包,这个可以去官网下载

下面是我准备的开发jar价包

然后我为了提高安全性,我将所有的JSP页面放在了WEB-INF下面


然后配置SSH的配置文件

Spring的配置文件代码:

<?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"   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-4.1.xsd   http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd   http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.1.xsd">  <!-- Spring框架配置文件 -->   <!-- 属性注入配置 -->   <context:annotation-config/>   <!-- 实现数据库配置 -->   <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">    <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>    <property name="url" value="jdbc:mysql://localhost:3306/db_sgdata?useUnicode=true&characterEncoding=UTF-8"></property>    <property name="username" value="root"></property>    <property name="password" value="111"></property>    <property name="maxActive" value="100"></property>    <property name="maxIdle" value="60"></property>    <property name="maxWait" value="10000"></property>   </bean>    <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">    <property name="dataSource" ref="dataSource"></property>    <property name="configLocation" value="classpath:hibernate.cfg.xml"></property>   </bean>   <bean id="hibernateTemplate" class="org.springframework.orm.hibernate4.HibernateTemplate">    <property name="sessionFactory" ref="sessionFactory"></property>   </bean>   <bean id="txManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">    <property name="sessionFactory" ref="sessionFactory"></property>   </bean>      <!-- 开启Spring框架的事务管理 ,开启之后@Transaction就可以用了 -->   <tx:annotation-driven transaction-manager="txManager"/>      <!-- 实现教师信息管理需要配置的Bean -->   <bean id="teacherDao" class="com.sgdata.dao.impl.TeacherDaoImpl">    <property name="sessionFactory" ref="sessionFactory"></property>   </bean>   <bean id="teacherService" class="com.sgdata.service.impl.TeacherServiceBean">   </bean>    <!--scope默认采用的是单例模式,scope="prototype" 可以保证 当有请求的时候都创建一个Action对象,保证Struts的Action线程安全 -->    <bean id="teacherAction" class="com.sgdata.action.TeacherInfoManagerAction" scope="prototype"></bean>   <bean id="loginCheckAction" class="com.sgdata.action.LoginCheckAction" scope="prototype"></bean>      <!-- 实现学生信息管理需要配置的Bean -->   <bean id="studentDao" class="com.sgdata.dao.impl.StudentDaoImpl">    <property name="sessionFactory" ref="sessionFactory"></property>   </bean>   <bean id="studentService" class="com.sgdata.service.impl.StudentServiceBean"></bean>   <bean id="studentAction" class="com.sgdata.action.StudentInfoManagerAction" scope="prototype"></bean>      <!-- 实现课程信息管理需要配置的Bean -->   <bean id="courseDao" class="com.sgdata.dao.impl.CourseDaoImpl">    <property name="sessionFactory" ref="sessionFactory"></property>   </bean>   <bean id="courseService" class="com.sgdata.service.impl.CourseServiceBean"></bean>   <bean id="courseAction" class="com.sgdata.action.CourseInfoManagerAction" scope="prototype"></bean>      <!-- 实现比赛信息管理需要配置的Bean -->   <bean id="matchDao" class="com.sgdata.dao.impl.MatchDaoImpl">    <property name="sessionFactory" ref="sessionFactory"></property>   </bean>   <bean id="matchService" class="com.sgdata.service.impl.MatchServiceBean"></bean>   <bean id="matchAction" class="com.sgdata.action.MatchInfoManagerAction" scope="prototype"></bean>     </beans>


Struts2的配置文件代码:

<?xml version="1.0" encoding="UTF-8" ?>  <!DOCTYPE struts PUBLIC   "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"   "http://struts.apache.org/dtds/struts-2.3.dtd">  <!-- Struts2框架配置文件 -->  <struts>   <!-- 配置struts2可以受理的请求扩展名 -->   <constant name="struts.action.extension" value="action,do,"></constant>      <!-- struts2的package对应于项目的模块 -->      <package name="action" extends="struts-default" namespace="/">       <!-- 配置action -->              <!-- 登录验证的Action -->       <action name="loginAction" class="loginCheckAction">        <result name="success">/WEB-INF/page/admin/index.jsp</result>        <result name="input">/WEB-INF/page/admin/login.jsp</result>       </action>              <!--      SSH项目WEB-INF下面的页面跳转要通过Servlet来实现,这样确实是麻烦了点,     不过安全性就提高上去了,因为放在WEB-INF下面的JSP页面,是不可以直接访问的     -->        <action name="indexAction">               <result>/WEB-INF/page/admin/index.jsp</result>          </action>          <action name="gotoLoginAction">         <result>/WEB-INF/page/admin/login.jsp</result>        </action>              <!-- 学生信息管理的Action -->       <action name="getAllStuInfoAction" class="studentAction" method="getAllInfo">         <result name="success">/WEB-INF/page/admin/student/studentInfoManager.jsp</result>       </action>       <action name="getStuInfoByIdAction" class="studentAction" method="getInfoById">        <result name="success">/WEB-INF/page/admin/student/studentInfoDetail.jsp</result>       </action>       <action name="getLearnScoresAction" class="studentAction" method="getLearnScoreById">        <result name="success">/WEB-INF/page/admin/student/studentLearnScores.jsp</result>       </action>       <action name="getMatchScoresAction" class="studentAction" method="getMatchScoreById">        <result name="success">/WEB-INF/page/admin/student/studentMatchScores.jsp</result>       </action>              <!-- 教师信息管理的Action -->       <action name="getAllTeaInfoAction" class="teacherAction" method="getAllInfo">         <result name="success">/WEB-INF/page/admin/teacher/teacherInfoManager.jsp</result>       </action>       <action name="getTeachingInfoAction" class="teacherAction" method="getTeachingInfoById">         <result name="success">/WEB-INF/page/admin/teacher/teacherTeaching.jsp</result>       </action>       <action name="getMatchGuideInfoAction" class="teacherAction" method="getMatchGuideInfoById">         <result name="success">/WEB-INF/page/admin/teacher/teacherMatchGuide.jsp</result>       </action>       <action name="getCourseStudentsInfoAction" class="teacherAction" method="getCourseStudentsInfoById">         <result name="success">/WEB-INF/page/admin/teacher/teacherCourseStusInfo.jsp</result>       </action>       <action name="getMatchStudentsInfoAction" class="teacherAction" method="getMatchStudentsInfoById">         <result name="success">/WEB-INF/page/admin/teacher/teacherMatchStusInfo.jsp</result>       </action>              <!-- 课程管理的Action -->       <action name="getAllCourseInfoAction" class="courseAction" method="getAllInfo">        <result name="success">/WEB-INF/page/admin/course/courseManager.jsp</result>       </action>       <action name="getTeachersInfoAction" class="courseAction" method="getTeachersInfoById">        <result name="success">/WEB-INF/page/admin/course/courseTeachersInfo.jsp</result>       </action>              <!-- 比赛信息管理的Action -->       <action name="getAllMatchInfoAction" class="matchAction" method="getAllInfo">        <result name="success">/WEB-INF/page/admin/match/matchInfoManager.jsp</result>       </action>       <action name="getStudentsInfoAction" class="matchAction" method="getStudentsInfoById">        <result name="success">/WEB-INF/page/admin/match/matchStudentsInfo.jsp</result>       </action>             </package>        </struts>

Hibernate的配置文件代码:

<?xml version='1.0' encoding='UTF-8'?>  <!DOCTYPE hibernate-configuration PUBLIC            "-//Hibernate/Hibernate Configuration DTD 3.0//EN"            "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">  <!-- Generated by MyEclipse Hibernate Tools.                   -->  <hibernate-configuration>  <!-- Hibernate框架配置文件 -->  <session-factory>   <!-- 配置sql语句可以打印在控制台 -->   <property name="show_sql">true</property>   <!--创建SessionFactory对象时自动创建数据表  -->   <property name="hbm2ddl.auto">update</property>   <!-- 配置映射文件 -->   <mapping resource="com/sgdata/po/Course.hbm.xml"/>   <mapping resource="com/sgdata/po/Deptment.hbm.xml"/>   <mapping resource="com/sgdata/po/Match.hbm.xml"/>   <mapping resource="com/sgdata/po/Student.hbm.xml"/>   <mapping resource="com/sgdata/po/StudentCourse.hbm.xml"/>   <mapping resource="com/sgdata/po/StudentMatch.hbm.xml"/>   <mapping resource="com/sgdata/po/Teacher.hbm.xml"/>   <mapping resource="com/sgdata/po/TeacherCourse.hbm.xml"/>   <mapping resource="com/sgdata/po/TeacherMatch.hbm.xml"/>  </session-factory>    </hibernate-configuration>



前面那些配置文件有包含其它的,这个要根据自己的项目需要去改的^V^

下面以学生信息管理的实现过程进行说明,只说明这个例子哈!


创建POJO实体类:

import java.util.Date;  import java.util.HashSet;  import java.util.Set;    /**   *    * 学生信息的实体类   * @author Nicky   *   */  public class Student {      /*    * 学号    */   private String stuID;      /*    * 班级    */   private String stuName;      /*    * 性别    */   private String stuSex;      /*    * 出生年日    */   private Date stuBirth;      /*    * 电话    */   private String stuTel;      /*    * 邮箱    */   private String stuEmail;      /*    * 专业    */   private String dept;      /*    * 身份证    */   private String stuIDCard;      /*    * 班级    */   private String className;      /*    * 登录密码    */   private String password;      /*    * 是否是管理员的标志  1表示是,0表示不是    */   private String isManager;      public String getStuID() {    return stuID;   }     public void setStuID(String stuID) {    this.stuID = stuID;   }     public String getStuName() {    return stuName;   }     public void setStuName(String stuName) {    this.stuName = stuName;   }     public String getStuSex() {    return stuSex;   }     public void setStuSex(String stuSex) {    this.stuSex = stuSex;   }     public Date getStuBirth() {    return stuBirth;   }     public void setStuBirth(Date stuBirth) {    this.stuBirth = stuBirth;   }     public String getStuTel() {    return stuTel;   }     public void setStuTel(String stuTel) {    this.stuTel = stuTel;   }     public String getStuEmail() {    return stuEmail;   }     public void setStuEmail(String stuEmail) {    this.stuEmail = stuEmail;   }     public String getDept() {    return dept;   }     public void setDept(String dept) {    this.dept = dept;   }     public String getStuIDCard() {    return stuIDCard;   }     public void setStuIDCard(String stuIDCard) {    this.stuIDCard = stuIDCard;   }     public String getClassName() {    return className;   }     public void setClassName(String className) {    this.className = className;   }     public String getPassword() {    return password;   }     public void setPassword(String password) {    this.password = password;   }     public String getIsManager() {    return isManager;   }     public void setIsManager(String isManager) {    this.isManager = isManager;   }        }

配置Student.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">    <hibernate-mapping package="com.sgdata.po">   <class name="Student" table="tb_students">    <id name="stuID" column="stuID" type="java.lang.String" length="11">     <generator class="assigned"></generator>    </id>    <property name="stuName" type="java.lang.String" length="30" not-null="true"></property>    <property name="stuSex" type="java.lang.String" length="2" not-null="true"></property>    <property name="stuBirth" type="java.util.Date" not-null="true"></property>    <property name="stuTel" type="java.lang.String" length="20" not-null="true"></property>    <property name="stuEmail" type="java.lang.String" length="20" not-null="true"></property>    <property name="dept" type="java.lang.String" length="10" not-null="true"></property>    <property name="stuIDCard" type="java.lang.String" length="20" not-null="true"></property>    <property name="className" type="java.lang.String" length="20" not-null="true"></property>    <property name="password" type="java.lang.String" length="10" not-null="true"></property>    <property name="isManager" type="java.lang.String" length="1" not-null="false"></property>   </class>  </hibernate-mapping>


DAO实现

import java.util.List;    import com.sgdata.po.Student;    public interface StudentDao {     /**    * 获取所有学生信息    * @return    */   public List<Student> getAllStudentInfo();     }


public class StudentDaoImpl extends HibernateDaoSupport implements StudentDao {      @Resource HibernateTemplate ht;      /**    * 获取所有信息    */   public List<Student> getAllStudentInfo() {    String sql = "from Student";    List<Student> students = (List<Student>) ht.find(sql);    return students;   }  }


Service实现:

import java.util.List;    import com.sgdata.po.Student;    public interface StudentService {     /**    * 获取所有学生信息    * @return    */   public List<Student> getAllStudentInfo();   }


import java.util.List;    import javax.annotation.Resource;    import org.springframework.transaction.annotation.Transactional;    import com.sgdata.dao.StudentDao;  import com.sgdata.po.Student;  import com.sgdata.service.StudentService;    @Transactional(readOnly=false)  public class StudentServiceBean implements StudentService {     @Resource private StudentDao studentDao;   public List<Student> getAllStudentInfo() {    return studentDao.getAllStudentInfo();   }  }

Action实现:

/**   * 实现学生信息管理的Action类   *    */  public class StudentInfoManagerAction extends ActionSupport {     /**    *     */   private static final long serialVersionUID = 1L;         @Resource private StudentService studentService;      //页数   int pagenum = 0;      //学号   private String stuID;      //姓名   private String stuName;      //性别   private String stuSex;      //出生年月   private String stuBirth;      //电话   private String stuTel;      //邮箱   private String stuEmial;      //系部   private String dept;      //身份证   private String stuIDCard;      //班级   private String className;      //密码   private String password;      /**    * 学生对象来储存学生信息    */   private Student student;      /**    * 学生信息的列表    */   private List<Student> studentsInfo;      /**    * 学生学习成绩的信息列表    */   private List learnScores;      /**    * 学生比赛成绩的信息列表    */   private List matchScores;      public StudentInfoManagerAction(){    //student = new Student();       }      public Student getStudent() {    return student;   }     public void setStudent(Student student) {    this.student = student;   }     public void setStudentsInfo(List<Student> studentsInfo){    this.studentsInfo = studentsInfo;   }     public List<Student> getStudentsInfo() {    return studentsInfo;   }     public List getLearnScores() {    return learnScores;   }     public void setLearnScores(List learnScores) {    this.learnScores = learnScores;   }     public List getMatchScores() {    return matchScores;   }     public void setMatchScores(List matchScores) {    this.matchScores = matchScores;   }     public int getPagenum() {    return pagenum;   }     public void setPagenum(int pagenum) {    this.pagenum = pagenum;   }     public String getStuID() {    return stuID;   }     public void setStuID(String stuID) {    this.stuID = stuID;   }     public String getStuName() {    return stuName;   }     public void setStuName(String stuName) {    this.stuName = stuName;   }     public String getStuSex() {    return stuSex;   }     public void setStuSex(String stuSex) {    this.stuSex = stuSex;   }     public String getStuBirth() {    return stuBirth;   }     public void setStuBirth(String stuBirth) {    this.stuBirth = stuBirth;   }     public String getStuTel() {    return stuTel;   }     public void setStuTel(String stuTel) {    this.stuTel = stuTel;   }     public String getStuEmial() {    return stuEmial;   }     public void setStuEmial(String stuEmial) {    this.stuEmial = stuEmial;   }     public String getDept() {    return dept;   }     public void setDept(String dept) {    this.dept = dept;   }     public String getStuIDCard() {    return stuIDCard;   }     public void setStuIDCard(String stuIDCard) {    this.stuIDCard = stuIDCard;   }     public String getClassName() {    return className;   }     public void setClassName(String className) {    this.className = className;   }     public String getPassword() {    return password;   }     public void setPassword(String password) {    this.password = password;   }     /**    * 获取学生的基本信息    * @return    * @throws Exception    */   //@Override   public String getAllInfo() throws Exception {    studentsInfo = studentService.getAllStudentInfo();    return SUCCESS;   }  }

然后就可以在JSP页面引入

<%@ taglib uri="/struts-tags" prefix="s" %>

然后获取数据了

<table class="table table-hover">           <tr>            <th width="120">学号</th>            <th width="120">姓名</th>            <th width="120">性别</th>            <th width="120">班级</th>            <th width="120">系部</th>            <th width="100">出生年月</th>            <th width="100">操作</th>           </tr>              <s:iterator value="studentsInfo" id="ssif" >              <tr>               <td><s:property value="#ssif.stuID" /></td>               <td><s:property value="#ssif.stuName" /></td>               <td><s:property value="#ssif.stuSex" /></td>               <td><s:property value="#ssif.className" /></td>               <td><s:property value="#ssif.dept" /></td>               <td><s:property value="#ssif.stuBirth" /></td>               <td>                <a class="button border-blue button-little" href="getStuInfoByIdAction?stuID=<s:property value='#ssif.stuID'/>">详情</a>                 <a class="button border-yellow button-little" href="getLearnScoresAction?stuID=<s:property value='#ssif.stuID' />" >学习</a>                <a class="button border-green button-little" href="getMatchScoresAction?stuID=<s:property value='#ssif.stuID' />">比赛</a>                </td>              </tr>              </s:iterator>          </table>


实现数据获取


这是我结合Bootstrap和SSH做的,结合例子来说明实现过程,希望可以帮到学习的人,有疑惑请留言哈!^V^