从零开始搭建SSH 框架

来源:互联网 发布:哨子办公软件 编辑:程序博客网 时间:2024/06/08 03:37

从零开始搭建SSH 框架

仅作为个人学习整理使用,欢迎指导,不喜勿喷!!!:

目录

  • 从零开始搭建SSH 框架
      • 目录
      • 工具
      • 所需jar包
      • 第一步搭建struts2框架
      • 第二步加入Spring框架
      • 第三步加入hibernate框架
      • 至此我们整个SSH框架就已将搭建完成了下面我们可以调用dao实现持久化操作并将结果返回给页面了我们简单的写一个查询进行测试

工具 :

eclipse MySQL jdk1.8  tomcat7  druid连接池

所需jar包 :

Struts2的jar包  Spring的jar包Hibernate的jar包Struts-Spring的连接jar包还有连库jar包及连接池jar包。

********本例中用的是mysql数据库和druid连接池********

第一步:搭建struts2框架

需要达成目标:可以发出请求并进行页面跳转)


1.首先创建一个web项目,过程中注意选择创建web.xml文件,不要直接点finish
这里写图片描述

这里写图片描述

2.将struts2的jar包,复制粘贴到项目的lib文件夹下

这里写图片描述

3.在web.xml文件下,添加Struts2的核心过滤器

  <!--     作者: 郎国峰    时间: 2017年11月9日13:05:51    描述: 添加Struts2核心过滤器   -->  <filter>    <filter-name>struts2</filter-name>    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>  </filter>  <filter-mapping>    <filter-name>struts2</filter-name>    <url-pattern>/*</url-pattern>  </filter-mapping>

4.在WebContent文件夹下创建index.jsp欢迎页,并可以发送一个Struts2的请求

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>SSH测试欢迎页</title></head><body>    <!--         作者: 郎国峰        时间: 2017年11月9日13:12:48        描述: Struts2的测试请求     -->    <a href="<%=request.getContextPath()%>/stu_listStu.action">Struts2测试请求</a></body></html>

5.在webContent下创建jsp/student文件,并在文件夹内创建listStudent.jsp页面,用户转向的列表页.

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>listStudent</title></head><body>    <h1>This is listStudent page</h1></body></html>

6.在src下创建一个包com.laolang.student.action,并在这个包下创建Struts2的控制器StudentAction

package com.laolang.student.action;/** * 标题: StudentAction.java * 路径: com.laolang.student.action * 描述: Student的控制器 * 作者: 郎国峰 * 时间: 2017年11月9日 下午1:31:04 * 版本: @version V1.0 */public class StudentAction {    /**     * @方法名: listStu        * @描述: 查询学生信息,并跳转到学生列表页     * @作者: 郎国峰     * @时间: 2017年11月9日 下午1:32:14     * @return     */    public String listStu(){        System.out.println("===method:listStu()===");        return "listStu";    }}

7.在项目中创建一个源文件夹config用来存放配置文件,并在config下创建struts2的配置文件struts.xml

<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> <struts>    <package name="struts2test"  extends="struts-default"  >        <!--             作者: 郎国峰            时间: 2017年11月9日13:37:31            描述: 请求Student的控制器         -->        <action name="stu_*" class="com.laolang.student.action.StudentAction" method="{1}">            <result name="listStu">/jsp/student/lsitStudent.jsp</result>        </action>       </package></struts>

其中action节点中的class为请求控制器的类路径,name为请求名称,本例中用的是action节点的method属性来请求具体方法 , *号为通配符 , 请求过来是什么就走什么方法!具体可以参照Struts2的具体用法,后边我会接着写!

8.到目前为止,我们就已经搭建好Struts2框架了,可以启动项目发送请求测试一下

项目启动成功,进入欢迎页面,然后点击请求

这里写图片描述

点击后跳转到学生列表页,控制台打印控制器方法,测试成功!

这里写图片描述


第二步:加入Spring框架

( 需要达成目标:改造后将控制器对象交给Spring管理仍可以实现发请求转页 )


1.将Spring的jar包和Struts-Spring的联合包,导入到项目的lib文件夹中

