SSH三大框架整合

article/2025/9/14 5:46:45

文章目录

  • 一. SSH 简单的回顾
    • 1. Hibernate框架
    • 2. Struts2框架
    • 3. Spring框架
  • 二. ssh整合思想
  • 三. 整合struts2和spring框架(把struts2的action交给spring管理)
    • 1. 导入相关jar包
    • 2. 创建action
    • 3. 创建struts2核心配置文件,配置action
      • (1). 位置在src下面,名称是struts.xml
    • 4. 配置struts2过滤器
    • 5. 创建spring配置文件
    • 6. 把action交给spring进行配置
  • 四. Spring框架整合hibernate框架
    • 1. 导入hibernate的jar包
    • 2. 搭建hibernate环境搭建
      • (1). 创建实体类
      • (2). 配置实体类映射关系
      • (3). 创建核心配置文件
    • 3. 把hibernate核心配置文件中数据库配置,在spring进行配置
    • 4. 把hibernate的sessionFactory交给spring配置
    • 5. 在dao里面使用hibernateTemplate
    • 6. 创建service
    • 7. 配置事务
    • 8. 相关代码
  • 五. Eclipse中SSH框架整合过程
    • 1. 第一步 导入jar包
    • 2. 第二步 搭建struts2环境
    • 3. 第三步 搭建hibernate环境
        • (1). 创建实体类
        • (2). 配置实体类和数据库表映射关系
        • (3). 创建hibernate核心配置文件
    • 4. 第四步 搭建spring环境
        • (1). 创建spring核心配置文件
        • (2). 让spring配置文件在服务器启动时候加载
    • 5. 第五步 struts2和spring整合
        • (1). 把action在spring配置(action多实例的)
        • (2). 在struts.xml中action标签class属性里面写 bean的id值
    • 6. 第六步 spring和hibernate整合
        • (1). 把hibernate核心配置文件中数据库配置,在spring里面配置
        • (2). 把hibernate的sessionFactory在spring配置
    • 7. 第七步 在dao里面使用hibernateTemplate
        • (1). 在dao注入hibernateTemplate对象
        • (2). 在hibernateTemplate对象中注入sessionFactory
    • 8. 第八步 配置事务
  • 六. Eclipse中SSH其他的整合方式
    • 1. spring整合hibernate时候,可以不写hibernate核心配置文件
  • 七. Spring分模块开发

一. SSH 简单的回顾

  • struts2
  • hibernate5.x
  • spring4.x
    在这里插入图片描述

1. Hibernate框架

2. Struts2框架

3. Spring框架

二. ssh整合思想

在这里插入图片描述

三. 整合struts2和spring框架(把struts2的action交给spring管理)

1. 导入相关jar包

新建项目,并导入相关jar包
在这里插入图片描述

  • 包括spring的基本jar包
  • 整合struts框架的jar包
  • 整合web项目的jar包
    在这里插入图片描述
  • 还有struts2所有的jar包
    在这里插入图片描述

2. 创建action

在这里插入图片描述

3. 创建struts2核心配置文件,配置action

(1). 位置在src下面,名称是struts.xml

在spring配置action对象,在struts.xml中也配置action对象的问题

解决:只需要在spring里面配置action对象,不要在struts.xml中配置

在这里插入图片描述

4. 配置struts2过滤器

在这里插入图片描述

5. 创建spring配置文件

  • 引入约束

在这里插入图片描述

  • 配置spring监听器
    在这里插入图片描述

  • 指定spring配置文件位置
    在这里插入图片描述

6. 把action交给spring进行配置

在这里插入图片描述

在这里插入图片描述

运行过程理解:

  • 启动服务器,系统加载bean1.xml文件,并创建里面的action对象
  • 一旦我们访问action的时候,拦截器首先先进行拦截,然后看我们选择的action根据我们访问的路径名字,从struts2.xml文件里面找对应的名字name值,之前是根据class里面的反射创建对象来进行访问,但是现在class里面有个spring传来的对象(这个class会到spring的配置文件bean1.xml里面找对应的id值,进而得到相应的对象),所以也可以直接访问对应的UserAction.java。

