- SSH(Spring+Struts2+Hibernate)
看了一些视频和资料,自己照猫画虎的写了一个很简单的SSH框架,实现的功能是对学生列表的查询,我的目的只是搭建一个框架,所以就只实现了非常简单的查询功能,觉得搭建出来一个框架其实对自己还是有一个比较好一点的理解,文章内源码都有,也可以到我的资源中直接下载资源(可直接运行看效果)。
资源链接为:
ssh对于我个人的理解,struts2属于web层,负责与客户端打交道,将数据展示在视图中;spring属于service层(其实不准确,它应该是将三个层耦合起来,spring自己单独也可以完全实现一个web项目),实现主要的业务逻辑,ioc(控制反转)和aop(切面编程)是它的核心;hibernate就是一个对jdbc的轻量级包装,实现数据的持久化,对数据库中的数据进行操作。
在ecplise上进行的开发,那下面我们就来看看怎么搭建的吧~
——————————————————————————————————————
- 创建一个数据库(用的mysql)
- 创建一个动态web项目(大家应该都会滴)
new->other->输入web找到这个项目,进行创建 - 将所有需要的jar包导入(有点多,虽然很多包没用到,但还是都导入了)
- 创建一个javabean,也就是一个Student的类
package ssh_javaBean;
public class Student {
private int id;
private String name;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
- 创建一个Student.hbm.xml(建立bean与数据库表的映射关系)
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- 建立Student类中的属性和数据库中表的关系映射 -->
<hibernate-mapping package="ssh_javaBean">
<class name="Student" table="studentMessage">
<id name="id" column="id">
<generator class="native">
</generator>
</id>
<property name="name" />
<property name="age" />
</class>
</hibernate-mapping>
- 创建DAO的接口和实现类
接口
package ssh_DAO;
import java.util.List;
import ssh_javaBean.Student;
public interface studentDAO {
public List<Student> list();
public void add(Student s);
}
实现类
package ssh_DAOImp;
import java.util.List;
import org.springframework.orm.hibernate3.HibernateTemplate;
import ssh_DAO.studentDAO;
import ssh_javaBean.Student;
public class studentDAOImp extends HibernateTemplate implements studentDAO {
@Override
public List<Student> list() {//返回所有Student对象
return find("from Student");
}
@Override
public void add(Student s) {//数据持久化,将数据保存到数据库中
save(s);
}
}
- 创建Service的接口和实现类
接口
package ssh_service;
import java.util.List;
import ssh_javaBean.Student;
public interface StudentService {
public List<Student> list();
}
实现类
package ssh_serviceImp;
import java.util.List;
import ssh_DAO.studentDAO;
import ssh_javaBean.Student;
import ssh_service.StudentService;
public class StudentServiceImp implements StudentService{
studentDAO studentDAO;
@Override
public List<Student> list() {
List<Student> students = studentDAO.list();
if(students.isEmpty()) {
for(int i = 0; i < 5; i++) {
Student student = new Student();
student.setName("james" + i);
studentDAO.add(student);
students.add(student);
}
}
return students;
}
public studentDAO getStudentDAO() {
return studentDAO;
}
public void setStudentDAO(studentDAO studentDAO) {
this.studentDAO = studentDAO;
}
}
- 创建一个StudentAction类(获得数据和返回视图)
package ssh_action;
import java.util.List;
import ssh_javaBean.Student;
import ssh_service.StudentService;
public class StudentAction {
StudentService studentService;
List<Student> students;
public String list() {
students = studentService.list();
return "listStudents.jsp";
}
public StudentService getStudentService() {
return studentService;
}
public void setStudentService(StudentService studentService) {
this.studentService = studentService;
}
public List<Student> getStudents() {
return students;
}
public void setStudents(List<Student> students) {
this.students = students;
}
}
- 创建一个struts.xml(名字不要打错了)
将action的生命周期交给spring管理
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.objectFactory" value="spring"/>
<package name="basicstruts" extends="struts-default">
<action name="listStudent" class="StudentActionBean" method="list">
<result name="listStudents.jsp">listStudents.jsp</result>
</action>
</package>
</struts>
- 创建一个application.xml
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:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
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/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<bean name="StudentActionBean" class="ssh_action.StudentAction">
<property name="StudentService" ref="StudentServiceImp">
</property>
</bean>
<bean name="StudentServiceImp" class="ssh_serviceImp.StudentServiceImp">
<property name="studentDAO" ref="studentDAOImp"></property>
</bean>
<bean name="studentDAOImp" class="ssh_DAOImp.studentDAOImp">
<property name="sessionFactory" ref="sf"></property>
</bean>
<bean name="sf"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="ds"></property>
<property name="mappingResources">
<list>
<value>ssh_javaBean/Student.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<value>
hibernate.dialect=org.hibernate.dialect.MySQLDialect
hibernate.show_sql=true
hbm2ddl.auto=update
</value>
</property>
</bean>
<bean name="ds"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/student?characterEncoding=UTF-8" />
<property name="username" value="root" />
<property name="password" value="" />
</bean>
</beans>
- 配置web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app>
<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>
<dispatcher>FORWARD</dispatcher>
<dispatcher>REQUEST</dispatcher>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
</web-app>
- 创建listStudents.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isELIgnored="false"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<h1>学生信息</h1>
<table>
<tr>
<td>id</td>
<td>name</td>
<td>age</td>
</tr>
<s:iterator value="students" var="s">
<tr>
<td>${s.id}</td>
<td>${s.name}</td>
<td>${s.age }</td>
</tr>
</s:iterator>
</table>
- 创建开始文件start.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isELIgnored="false"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<s:form action="listStudent">
<s:submit value="查询学生列表" />
</s:form>
- 启动文件为start.jsp,效果如下:
点检按钮
说一下大致的流程
1. 访问start.jsp
2. 点击查询信息按钮
3. web.xml中的过滤器会将请求交由struts进行处理
4. struts根据listStudents创建对应的StudentActionBean,此时StudentActionBean不再由Struts自己创建,而是由Spring创建
5. spring根据applicationContext.xml创建StudentActionBean对应的对象StudentAction
6. Spring 创建StudentAction的时候 注入Service
7. 创建Service的时候注入DAO
8. Struts 调用StudentAction的list方法
9. 在list方法中调用注入好的dao,访问数据库,查询结果
10. 跳转到listStudents.jsp显示数据
jar包的话官网都有直接可以下载的,也可以直接下载我的资源哦,ssh学着就当玩玩了,以后的开发不知道还用不用的到,有时间把SpringMVC和SpingBoot去学了,闲着也是闲着,溜了~~~