SSH框架简介篇

文章目录

  • 概述
    • 目录结构
  • struts
  • Spring
  • Hibernate
  • 总结

概述

SSH框架(Struts + Spring + Hibernate)是一种广泛应用的Java企业级开发框架组合,它将Struts、Spring和Hibernate三个优秀的框架有机地结合在一起,提供了一套完整的解决方案,可以帮助开发人员快速构建可扩展、可维护的Java应用程序。
SSH框架是由Struts、Spring和Hibernate三个独立的开源框架组合而成。每个框架都有自己的特点和优势,通过结合使用,可以充分发挥各自的优势,实现更高效的开发和部署。

目录结构

在这里插入图片描述

struts

Struts是一个基于MVC(Model-View-Controller)设计模式的Web应用程序框架。它通过将应用程序的不同层次进行分离,提供了更好的代码结构和可维护性。Struts的核心是一个控制器,负责接收用户请求、路由请求并调度处理程序进行处理,最后将处理结果返回给用户。Struts具有良好的扩展性和易于使用的特点,可以帮助开发人员快速构建功能丰富的Web应用程序。

在项目中对应的struts.xml文件,其可以配置页面显示的内容,比如:

<!--     购物车的action--><action name="cart_*" class="cartAction" method="{1}"><result name="addCart">/WEB-INF/jsp/cart.jsp</result><result name="clearCart">/WEB-INF/jsp/cart.jsp</result><result name="removeCart">/WEB-INF/jsp/cart.jsp</result><result name="myCart">/WEB-INF/jsp/cart.jsp</result></action>

在上面示例的代码中,通过“name=“cart_*””进行匹配,并且跳转到对应.jsp页面中。比如在对应的业务模块中实现ActionSupper类。在这里通过调用service层进行逻辑处理。

例如代码块:

public class IndexAction extends ActionSupport {//注入一级分类的serviceprivate CatagoryService catagoryService;public void setCatagoryService(CatagoryService catagoryService) {this.catagoryService = catagoryService;}//进入商品的serviceprivate ProductService productService;public void setProductService(ProductService productService) {this.productService = productService;}public String execute(){//查询所有一级分类的方法实现List<Category> cList=catagoryService.findAll();//将一级分类存入道session的范围ActionContext.getContext().put("cList",cList);//查询热门商品List<Product> hList= productService.findHot();//保存道值栈中ActionContext.getContext().getValueStack().set("hList",hList);//查询最新商品:List<Product>nList= productService.findNew();//保存到值栈中ActionContext.getContext().getValueStack().set("nList",nList);return "index";}
}

这里需要注意的是当创建新的action类后,并且在该类中注入了对应的service,同时在applicationContext.xml文件中注入service,例如:

<bean id="indexAction" class="main.java.cn.itcast.user.action.IndexAction" scope="prototype"><property name="catagoryService" ref="CatagoryService"/><property name="productService" ref="ProductService"/></bean>

Spring

Spring是一个轻量级的IoC(Inversion of Control)和AOP(Aspect-Oriented Programming)容器框架。它通过将对象之间的依赖关系交由容器管理,降低了组件之间的耦合度,提高了代码的可测试性和可扩展性。Spring还提供了丰富的功能,如事务管理、安全性等。开发人员可以使用Spring来管理JavaBean、进行依赖注入、实现面向切面的编程等。

public class MyBean {private String message;// Getter and setter methods for messagepublic void init() {// 初始化方法}public void destroy() {// 销毁方法}
}

Hibernate

Hibernate是一个强大的对象关系映射(ORM)框架,它简化了Java应用程序与数据库之间的交互。通过Hibernate,开发人员可以使用面向对象的方式操作数据库,而不必关心底层的SQL语句和数据库细节。Hibernate提供了丰富的持久化功能,包括对象的CRUD操作、事务管理、缓存机制等。通过使用Hibernate,可以大大提高数据访问的效率和灵活性。

Hibernate可以理解为是实体部分。在代码中需要写实体类,并编写对应的hbm.xml文件
例如:实体类