四. Spring框架整合hibernate框架

  • 1 把hibernate核心配置文件中配置数据库信息,把数据库信息在spring进行配置
  • 2 把hibernate里面的sessionFactory创建交给spring管理

1. 导入hibernate的jar包

在这里插入图片描述
在这里插入图片描述

2. 搭建hibernate环境搭建

(1). 创建实体类

在这里插入图片描述

(2). 配置实体类映射关系

在这里插入图片描述

(3). 创建核心配置文件

在这里插入图片描述

3. 把hibernate核心配置文件中数据库配置,在spring进行配置

把hibernate核心文件中数据库配置去掉了,在spring配置

在这里插入图片描述

4. 把hibernate的sessionFactory交给spring配置

  • 服务器启动时候,加载spring配置文件,把配置文件中对象创建

  • 把sessionFactory对象创建在spring配置

  • 因为创建sessionFactory代码不是new出来的,而是多行代码实现的
    在这里插入图片描述
    上图是之前进行测试代码,来创建sessionFactory,如果使用spring的话,上面的com.pudding.utils包可以不要,直接通过spring来创建sessionFactory

  • spring里面针对上面情况,封装类(LocalSessionFactoryBean),配置类对象可以创建sessionFactory
    在这里插入图片描述
    在这里插入图片描述

<?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" xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsd"><!-- 配置c3p0连接池 --><bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"><!-- 注入里面的属性值 --><property name="driverClass" value="com.mysql.cj.jdbc.Driver"></property><property name="jdbcUrl" value="jdbc:mysql://localhost:3306/spring_day04?useSSL=false&amp;serverTimezone=UTC&amp;allowPublicKeyRetrieval=true"></property><property name="user" value="root"></property>		<property name="password" value="root"></property>		</bean><!-- sessionFactory创建交个spring管理 --><bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"><!-- 因为在hibernate核心配置文件中,没有数据库配置,数据库配置在spring里面配置,注入dataSource --><property name="dataSource" ref="dataSource"></property><!-- 指定hibernate核心配置文件 --><property name="configLocations" value="classpath:hibernate.cfg.xml"></property></bean><!-- 配置action的创建 --><bean id="userAction" class="com.pudding.action.UserAction" scope="prototype"></bean></beans>

执行过程:在服务器启动的时候bean1.xml配置文件会被加载,它一加载,里面的对象都会被创建(userAction被创建、sessionFactory对象也会被创建,也就是会连接数据库,并立即生成数据库的表)

5. 在dao里面使用hibernateTemplate

  • 在dao得到hibernateTemplate的对象,也就是把hibernateTemplate对象在spring中注入给userDaoImpl,而在userDaoImpl.java类中可以通过set方法获得相应的hibernateTemplate对象,并进行直接调用对象的方法进行使用。
    在这里插入图片描述
    在这里插入图片描述
  • 调用hibernate模板里面save方法添加对象到数据库的操作
    在这里插入图片描述

没有配置事务,做操作时候,出现异常
在这里插入图片描述

6. 创建service

在service中可以直接获得usedao对象,也是通过spring的注入,通过set方法获得对象。然后也可以直接通过对象.方法名进行方法的调用。
在这里插入图片描述
在这里插入图片描述
同理:UserAction也可以直接通过spring的注入,set方法获得userService对象,进而通过对象.方法名,直接使用UserService里面的方法。
在这里插入图片描述

7. 配置事务

没有配置事务,做操作时候,出现异常
在这里插入图片描述
一般建议在service上面使用注解
在这里插入图片描述

8. 相关代码

