专栏首页Nicky's blog搭建SSH三大框架WEB项目过程(Struts2.3+Hibernate4.3+Spring4.1)

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

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

项目结构如图:

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

dao:DAO数据库操作

po:POJO类,也就是持久化类

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^

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • SpringBoot系列之YAML配置用法学习笔记

    配置文件的作用:修改SpringBoot自动配置的默认值,主要是默认值,因为SpringBoot启动时会自动加载很多默认配置,详细的可以参考我之前博客源码学习系...

    SmileNicky
  • SpringBoot系列之@PropertySource读取yaml文件

    最近在做实验,想通过@PropertySource注解读取配置文件的属性,进行映射,习惯上用properties都是测试没问题的,偶然换成yaml文件,发现都读...

    SmileNicky
  • Oracle to_char(参数,'FM990.00')函数

    SmileNicky
  • [看图说话] 基于Spark UI性能优化与调试——初级篇

    Spark有几种部署的模式,单机版、集群版等等,平时单机版在数据量不大的时候可以跟传统的java程序一样进行断电调试、但是在集群上调试就比较麻烦了...远程断...

    用户1154259
  • 碎片化 | 第四阶段-30-Struts2入门示例流程梳理-视频

    如清晰度低,可转PC网页观看高清版本: http://v.qq.com/x/page/h056559mlsg.html 入门示例 1.hello Stru...

    码神联盟
  • SpringSecurity实现数据库认证

      上篇文章我们介绍了SpringSecurity系统认证的流程,我们发现系统认证其实是通过一个UserDetailService的实现类来实现的,所以我们就可...

    用户4919348
  • 碎片化 | 第四阶段-29-Struts2入门示例1-视频

    如清晰度低,可转PC网页观看高清版本: http://v.qq.com/x/page/u0565acptbm.html 入门示例 1.hello Stru...

    码神联盟
  • Java中的Struts2框架拦截器之实例代码

    本文实例为大家分享了Struts2框架拦截器实例的示例代码,供大家参考,具体内容如下

    砸漏
  • 如何在 Web 关闭页面时发送 Ajax 请求

    有时候我们需要在用户离开页面的时候,做一些上报来记录用户行为。又或者是发送服务器ajax请求,通知服务器用户已经离开,比如直播间内的退房操作。

    grain先森
  • 使用Kubernetes和容器扩展Spinnaker

    Kubernetes和容器完全改变了我们对完成工作所使用的工具的看法。扩展自动化平台需要通过fork开发定制扩展,并决定是否应该贡献上游的日子已经一去不复返了。...

    CNCF

扫码关注云+社区

领取腾讯云代金券