基于SSH框架的管理系统【完整项目源码】

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 基于SSH框架的管理系统【完整项目源码】

基于SSH框架的管理系统


【文末附源码】


1前言


基于SSH框架的管理系统简洁版;


实现登录、注册、增、删、改、查;


可继续完善增加前端、校验、其他功能等;


可作为SSH(Structs  Spring  Hibernate)项目开发练习基础模型;


课程设计、毕业设计开发基础;


任何复杂的框架都是简单的知识组合并延伸的,学好基础知识才是最重要的;


此项目简单,便于理解基本原理,为复杂SSH复杂项目的开发打下基础。


2环境准备


开发平台:IDEA 2019


数据库:MySQL 5.0.22


服务器:Tomcat 9.0.37


注意:需要安装IDEA开发平台、MySQL数据库和Tomcat服务器,版本不一定完全一致,做好版本适应性配置即可。


3项目结构


3.1数据库及Java代码文件



image.png



3.2Jsp等前端代码



image.png



3.3Tomcat服务器配置与运行



image.png



3.4MySQL数据库


image.png


4基本原理


4.1相关概念


 


   Structs


   (一)Structs1原理


       1.Structs1原理图


image.png


     


   2.原理步骤


   用户在视图层输入数据。


第一步:Structs框架总控制器,初始化,开始读取strusts-config.xml文件。Struts框架的总控制器ActionServlet是一个Servlet,在web.xml中配置成自动启动的Servlet,在启动时总控制器会读取配置文件(struts-config.xml)的配置信息,为Struts中不同的模块初始化相应的对象。(面向对象思想)


第二步:视图层向总控制器发送Http请求,用户提交表单或者通过URL向WEB服务器提交请求,请求的数据用HTTP协议传给web服务器


第三步:Form填充;structs的总控制器ActionServlet在用户提交请求时将数据放到对应的form对象中的成员变量中。


第四步:派发请求;控制器根据配置信息,对象ActionConfig将请求派发到具体的Action,对应的formBean一并传给这个Action中的excute()方法。


第五步:处理业务;Action一般只包含一个excute()方法,负责执行相应的业务逻辑(调用其它的业务模块)完毕后返回一个ActionForward对象。服务器通过ActionForward对象进行转发工作。


第六步:返回响应;Action将业务处理的不同结果返回一个目标响应对象给总控制器。


第七步:查找响应;总控制器根据Action处理业务返回的目标响应对象,找到对应的资源对象,一般情况下为jsp页面。


第八步:响应用户;目标响应对象将结果传递给资源对象,将结果展现给用户。


   3.优缺点


   优点:


     ①开源的框架,结构清晰


     ②是MVC的经典实现(MVC是一种思想,而不是一种技术)


     ③处理异常机制,实现国际化


     ④具有强大的标签库


     ⑤解决了JSP页面存在大量的JAVA代码,维护起来方便


     ⑥在formBean中会自动提交,不会去使用传统的get、set方法得到值、取值


   缺点:


     ①配置复杂


     ②测试不方便


     ③依赖web容器


     ④action是一个单例模式,必须设置为线程安全


   (二)Structs2原理


       1.Structs2原理图


image.png


       2.Struct2原理步骤


第一步:客户端初始化一个指向Servlet容器(例如Tomcat)的请求


第二步:请求经过一系列的过滤器(Filter)


第三步:接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action


第四步:如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy


第五步:ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类


第六步:ActionProxy创建一个ActionInvocation的实例。


第七步:ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用