2.在web.xml文件中启动Spring监听器,并指定Spring的配置文件名称和位置

  <!--     作者: 郎国峰    时间: 2017年11月9日14:44:48    描述: 启动Spring监听   -->  <listener>     <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class>   </listener>  <!--     作者: 郎国峰    时间: 2017年11月9日14:45:23    描述: 设定Spring配置文件的名称及位置   -->  <context-param>     <param-name>contextConfigLocation</param-name>     <param-value>classpath:applicationContext.xml</param-value>   </context-param>

3.在config源文件夹下创建spring的配置文件:applicationContext.xml,并将Struts与Spring进行整合,将控制器交个Spring来管理

Spring与struts2的整合: 在spring配置文件中加入控制器的bean节点,并将struts2配置文件中对应action节点的class属性改成此bean节点的id或name属性

applicationContext.xml:

<?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:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context  http://www.springframework.org/schema/context/spring-context-2.5.xsd">  <!--     作者: 郎国峰    时间: 2017年11月9日14:57:34    描述: 将控制器交给Spring来管理  -->  <bean id="stuAction" class="com.laolang.student.action.StudentAction" scope="prototype"></bean></beans>

更改后的 struts.xml:

<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> <struts>    <package name="struts2test"  extends="struts-default"  >        <!--             作者: 郎国峰            时间: 2017年11月9日13:37:31            描述: 请求Student的控制器         -->        <action name="stu_*" class="stuAction" method="{1}">            <result name="listStu">/jsp/student/lsitStudent.jsp</result>        </action>       </package></struts>

4.到目前为止,Struts2与Spring就整合完了,从新启动项目,和第一次测试一样,能够发送请求跳页,控制台打印,那么就算成功了


第三步:加入hibernate框架

需要达成目标: 可实现对数据库数据的CRUD)
1.导入hibernate的jar包,druid连接池jar包,MySQL连库jar包

2.在src下创建模型层接口和实现类,控制器中声明模型层接口的属性,并通过spring将模型层注入到控制器中

模型层接口和实现类位置 :

这里写图片描述

控制器里声明学生模型层对象 :

这里写图片描述

Spring配置文件:将控制器中声明的这个对象交个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:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context  http://www.springframework.org/schema/context/spring-context-2.5.xsd">  <!--     作者: 郎国峰    时间: 2017年11月9日14:57:34    描述: 将控制器交给Spring来管理  -->  <bean id="stuAction" class="com.laolang.student.action.StudentAction" scope="prototype">    <!-- 将学生模型层对象注入到控制器中  -->    <property name="studentService">        <bean class="com.laolang.student.service.impl.StudentServiceImpl"></bean>    </property>  </bean></beans>

3.创建Dao接口及其实现类DaoImpl
Dao接口和实现类的位置:

Dao接口:

package com.laolang.student.dao;import java.util.List;/** * 标题: IDao.java * 路径: com.laolang.student.dao * 描述: Dao接口 * 作者: 郎国峰 * 时间: 2017年11月9日 下午3:56:10 * 版本: @version V1.0 */public interface IDao {    /**     * @方法名: listEntity        * @描述: 查询所有的数据     * @作者: 郎国峰     * @时间: 2017年11月9日 下午3:59:25     * @return     */    public List listEntity(String hql);}

Dao实现类:

