我以我做的一个例子来说明框架的搭建过程 ^V^!
项目结构如图:
action:存放Action类,也就是控制类
dao:DAO数据库操作
po:POJO类,也就是持久化类
service:存放Service类
dao类在Service类里调用,然后Service类再到action类里调用
搭建过程
我们先要准备jar价包,这个可以去官网下载
下面是我准备的开发jar价包
然后我为了提高安全性,我将所有的JSP页面放在了WEB-INF下面
然后配置SSH的配置文件
Spring的配置文件代码:
代码语言:javascript复制<?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的配置文件代码:
代码语言:javascript复制<?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的配置文件代码:
代码语言:javascript复制<?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实体类:
代码语言:javascript复制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文件
代码语言:javascript复制<?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实现
代码语言:javascript复制import java.util.List;
import com.sgdata.po.Student;
public interface StudentDao {
/**
* 获取所有学生信息
* @return
*/
public List<Student> getAllStudentInfo();
}
代码语言:javascript复制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实现:
代码语言:javascript复制import java.util.List;
import com.sgdata.po.Student;
public interface StudentService {
/**
* 获取所有学生信息
* @return
*/
public List<Student> getAllStudentInfo();
}
代码语言:javascript复制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实现:
代码语言:javascript复制/**
* 实现学生信息管理的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" %>
然后获取数据了
代码语言:javascript复制 <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^