从零开始搭建SSH 框架

从零开始搭建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
从零开始搭建SSH 框架_第1张图片

从零开始搭建SSH 框架_第2张图片

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

从零开始搭建SSH 框架_第3张图片

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

  
  <filter>
    <filter-name>struts2filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilterfilter-class>
  filter>
  <filter-mapping>
    <filter-name>struts2filter-name>
    <url-pattern>/*url-pattern>
  filter-mapping>

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

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>SSH测试欢迎页title>
head>
<body>
    
    <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"%>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>listStudenttitle>
head>
<body>
    <h1>This is listStudent pageh1>
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

 
 
<struts>
    <package name="struts2test"  extends="struts-default"  >
        
        <action name="stu_*" class="com.laolang.student.action.StudentAction" method="{1}">
            <result name="listStu">/jsp/student/lsitStudent.jspresult>
        action>   
    package>
struts>

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

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

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

从零开始搭建SSH 框架_第4张图片

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

从零开始搭建SSH 框架_第5张图片


第二步:加入Spring框架

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


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

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

  
  <listener> 
    <listener-class> org.springframework.web.context.ContextLoaderListener listener-class> 
  listener>
  
  <context-param> 
    <param-name>contextConfigLocationparam-name> 
    <param-value>classpath:applicationContext.xmlparam-value> 
  context-param>

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

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

applicationContext.xml:


<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">
  
  <bean id="stuAction" class="com.laolang.student.action.StudentAction" scope="prototype">bean>
beans>

更改后的 struts.xml:

 
 
<struts>
    <package name="struts2test"  extends="struts-default"  >
        
        <action name="stu_*" class="stuAction" method="{1}">
            <result name="listStu">/jsp/student/lsitStudent.jspresult>
        action>   
    package>
struts>

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


第三步:加入hibernate框架

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

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

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

从零开始搭建SSH 框架_第6张图片

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

从零开始搭建SSH 框架_第7张图片

Spring配置文件:将控制器中声明的这个对象交个Spring来管理


<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">
  
  <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表:

从零开始搭建SSH 框架_第8张图片

实体类和映射文件位置:

从零开始搭建SSH 框架_第9张图片

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实体类映射文件:




<hibernate-mapping>
   
    <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连接池 ————可以不用

 
  <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" /> 
       
      <property name="poolPreparedStatements" value="true" /> 
      <property name="maxPoolPreparedStatementPerConnectionSize" value="20" /> 
       
      <property name="filters" value="stat" /> 
  bean>

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

  
  <bean id="hibernateProperties"  class="org.springframework.beans.factory.config.PropertiesFactoryBean">
      <property name="properties">
         <props>
            
            <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialectprop>
            
            <prop key="hibernate.show_sql">trueprop>
         props>
     property>
  bean>

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

  
  <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    
    <property name="dataSource" ref="dataSource" />
    
    <property name="hibernateProperties">
         <ref bean="hibernateProperties" />
    property>
    
    <property name="mappingDirectoryLocations">   
       <list>   
          <value>classpath:com/laolang/student/entityvalue>
       list>
    property> 
  bean>

8.在Spring配置文件中添加dao的bean节点用于实现持久化操作,并将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节点

  
  <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 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 getListStu() {
        return listStu;
    }
    public void setListStu(List 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 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 listStu(String hql) {
        List 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" %>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>listStudenttitle>
head>
<body>
    <h1>This is listStudent pageh1>
    
    <table border="1">
        <tr>
            <th>序号th>
            <th>学生idth>
            <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>

启动项目,发送请求:

从零开始搭建SSH 框架_第10张图片

跳转到listStudent页,显示数据:

从零开始搭建SSH 框架_第11张图片

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

你可能感兴趣的:(常用框架)