public class OrderItem {private Integer itemid;private Integer count;private Double subtotal;private Product product; //外键private Order order;}

这里省略了get和set方法
然后在编写对一个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><class name="main.java.cn.itcast.order.vo.OrderItem" table="orderitem" ><id name="itemid"><generator class="native"/></id><property name="count"/><property name="subtotal"/><!--   关联关系;与订单的关系--><many-to-one name="order" class="main.java.cn.itcast.order.vo.Order" column="oid"/>
<!--关联关系:与商品的关系--><many-to-one name="product" class="main.java.cn.itcast.product.vo.Product" column="pid"/></class>
</hibernate-mapping>

在此文件中体现了表该实体对应的表,以及对应的表关系。

总结

SSH框架(Struts + Spring + Hibernate)是一种广泛应用的Java企业级开发框架组合,它将Struts、Spring和Hibernate三个优秀的框架有机地结合在一起,提供了一套完整的解决方案,用于开发可扩展、可维护的Java应用程序。下面对SSH框架进行总结和分析:

优点:

模块化和分层架构:SSH框架采用MVC(Model-View-Controller)设计模式,将应用程序的不同层次进行分离,有助于代码结构清晰,易于维护和扩展。
高效的开发:每个框架都有自己的特点和优势,通过结合使用,可以充分发挥各自的优势,提高开发效率。
松耦合和可测试性:Spring框架通过IoC容器实现了依赖注入,降低了组件之间的耦合度,提高了代码的可测试性和可扩展性。
数据持久化和ORM支持:Hibernate框架简化了Java应用程序与数据库之间的交互,通过对象关系映射(ORM)实现了面向对象的数据持久化操作,提高了开发效率和灵活性。
Web应用程序支持:Struts框架提供了强大的Web应用程序开发支持,通过控制器、视图和模型的分离,实现了可维护和可扩展的Web应用程序。
灵活性和可扩展性:

SSH框架提供了各种配置选项和扩展点,可以根据项目需求进行定制和扩展,满足不同规模和复杂度的应用程序开发需求。
可以与其他开源框架和工具进行集成,如Spring Boot、Spring Security等,进一步提升开发效率和功能扩展性。
学习曲线和复杂性:

SSH框架相对于单个框架而言,学习曲线可能较陡峭,因为需要掌握并理解三个框架的概念、用法和配置。
框架的复杂性可能增加了系统的复杂性,对于小型项目而言,可能会增加不必要的开销。
社区支持和成熟度:

SSH框架在Java开发社区有着广泛的应用和大量的资料和资源,可以从社区获得丰富的支持和解决方案。
由于SSH框架已经经过多年的发展和演进,因此在稳定性、性能和安全性方面具有较高的成熟度和可靠性。
综上所述,SSH框架通过结合Struts、Spring和Hibernate三个框架的优势,提供了一套完整的解决方案,用于开发可扩展、可维护的Java应用程序。它具有高效的开发、灵活的定制和扩展能力,同时也具备一定的学习曲线和复杂性。对于大型、复杂的企业级应用程序而言,SSH框架是一种强大而可靠的选择。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/639.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux系统编程:文件系统和inode

目录 一. 磁盘的结构和读写数据的方式 1.1 磁盘级文件和内存级文件 1.2 磁盘的物理结构 1.3 访问磁盘数据的方式 二. 磁盘文件系统 2.1 磁盘的分区管理方法 2.2 文件名和inode的关系 三. 结合文件系统对文件创建和删除的相关问题的理解 3.1 文件创建时操作系统进行的工…

Mysql8.0的bin log日志

文章目录 一、 Mysql8.0 的bin log 日志关闭1.1、查看是否已开启 bin log 日志1.2、关闭 bin log 日志1.3、 设置 bin log 日志的时长1.3.1、第一种设置方式&#xff1a;1.3.2、第二种设置方式 一、 Mysql8.0 的bin log 日志关闭 Mysql8.0默认开启 binlog 记录功能&#xff0c…

如何配置Git工具

①安装Git&#xff1a;首先确保你已经在计算机上安装了Git。你可以从Git官方网站&#xff08;https://git-scm.com/&#xff09;下载适合你操作系统的安装程序&#xff0c;并按照提示进行安装。 ② 配置用户信息&#xff1a;在命令行终端中&#xff0c;使用下面的命令来配置你…

51单片机--DS1302时钟

文章目录 DS1302引脚定义和应用电路内部结构框图寄存器的定义时序定义BCD码DS1302时钟代码 DS1302 DS1302是美国DALLAS公司推出的一款实时时钟电路芯片。它具有高性能和低功耗的特点&#xff0c;可以通过SPI三线接口与CPU进行同步通信。DS1302能够提供秒、分、时、日、星期、月…

【SQL应知应会】表分区(一)• MySQL版

欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享&#xff0c;与更多的人进行学习交流 本文收录于SQL应知应会专栏,本专栏主要用于记录对于数据库的一些学习&#xff0c;有基础也有进阶&#xff0c;有MySQL也有Oracle 分区表 • MySQL版 一、分区表1.非分区表2.分区表2…

Autograd:自动求导

Autograd&#xff1a;自动求导 PyTorch中&#xff0c;所有神经网络的核心是 autograd 包。先简单介绍一下这个包&#xff0c;然后训练我们的第一个的神经网络。 autograd 包为张量上的所有操作提供了自动求导机制。它是一个在运行时定义(define-by-run&#xff09;的框架&…

利用集合框架实现-超市会员管理系统

借助集合框架来实现超市会员管理系统&#xff0c;实现以下功能&#xff1a; 1.开卡 2.积分累计 3.查询剩余积分 4.积分兑换 5.修改密码 6.退出 -------------------------------------------------------------------------------------------------- 展示&#x…

【信号去噪和分类】基于小波的隐马尔可夫模型统计信号处理(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

C语言实现扫雷【经典】

前言   本篇文章要实现的是扫雷游戏&#xff0c;其代码实现与上一篇的三子棋游戏类同&#xff0c;都是在棋盘的基础上&#xff0c;与电脑进行对抗&#xff0c;不同的是&#xff0c;扫雷游戏一开始电脑就已经随机布置好了所有“雷”。 请戳 --->三子棋 扫雷游戏 1. 扫雷游…

【新日语】第17課

练习A 语法练习 一、これはnanakoという電子マネーです。 这是叫做nanako的电子钱包。 解析&#xff1a; これ&#xff1a;“这个”&#xff1b;指示代词 ⇒ これ&#xff0f;あれ&#xff0f;それ「第4課ーP33」。 二、これは留学生が読む雑誌です。 这个是留学生读的杂志…

MySQL每日一练——MySQL多表查询进阶挑战

目录 1、首先创建表 t_dept: t_emp: 2、插入数据 t_dept表&#xff1a; t_tmp表: 3、修改表 4、按条件查找 1、首先创建表 t_dept: CREATE TABLE t_dept (id INT(11) NOT NULL AUTO_INCREMENT,deptName VARCHAR(30) DEFAULT NULL,address VARCHAR(40) DEFAULT NULL,P…

Python结巴中文分词笔记

&#x1f4da; jieba库基本介绍 &#x1f310; jieba库概述 Jieba是一个流行的中文分词库&#xff0c;它能够将中文文本切分成词语&#xff0c;并对每个词语进行词性标注。中文分词是自然语言处理的重要步骤之一&#xff0c;它对于文本挖掘、信息检索、情感分析等任务具有重要…

Linux服务器丢包故障的解决思路及引申的TCP/IP协议栈理论

Linux服务器丢包故障的解决思路及引申的TCP/IP协议栈理论 我们使用Linux作为服务器操作系统时&#xff0c;为了达到高并发处理能力&#xff0c;充分利用机器性能&#xff0c;经常会进行一些内核参数的调整优化&#xff0c;但不合理的调整常常也会引起意想不到的其他问题&#x…

Elasticsearch原理剖析

一、 Elasticsearch结构 Elasticsearch集群方案由EsMaster、EsClient和EsNode1、EsNode2、EsNode3、EsNode4、EsNode5、EsNode6、EsNode7、EsNode8、EsNode9进程组成&#xff0c;如下图所示&#xff0c;模块说明如表下所示。 说明如表&#xff1a; 名称说明ClientClient使用H…

Android系统启动流程分析

当按下Android系统的开机电源按键时候&#xff0c;硬件会触发引导芯片&#xff0c;执行预定义的代码&#xff0c;然后加载引导程序(BootLoader)到RAM&#xff0c;Bootloader是Android系统起来前第一个程序&#xff0c;主要用来拉起Android系统程序&#xff0c;Android系统被拉起…

C# Linq 详解四

目录 概述 二十、SelectMany 二十一、Aggregate 二十二、DistinctBy 二十三、Reverse 二十四、SequenceEqual 二十五、Zip 二十六、SkipWhile 二十七、TakeWhile C# Linq 详解一 1.Where 2.Select 3.GroupBy 4.First / FirstOrDefault 5.Last / LastOrDefault C# Li…

Prompt本质解密及Evaluation实战与源码解析(一)

第9章 Prompt本质解密及Evaluation实战与源码解析 9.1 Customer Service案例 本节主要谈提示词(Prompt)内部的工作机制,围绕案例、源码、论文三个维度展开。首先,我们可以看一下代码部分,这是对基于大模型应用程序开发的一个评估(Evaluation),这显然是一个至关重要的内…

排序子序列,倒置字符串讲解(图文并茂)

目录 1.排序子序列 2.倒置字符串 1.排序子序列 排序子序列_牛客笔试题_牛客网 (nowcoder.com) 首先题干中提到非递增序列和非递减序列&#xff0c;那么我们就要先弄明白什么是上述2种序列&#xff1a; 非递增序列&#xff1a;a[i] > a[i1] 如&#xff1a;3 2 1 或者 3 3 …

使用docker简单创建一个python容器

/root/docker_python目录结构&#xff1a; . |-- demo | -- main.py -- docker-compose.ymlmain.py内容&#xff1a; # codingutf-8 # -*- coding: utf-8 -*-if __name__ __main__:print("hello world")docker-compose.yml内容&#xff1a; version: "3&q…

注册中心技术Eureka、Nacos

说明&#xff1a;在微服务框架中&#xff0c;各个服务之间都是独立的。理论上来说&#xff0c;各个服务之间是可以直接通信的&#xff0c;但实际上因为服务之间通信需要管理和规划&#xff0c;如请求怎么负载均衡、请求怎么降级处理等等&#xff0c;所以就需要使用一个技术&…