第八步:一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2框架中继承的标签。在这个过程中需要涉及到ActionMapper


 


   注意:在上述过程中所有的对象(Action,Results,Interceptors等)都是通过ObjectFactory来创建的


   3.Structs2的优缺点


       优点:


       ①大量的拦截器:Struts2本身提供了大量的可重用的拦截器,比如类型转换拦截器,很多时候从页面取得参数,这个时候它是String类型的,需要手动。


       ②基于插件的框架:Struts2是一个基于插件的框架,社区中提供了很多实用的插件,比如jfreechat/json等等,使用这些插件可以简化我们的开发,加快开发进度。Struts2最大的缺点莫过于在好多web服务器上支持不好,例如在websphere5.5,weblogic8.1及以前版本支持非常查,需要用最新的。


       ③多种视图的支持:多种视图的支持:jsp,freemarker,Veloctiy,甚至可以通过轻松的改造支持pdf,同一个项目中可以支持多种视图。


       ④更加的模块化:与Struts1.X 相比,Struts2更加的模块化,可以轻松将配置信息按功能界限拆分成多个文件,便于管理和团队协作开发。


       ⑤与Spring的集成:与Struts1.x相比,Struts2不必再自己编写singleton,进一步的降低了程序间的耦合性,就Struts2内部本身而言,降低了框架本身的偶合性。


       ⑥基于pojo易于测试:在Struts1.x中需要Mock出这两个Http对象,很难编写Action的单元测试,与Struts1.x相比,Struts2的Action 不再依赖于HttpServletRequest和HttpServletResponse对象,使我们能够更方便的针对Action编写单元测试。


       缺点:


       ①Struts2中Action中取得从jsp中传过来的参数时麻烦。可以为Struts2的Action中的属性配置上Getter和Setter方法,通过默认拦截器,就可以将请求参数设置到这些属性中。但当请求参数很多时,Action类就显得很臃肿。Action中的属性不但可以用来获得请求参数还可以输出到Jsp中,会更乱。


       ②校验比较繁琐。如果校验出错的只能给用户提示一些信息。如果有多个字段,每个字段出错时返回到不同的画面,在Strut2框架下借助框架提供的校验逻辑就不容易实现。


       ③安全性有待提高。使用缩写的导航参数前缀时的远程代码执行漏洞,另一个是使用缩写的重定向参数前缀时的开放式重定向漏洞。


   Spring


   1.简介


   Spring是一个开源框架,是2003年兴起的轻量级的Java开发框架,为解决企业应用开发的复杂性而创建的。简单来说,Spring是一个轻量级的控制反转(IOC)和面向切面(AOP)的容器框架。日常开发中IOC容器使用较多,可以装载Bean,即Java中的类,不用在每次使用类的时候初始化,很少出现关键字new。另外Spring的AOP,事务管理等等也会经常使用。


         IOC:


        控制反转,是一种降低对象之间耦合关系的设计思想。如:租赁房屋,平常租房需要自己逐个小区寻找房屋,然后使用了IOC之后,即需找一个租房中介,把对房屋的需求告诉中介,就可以直接找到合适的房屋。即把需求交给了第三方,有第三方帮助完成需求,中介就相当于Spring容器。


          AOP:


         面向切面编程,是面向对象开发的一种补充,允许开发人员在不改变原来模型的基础上动态的修改模型以满足新的需求,如:动态的增加日志、安全或异常处理等。AOP使业务逻辑各部分间的耦合度降低,提高程序可重用性,提高开发效率。


   2.主要特征


   ①轻量级:Spring是一个轻量级的开发框架,基本版本大约只有2M


   ②IOC:控制反转,应用程序中对象之间的依赖是由Spring 来控制的


   ③AOP:面向切面编程,Spring支持面向切面编程,这样可以将业务逻辑和系统服务分开、分离


   ④容器:包含并管理应用程序中对象的生命周期和配置信息


   ⑤MVC思想:Spring也是基于MVC思想的框架,也遵循模型-视图-控制器这三个层次


   ⑥事务:spring提供一个持续化的接口,可以上至扩展到本地事务下至扩展到全局事务


   ⑦异常处理:Spring 提供方便的API把具体技术相关的异常(比如由JDBC,hibernate,or JDO抛出的)转化为一致的unchecked 异常。