package com.laolang.student.dao;import java.util.List;import org.springframework.orm.hibernate3.support.HibernateDaoSupport;/** * 标题: DaoImpl.java * 路径: com.laolang.student.dao * 描述: Dao实现类  * 作者: 郎国峰 * 时间: 2017年11月9日 下午3:56:53 * 版本: @version V1.0 */public class DaoImpl extends HibernateDaoSupport implements IDao{    @Override    public List listEntity(String hql) {        // TODO Auto-generated method stub        return super.getHibernateTemplate().find(hql);    }}

4.创建实体类和映射文件

MySQL数据库Student表:

这里写图片描述

实体类和映射文件位置:

这里写图片描述

Student实体类:

package com.laolang.student.entity;/** * 标题: Student.java * 路径: com.laolang.student.entity * 描述: Student实体类 * 作者: 郎国峰 * 时间: 2017年11月9日 下午4:09:39 * 版本: @version V1.0 */public class Student {    private String stuId;    private String stuName;    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;    }}

Studernt实体类映射文件:

<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping>   <!--         作者: 郎国峰        时间: 2017年11月9日16:13:07        描述: Student对象关系映射    -->    <class name="com.laolang.student.entity.Student" table="student">        <id name="stuId" column="stu_id">            <!-- 自己管理主键 -->            <generator class="assigned"></generator>        </id>        <property name="stuName" column="stu_name"></property>    </class></hibernate-mapping>

5.在Spring配置文件中添加数据源
本例中用的是mysql数据库和druid连接池 ————可以不用

 <!--     作者: 郎国峰    时间: 2017年11月9日16:31:32    描述: 注入数据源------druid连接池------根据项目需求自行配置   -->  <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">       <property name="driverClassName" value="com.mysql.jdbc.Driver" />       <property name="url" value="jdbc:mysql://127.0.0.1:3306/ssh" />       <property name="username" value="root" />       <property name="password" value="root" />       <!-- 配置初始化大小、最小、最大 -->       <property name="initialSize" value="3" />       <property name="minIdle" value="1" />       <property name="maxActive" value="10" />       <!-- 配置获取连接等待超时的时间 -->       <property name="maxWait" value="60000" />       <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->       <property name="timeBetweenEvictionRunsMillis" value="60000" />       <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->       <property name="minEvictableIdleTimeMillis" value="300000" />       <property name="validationQuery" value="SELECT 'x' FROM DUAL" />       <property name="testWhileIdle" value="true" />       <property name="testOnBorrow" value="false" />       <property name="testOnReturn" value="false" />       <!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->       <property name="poolPreparedStatements" value="true" />       <property name="maxPoolPreparedStatementPerConnectionSize" value="20" />       <!-- 配置监控统计拦截的filters -->       <property name="filters" value="stat" />   </bean>

6.在spring配置文件中设置Hibernate的基本属性

  <!--      作者: 郎国峰    时间: 2017年11月9日16:36:37    描述: 配置Hibernate属性  -->  <bean id="hibernateProperties"  class="org.springframework.beans.factory.config.PropertiesFactoryBean">      <property name="properties">         <props>            <!-- 设置Hibernate方言为MySQL -->            <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>            <!-- 显示sql -->            <prop key="hibernate.show_sql">true</prop>         </props>     </property>  </bean>

7.在Spring配置文件中配置SessionFactory

  <!--     作者: 郎国峰    时间: 2017年11月9日16:43:46    描述: 设置SessionFactory   -->  <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">    <!-- 注入数据源 -->    <property name="dataSource" ref="dataSource" />    <!-- hibernate属性设置 -->    <property name="hibernateProperties">         <ref bean="hibernateProperties" />    </property>    <!-- 映射文件声明 -->    <property name="mappingDirectoryLocations">          <list>             <value>classpath:com/laolang/student/entity</value>       </list>    </property>   </bean>

8.在Spring配置文件中添加dao的bean节点用于实现持久化操作,并将session工厂注入到dao中
(其父类需要sessionFactory)

  <!--     作者: 郎国峰    时间: 2017年11月9日16:50:54    描述: 将Dao交给Spring来管理,并将session工厂注入到dao中,其父类需要sessionFactory   -->   <bean id="dao" class="com.laolang.student.dao.DaoImpl">        <property name="sessionFactory" ref="sessionFactory"></property>   </bean>

9.在模型层的实现类声明dao属性,并通过spring注入dao
声明dao:

package com.laolang.student.service.impl;import com.laolang.student.dao.IDao;import com.laolang.student.service.IStudentService;/** * 标题: StudentServiceImpl.java * 路径: com.laolang.student.service.impl * 描述: Student模型层实现类 * 作者: 郎国峰 * 时间: 2017年11月9日 下午3:29:24 * 版本: @version V1.0 */public class StudentServiceImpl implements IStudentService {    /**     * 模型层里的Dao对象     */    private IDao dao;    public IDao getDao() {        return dao;    }    public void setDao(IDao dao) {        this.dao = dao;    }}

10.将Dao注入到模型层中,更改Spring配置文件中的stuAction这个bean节点

  <!--     作者: 郎国峰    时间: 2017年11月9日14:57:34    描述: 将控制器交给Spring来管理  -->  <bean id="stuAction" class="com.laolang.student.action.StudentAction" scope="prototype">    <!-- 将学生模型层对象注入到控制器中  -->    <property name="studentService">        <bean class="com.laolang.student.service.impl.StudentServiceImpl" autowire="byType"></bean>    </property>  </bean>

至此,我们整个SSH框架就已将搭建完成了,下面我们可以调用dao实现持久化操作,并将结果返回给页面了.我们简单的写一个查询进行测试

StudentAction控制器:

package com.laolang.student.action;import java.util.List;import com.laolang.student.entity.Student;import com.laolang.student.service.IStudentService;/** * 标题: StudentAction.java * 路径: com.laolang.student.action * 描述: Student的控制器 * 作者: 郎国峰 * 时间: 2017年11月9日 下午1:31:04 * 版本: @version V1.0 */public class StudentAction {    /**     * 声明学生模型层对象     */    private IStudentService studentService;    /**     * 声明一个Student的list集合     */    private List<Student> listStu;    /**     * @方法名: listStu        * @描述: 查询学生信息,并跳转到学生列表页     * @作者: 郎国峰     * @时间: 2017年11月9日 下午1:32:14     * @return     */    public String listStu(){        System.out.println("===method:listStu()===");        //调用模型层查询所有学生的信息        listStu = studentService.listStu("from Student");        return "listStu";    }    public IStudentService getStudentService() {        return studentService;    }    public void setStudentService(IStudentService studentService) {        this.studentService = studentService;    }    public List<Student> getListStu() {        return listStu;    }    public void setListStu(List<Student> listStu) {        this.listStu = listStu;    }}

IStudentService模型层接口:

package com.laolang.student.service;import java.util.List;import com.laolang.student.entity.Student;/*** 标题: IStudentService.java* 路径: com.laolang.student.service* 描述: Student模型层接口* 作者: 郎国峰* 时间: 2017年11月9日 下午3:25:08* 版本: @version V1.0 */public interface IStudentService {    /**     * @方法名: listStu        * @描述: 查询所有学生的信息     * @作者: 郎国峰     * @时间: 2017年11月9日 下午6:57:45     * @param string 传入hql语句     * @return     */    List<Student> listStu(String hql);}

StudentServiceImpl模型层实现类:

package com.laolang.student.service.impl;import java.util.List;import com.laolang.student.dao.IDao;import com.laolang.student.entity.Student;import com.laolang.student.service.IStudentService;/** * 标题: StudentServiceImpl.java * 路径: com.laolang.student.service.impl * 描述: Student模型层实现类 * 作者: 郎国峰 * 时间: 2017年11月9日 下午3:29:24 * 版本: @version V1.0 */public class StudentServiceImpl implements IStudentService {    /**     * 模型层里的Dao对象     */    private IDao dao;    @Override    public List<Student> listStu(String hql) {        List<Student> listStu = dao.listEntity(hql);        return listStu;    }    public IDao getDao() {        return dao;    }    public void setDao(IDao dao) {        this.dao = dao;    }}

listStudent.jsp页面:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ taglib uri="/struts-tags" prefix="s" %><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>listStudent</title></head><body>    <h1>This is listStudent page</h1>    <!-- 测试取值 -->    <table border="1">        <tr>            <th>序号</th>            <th>学生id</th>            <th>学生姓名</th>        </tr>        <s:iterator value="listStu" var="t" status="i">            <tr>                <td><s:property value="#i.count"/></td>                <td><s:property value="#t.stuId"/></td>                <td><s:property value="#t.stuName"/></td>            </tr>        </s:iterator>    </table></body></html>

启动项目,发送请求:

这里写图片描述

跳转到listStudent页,显示数据:

这里写图片描述

###源码下载 :
链接:http://pan.baidu.com/s/1dFfaJeT 密码:5rj9

原创粉丝点击