spring的bean1.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:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsd"><!-- 配置c3p0连接池 --><bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"><!-- 注入里面的属性值 --><property name="driverClass" value="com.mysql.jdbc.Driver"></property><property name="jdbcUrl" value="jdbc:mysql:///spring_day04"></property><property name="user" value="root"></property>		<property name="password" value="root"></property>		</bean><!-- sessionFactory创建交个spring管理 --><bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"><!-- 因为在hibernate核心配置文件中,没有数据库配置,数据库配置在spring里面配置,注入dataSource --><property name="dataSource" ref="dataSource"></property><!-- 指定hibernate核心配置文件 --><property name="configLocations" value="classpath:hibernate.cfg.xml"></property></bean><!-- 第一步配置事务管理器 --><bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager"><!-- 注入sessionFactory --><property name="sessionFactory" ref="sessionFactory"></property></bean><!-- 第二步开启事务注解 --><tx:annotation-driven transaction-manager="transactionManager"/><!-- 配置action的对象 --><bean id="userAction" class="com.pudding.action.UserAction" scope="prototype"><!-- 注入service --><property name="userService" ref="userService"></property></bean><!-- 创建service对象 --><bean id="userService" class="com.pudding.service.UserService"><!-- 注入dao接口 = 实现类的对象--><property name="userDao" ref="userDaoImpl"></property></bean><!-- 创建实现类的对象 --><bean id="userDaoImpl" class="com.pudding.dao.UserDaoImpl"><property name="hibernateTemplate" ref="hibernateTemplate"></property></bean><!-- 创建hibernateTemplate对象 --><bean id="hibernateTemplate" class="org.springframework.orm.hibernate5.HibernateTemplate"><!-- 注入sessionFactory --><property name="sessionFactory" ref="sessionFactory"></property></bean></beans>

hibernate.cfg.xml文件代码

<?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">
<hibernate-configuration><session-factory><!-- 2. 配置hibernate信息  可选的--><!-- 输出底层sql语句 --><property name="hibernate.show_sql">true</property><!-- 对底层SQL语句进行格式化输出 --><property name="hibernate.format_sql">true</property><!-- hibernate帮创建表,需要配置之后 update:如果已经有了表就帮我们更新,如果没有就创建--><property name="hibernate.hbm2ddl.auto">update</property><!-- 配置数据库方言 在mysql里面实现分页,关键字limit,只能使用mysql里面在Oracle数据库,实现分页rownum让hibernate框架识别不同数据库的特有的语句--><property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property><!-- 3.把映射文件放到核心配置文件中  必须的--><mapping resource="com/pudding/entity/User.hbm.xml"/></session-factory>
</hibernate-configuration>

struts.xml相关代码

<?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"><struts><!-- 配置action的方法访问 --><package name="demo1" extends="struts-default" namespace="/"><!-- class属性里面不写action全路径了(com.pudding.action.UserAction),写了之后action对象创建了两次写spring配置的action的bean的id值--><action name="userAction" class="userAction"></action></package></struts>  

五. Eclipse中SSH框架整合过程

1. 第一步 导入jar包

ssh整合jar包

2. 第二步 搭建struts2环境

(1)创建action,创建struts.xml配置文件,配置action

(2)配置struts2的过滤器

3. 第三步 搭建hibernate环境

(1). 创建实体类

(2). 配置实体类和数据库表映射关系

(3). 创建hibernate核心配置文件

  • 引入映射配置文件

4. 第四步 搭建spring环境

(1). 创建spring核心配置文件

(2). 让spring配置文件在服务器启动时候加载

  • 配置监听器
    在这里插入图片描述
  • 指定spring配置文件位置
    在这里插入图片描述

5. 第五步 struts2和spring整合

(1). 把action在spring配置(action多实例的)

在这里插入图片描述

(2). 在struts.xml中action标签class属性里面写 bean的id值

在这里插入图片描述

6. 第六步 spring和hibernate整合

(1). 把hibernate核心配置文件中数据库配置,在spring里面配置

在这里插入图片描述

(2). 把hibernate的sessionFactory在spring配置

在这里插入图片描述

7. 第七步 在dao里面使用hibernateTemplate

(1). 在dao注入hibernateTemplate对象

(2). 在hibernateTemplate对象中注入sessionFactory

在这里插入图片描述

8. 第八步 配置事务

在这里插入图片描述
在这里插入图片描述

六. Eclipse中SSH其他的整合方式

