软件世界网 购物 网址 三丰软件 | 小说 美女秀 图库大全 游戏 笑话 | 下载 开发知识库 新闻 开发 图片素材
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
移动开发 架构设计 编程语言 Web前端 互联网
开发杂谈 系统运维 研发管理 数据库 云计算 Android开发资料
  软件世界网 -> 架构设计 -> 搭建SSH三大框架WEB项目过程(Struts2.3+Hibernate4.3+Spring4.1) -> 正文阅读

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


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


项目结构如图:
action:存放Action类,也就是控制类
daoDAO数据库操作
poPOJO类,也就是持久化类
service:存放Service


dao类在Service类里调用,然后Service类再到action类里调用
[img]http://img.blog.csdn.net/20160201235352284?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
搭建过程
我们先要准备jar价包,这个可以去官网下载
下面是我准备的开发jar价包
[img]http://img.blog.csdn.net/20160201235855931?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
然后我为了提高安全性,我将所有的JSP页面放在了WEB-INF下面
[img]http://img.blog.csdn.net/20160201235326354?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
然后配置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>

实现数据获取
[img]http://img.blog.csdn.net/20160202001742938?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
这是我结合Bootstrap和SSH做的,结合例子来说明实现过程,希望可以帮到学习的人,有疑惑请留言哈!^V^

......显示全文...
    点击查看全文


上一篇文章      下一篇文章      查看所有文章
2016-02-02 13:01:28  
架构设计 最新文章
Opengl教程之读取obj并绘制在picturecontro
读《企业应用架构模式》第五章并发
StepbyStepintoSpring(IOC)
设计模式(2)用例图之一
使用实体组件系统(ECS)开发”吃方块”游戏实
编程学习之简单工厂模式与策略模式
Invalidprojectdescription.
基于Redis实现分布式消息队列(2)
《开源框架那点事儿15》:借船下海还是造船
原型模式——浅复制和深复制
360图书馆 软件开发资料 文字转语音 购物精选 软件下载 美食菜谱 新闻资讯 电影视频 小游戏 Chinese Culture 股票 租车
生肖星座 三丰软件 视频 开发 短信 中国文化 网文精选 搜图网 美图 阅读网 多播 租车 短信 看图 日历 万年历 2017年11日历
2017-11-19 16:25:13
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  软件世界网 --