3.优缺点


   优点:


   ①Spring能有效地组织你的中间层对象。


   ②Spring能消除在许多工程中常见的对Singleton的过多使用。降低了系统的可测试性和面向对象的程度。


   ③通过一种在不同应用程序和项目间一致的方法来处理配置文件,Spring能消除各种各样自定义格式的属性文件的需要。


   ④通过把对接口编程而不是对类编程的代价几乎减少到没有,Spring能够促进养成好的编程习惯。


   ⑤Spring被设计为让使用它创建的应用尽可能少的依赖于他的APIs。在Spring应用中的大多数业务对象没有依赖于Spring。


   ⑥使用Spring构建的应用程序易于单元测试。


   ⑦Spring能使EJB的使用成为一个实现选择,而不是应用架构的必然选择。能选择用POJOs或local EJBs来实现业务接口,却不会影响调用代码。


   ⑧Spring帮助你解决许多问题而无需使用EJB。Spring能提供一种EJB的替换物,它们适用于许多web应用。例如,Spring能使用AOP提供声明性事务管理而不通过EJB容器,如果你仅仅需要与单个数据库打交道,甚至不需要一个JTA实现。


   ⑨Spring为数据存取提供了一个一致的框架,不论是使用的是JDBC还是O/R mapping产品(如Hibernate)。


   缺点:


   ①jsp中要写很多代码、控制器过于灵活,缺少一个公用控制器


   ②Spring不支持分布式,这也是EJB仍然在用的原因之一。


   Hibernate


   1.工作原理


   第一步:Configuration.config() 来读取xml配置文件


   第二步:Configuration.config()来读取配置文件里面的映射信息


   第三步:创建会话工厂


   第四步:打开会话


   第五步:开启事务


   第六步:持久化到数据库


   第七步:关闭会话


   第八步:关闭会话工厂


   2.优缺点


   优点:


   ①hibernate是基于ORMapping技术的开源的框架,对JDBC进行了轻量级的封装,使用面向对象的思维来操纵数据库。


   ②hibernate提供了session缓存和二级缓存,对于不需要进行复杂查询的系统,性能有提升。


   ③低侵入式设计


   缺点:


   ①hibernate不容易上手,学习成本太高


   ②hibernate由于不直接对底层数据库进行操作,所以不适合复杂的查询(统计)


   ③不适合大量的聚集操作(存储过程)


4.2实现基本原理


   SSH是 Struts、Spring、Hibernate的一个集成框架,是目前较流行的一种web应用程序开源框架,用于构建灵活、易于扩展的多层Web应用程序。


   SSH构建系统的基本业务流程:


       Struts作为系统的整体基础架构,负责MVC的分离,在Struts框架的模型部分,控制业务跳转,利用Hibernate框架对持久层提供支持。Spring一方面作为一个轻量级的IoC容器,负责查找、定位、创建和管理对象及对象之间的依赖关系,另一方面能使Struts和Hibernate更好地工作。


   SSH框架的系统从职责上分为四层:表示层、业务逻辑层、数据持久层和域模块层(实体层)。


   SSH框架的项目,该架构主要分为三个层次:


   (1)Struts2:负责web层


   (2)Spring:业务层的管理


   (3)Hibernate:负责数据持久化


   在表示层中,首先通过JSP页面实现交互界面,负责传送请求(Request)和接收响应(Response),然后Struts根据配置文件(struts-config.xml)将ActionServlet接收到的Request委派给相应的Action处理。


   在业务层中,管理服务组件的Spring IoC容器负责向Action提供业务模型(Model)组件和该组件的协作对象数据处理(DAO)组件完成业务逻辑,并提供事务处理、缓冲池等容器组件以提升系统性能和保证数据的完整性。


   在持久层中,则依赖于Hibernate的对象化映射和数据库交互,处理DAO组件请求的数据,并返回处理结果。


   采用上述开发模型,不仅实现了视图、控制器与模型的彻底分离,而且还实现了业务逻辑层与持久层的分离。无论前端如何变化,模型层只需很少的改动,并且数据库的变化也不会对前端有所影响,大大提高了系统的可复用性。而且由于不同层之间耦合度小,有利于团队成员并行工作,大大提高了开发效率。


5页面展示


5.1登录页面


image.png


5.2注册页面


image.png


5.3主页


image.png


5.4新增页面


image.png


5.5删除页面


image.png


5.6修改页面


image.png


6注意


   1.MySQL 版本5.0以上与8.0以上配置有些许差异,需要调整,