1. spring整合hibernate时候,可以不写hibernate核心配置文件

  • 把hibernate核心配置文件中,基本信息配置和映射引入都放到spring配置

在这里插入图片描述
在这里插入图片描述

七. Spring分模块开发

  • 1 在spring里面配置多个内容,造成配置混乱,不利用维护

  • 2 把spring核心配置文件中,一部分配置放到单独的配置文件中,在spring核心配置文件中引入单独配置文件(约束内容必须要有)

在这里插入图片描述


http://chatgpt.dhexx.cn/article/Id5KI3kx.shtml

相关文章

三大框架的基础知识

三大框架的基础知识 1&#xff0c;hibernate的工作原理及为什么要用&#xff1f; &#xff08;1&#xff09;通过Configuration().configure();读取并解析hibernate.cfg.xml配置文件&#xff1b; &#xff08;2&#xff09;由 hibernate.cfg.xml读取并解析映射信息&#xff1b…

三大前端框架

互联网发展速度是非常快的&#xff0c;程序员用的前端框架也在不断的迭代和变化&#xff0c;以前大家常用的是JQuery、Bootstrap框架&#xff0c; 现在形成React、Vue、Angular三大主流框架&#xff0c;这三个框架各有各的优势&#xff0c;而且较为成熟 01、React React框架是起…

前端三大主流框架的区别(三)

前面两篇已经做了细致的分析&#xff0c;这一篇就总结总结三大主流框架吧 1.angular 1.1. 简介: angular是最早出现的框架&#xff0c; angularjs是通过directive&#xff08;指令&#xff09;去封装组件&#xff0c;react和vue是通过component。 1.2. 优点&#xff1a; 1、…

三大框架-Spring

一 .概述 spring框架是以一个分层架构,有七个定义良好的模块组成,Spring模块构建在核心容器之上,核心容器定义了创建,配置和管理bean方式: 1.Spring Core:核心容器 ,提供Spring的基本功能. 2.SPring Contest:Spring上下文,是一个配置文件 3.Spring AOP : Spring 中面向切面…

JAVA的三大框架是什么?

Java自1995年发布以来&#xff0c;凭借着其跨平台、面向对象、泛型编程的特性发展至今可以说无Java不大厂。目前国内所有的大厂或多或少都在使用Java进行后端服务开发。 一、Java开发的三大框架 在14年以前&#xff0c;行业内用得最多的Java三大框架是Struts、Spring和Hiberna…

SSM三大框架Spring

一、三大框架基本结构 1.为什么需要框架 说明: 如果生产环境下的项目,都是从头(从底层写起)开发,难度太大了,并且开发的效率极其低下. 所以为了让项目快速的上线部署. 将某些特定的功能.进行了高级的封装. 那么我们如果需要使用封装后的API.,则必须按照人家的要求编码 2.框架…

外键的设置

关键词&#xff1a;外键 | 索引 | InNoDB和MyISAM | 引用 | Mysql 设置外键的目的&#xff1a;保证数据的一致性&#xff01; 一、外键的使用条件&#xff1a; ① 两个表必须是InnoDB表&#xff0c;MyISAM表暂时不支持外键 #查看表类型SHOW TABLE STATUS#查询结果的Engine字…

外键(FOREIGN KEY)

引子&#xff1a;把所有数据都存放于一张表的弊端 1、表的组织结构复杂不清晰 2、浪费空间 3、扩展性极差 为了解决上述的问题&#xff0c;就需要用多张表来存放数据。 表与表的记录之间存在着三种关系&#xff1a;一对多、多对多、一对一的关系。 处理表之间关系问题就会…

什么是外键? 为什么需要外键?怎么使用外键?

首先我们先思考一个问题&#xff1a; 如何将京东"fuliuqingfeng"的用户信息及其多个邮寄商品地址保存到数据库中? 我们第一步会这样操作实现&#xff1a; create table user_info(id char(36) primary key,user_name varchar(30) not null,password varchar(30) …

MySQL外键(详解)