# MySQL 5.Xjdbc.driver=com.mysql.jdbc.Driver
# MySQL 8.Xjdbc.driver=com.mysql.cj.jdbc.Driver

   2.运行项目前提前配置好MySQL数据库、Tomcat服务器、IDEA maven依赖库;


   3.本系统仅实现简单功能,仅为更好理解SSH原理,需进一步完善更多功能及健壮性。


7源码


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
4月前
|
Ubuntu 安全 网络安全
百度搜索:蓝易云【Ubuntu系统SSH服务端配置】
现在,你已经成功在Ubuntu系统上配置了SSH服务端。这将允许其他计算机通过SSH协议连接到你的Ubuntu系统,并进行远程管理和操作。请注意,远程访问有安全风险,建议在生产环境中采取必要的安全措施来保护系统。
64 3
|
4月前
|
Ubuntu 网络协议 网络安全
如何在外SSH远程连接Ubuntu系统【无公网IP】
如何在外SSH远程连接Ubuntu系统【无公网IP】
138 0
|
4月前
|
Linux 网络安全 数据安全/隐私保护
SSH工具连接远程服务器或者本地Linux系统
SSH工具连接远程服务器或者本地Linux系统
99 0
|
1月前
|
XML JSON Java
使用IDEA+Maven搭建整合一个Struts2+Spring4+Hibernate4项目,混合使用传统Xml与@注解,返回JSP视图或JSON数据,快来给你的SSH老项目翻新一下吧
本文介绍了如何使用IntelliJ IDEA和Maven搭建一个整合了Struts2、Spring4、Hibernate4的J2EE项目,并配置了项目目录结构、web.xml、welcome.jsp以及多个JSP页面,用于刷新和学习传统的SSH框架。
32 0
使用IDEA+Maven搭建整合一个Struts2+Spring4+Hibernate4项目,混合使用传统Xml与@注解,返回JSP视图或JSON数据,快来给你的SSH老项目翻新一下吧
|
30天前
|
安全 Linux Shell
Linux系统之间实现免密码登录(SSH无密码登录
【8月更文挑战第21天】要在Linux系统间实现SSH免密码登录,需先在源机器生成SSH密钥对,然后将公钥复制到目标机器的`.ssh/authorized_keys`文件中。可通过`ssh-keygen`命令生成密钥,并使用`ssh-copy-id`命令传输公钥。最后测试SSH连接,确保能无密码登录。若目标机器缺少相关目录或文件,需手动创建并设置适当权限。完成这些步骤后,即可实现安全便捷的免密码登录。
46 0
|
2月前
|
Shell 网络安全 数据安全/隐私保护
MacOS Sonoma14.2.1系统SSH免密登录
【7月更文挑战第9天】在MacOS Sonoma 14.2.1中设置SSH免密登录,包括:1) 使用`ssh-keygen`生成RSA密钥对;2) 使用`ssh-copy-id`将公钥传到远程主机;3) 用`ssh-add --apple-use-keychain`添加私钥到ssh-agent,并为重启后自动添加配置自动化脚本;4) 可选地,编辑`~/.ssh/config`设置别名简化登录。确保远程主机的`.ssh/authorized_keys`文件权限为600。
114 4
WXM
|
2月前
|
Java 应用服务中间件 网络安全
Eclipse运行SSM/SSH项目教程
Eclipse运行SSM/SSH项目教程
WXM
64 0
|
4月前
|
存储 安全 Shell
windows 系统 c 盘 .ssh 文件夹里的 known_hosts 文件的作用
windows 系统 c 盘 .ssh 文件夹里的 known_hosts 文件的作用
|
4月前
|
安全 Shell 网络安全
windows 系统 c 盘 .ssh 文件夹里的 id_rsa 文件的作用
windows 系统 c 盘 .ssh 文件夹里的 id_rsa 文件的作用
|
4月前
|
安全 算法 网络安全
windows 系统 c 盘 .ssh 文件夹里的 id_rsa.pub 文件的作用
windows 系统 c 盘 .ssh 文件夹里的 id_rsa.pub 文件的作用