MySQL外键&#xff08;详解&#xff09; 什么是外键&#xff1a;    外键是指引用另外一个表中的一列或多列数据&#xff0c;被引用的列应该具有主键约束或者唯一性约束&#xff08;简单来说外键是另一个表的主键或者唯一约束&#xff09;。外键可以有重复的, 可以是空值&…

C/C++unlink函数的使用

一、头文件 #include<unistd.h> 二、函数原型 int unlink(const char *pathname); 三、函数介绍 unlink()函数功能即为删除文件。执行unlink()函数会删除所给参数指定的文件。 注意&#xff1a; 执行unlink()函数并不一定会真正的删除文件&#xff0c;它先会检查文件…

Linux下unlink函数的使用

一、头文件 #include<unistd.h> 二、函数原型 int unlink(const char *pathname); 三、函数介绍 unlink()函数功能即为删除文件。执行unlink()函数会删除所给参数指定的文件。 注意&#xff1a; 执行unlink()函数并不一定会真正的删除文件&#xff0c;它先会检查文件系…

Universal link的坑

当你觉得Universal link所有配置都没问题&#xff0c;但是通过浏览器打开Universal Link没有命中的时候看下这里 看了很多篇文章对比了Universal Link配置和流程之后没问题&#xff0c;浏览器打开还是不生效&#xff0c;最终在最关键的配置apple-app-site-association文件破案了…

unlink 和 remove 的区别

Linux下开发的时候,会经常使用unlink来删除文件的,而用C的时候,经常用remove删除文件. 这两者的去区别通过man手册发现&#xff1a;  当remove() 中的pahtname指定为目录时,相当于调用rmdir 删除目录,当remove() 中的pathname指定问文件时,相当于调用unlink 删除文件链接 所以…

004link()unlink()_LINUX

Linux的学习笔记 link、unlink1. 共享盘块2. link() 为已经存在的文件创建目录项&#xff08;硬链接&#xff09;头文件包含和函数声明 3. unlink() 删除一个文件的目录项头文件包含和函数声明Linux下删除文件的机制&#xff1a;demo 4. unlink 使用注意及隐性回收demo4.1 编译…

CTF PWN之heap入门 unlink

环境 ubuntu20 pwndbg patchelf glibc-all-in-one 为什么要用ubuntu不用kali&#xff0c;这里不做解释&#xff0c;总之就是自己在搭环境时出现了各种问题&#xff0c;但用ubuntu20不会出现&#xff0c; pwndbg&#xff0c;打pwn题必备&#xff0c;具体安装过程见gdb与ped…

NPM报错 Error: EPERM: operation not permitted, unlink......解决办法和清除缓存。

由于国内外环境因素&#xff0c;npm install安装依赖的时候经常会出现各种问题&#xff0c;特别是“Error: EPERM: operation not permitted, unlink…”这个错误。 在这里插入图片描述 这个错误因为报错信息的误导性&#xff0c;导致很多网上提出的解决办法都是什么设置权限…

vue 启项目报错Error: EPERM: operation not permitted, unlink

使用npm install安装依赖之后&#xff0c;有时候存在网络或其他问题安装不上个别依赖&#xff0c;其项目失败&#xff0c;报错 当启项目时报错&#xff1a;Error: EPERM: operation not permitted, unlink 此问题困扰好久&#xff0c;刚开始以为和其他人遇到的问题相似是因为管…

好好说话之unlink

堆溢出的第三部分unlink&#xff0c;这可能是有史以来我做的讲解图最多的一篇文章了累死 。可能做pwn的人都应该听过unlink&#xff0c;见面都要说声久仰久仰。学unlink的时候走了一些弯路&#xff0c;也是遇到了很多困扰的问题&#xff0c;会在后面的内容中做出标注。由于写的…

Unlink

Author&#xff1a;ZERO-A-ONEDate&#xff1a;2021-07-03 一、unlink的原理 简介&#xff1a;俗称脱链&#xff0c;就是将链表头处的free堆块unsorted bin中脱离出来然后和物理地址相邻的新free的堆块合并成大堆块&#xff08;向前合并或者向后合并&#xff09;&#xff0c;再…