JAVA java学习(16)——————javaweb主流框架介绍(小结)_javaweb框架-程序员宅基地

技术标签: JAVA  java  javaweb框架  

Java Web开发的用到的框架之多简直令人发指,而且因为版本的更新换代导致的问题也是层出不穷。然而这也是Web技术不断演化的结果,要么选择接受,要么引领节奏。

原来常用的Javaweb框架是SSH(Struts + Spring + Hibernate)后来随着Spring的强大以及Struts漏洞上的等等问题,演变成为了Spring + SpringMVC + Hibernate/Mybatis。互联网这块比较常见的是Mybatis。再后来也慢慢演变为了Springboot + Mybatis。

1. Hibernate 框架

Hibernate 是一种ORM框架,全称为 Object-Relative Database-Mapping,在Java对象与关系型数据库之间建立某种映射,以实现直接存取Java对象(POJO)。ORM框架是一种不同与MVC的另一种思想框架,适用范围也与MVC截然不同。
使用JDBC连接来读写数据库,我们最常见的就是打开数据库连接、使用复杂的SQL语句进行读写、关闭连接,获得的数据又需要转换或封装后往外传,这是一个非常烦琐的过程。
这时出现了Hibernate框架,它需要你创建一系列的持久化类,每个类的属性都可以简单的看做和一张数据库表的属性一一对应,当然也可以实现关系数据库的各种表件关联的对应。当我们需要相关操作是,不用再关注数据库表。我们不用再去一行行的查询数据库,只需要持久化类就可以完成增删改查的功能。使我们的软件开发真正面向对象,而不是面向混乱的代码。大多感受是,使用Hibernate比JDBC方式减少了80%的编程量。

数据持久化框架其实也有很多,需要掌握的不仅是Hibernate,只是因为Hibernate在以前的企业级应用中用的比较多而已,另外MyBatis也占有相当重要的份额。Hibernate是一个全自动的持久化框架,并不是那么方便,所以很多开发者更倾向于使用MyBatis,淘宝就是这样。

2.Struts2框架

Struts2以WebWork优秀的设计思想为核心,吸收了 Struts框架的部分优点,提供了一个更加整洁的MVC设计模式实现的Web 应用程序框架

Struts2引入了几个新的框架特性:从逻辑中分离出横切关注点的拦截器、减少或者消除配置文件、贯穿整个框架的强大表达式语言、支持可变更和可重用的基于MVC模式的标签API, Struts2充分利用了从其它MVC框架学到的经验和教训,使得 Struts2框架更加清晰灵活。

3.Struts 框架(目前已淘汰)

struts配置太过于复杂,而且太不经用,经常报错,维护使用不便,再加上漏洞前科,很多中小型都放弃了使用,直接用spingMVC替代。而hibernate性能一般,再加上sql语句全封装,而Mybatis是半封装,更加灵活。性能强大,已经有了取而代之的趋势。为了解决这些问题,出现了Struts框架,它是一个完美的MVC实现,它有一个中央控制类(一个Servlet),针对不同的业务,我们需要一个Action类负责页面跳转和后台逻辑运算,一个或几个JSP页面负责数据的输入和输出显示,还有一个Form类负责传递Action和JSP中间的数据。JSP中可以使用Struts框架提供的一组标签,就像使用HTML标签一样简单,但是可以完成非常复杂的逻辑。从此JSP页面中不需要出现一行<%%>包围的Java代码了。 可是所有的运算逻辑都放在Struts的Action里将使得Action类复用度低和逻辑混乱,所以通常人们会把整个Web应用程序分为三层,Struts负责显示层,它调用业务层完成运算逻辑,业务层再调用持久层完成数据库的读写。

4.MyBatis 框架

MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。

iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAOs)。

MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

5.Spring 框架

调用者依赖被调用者,它们之间形成了强耦合,如果我想在其他地方复用某个类,则这个类依赖的其他类也需要包含。程序就变得很混乱,每个类互相依赖互相调用,复用度极低。如果一个类做了修改,则依赖它的很多类都会受到牵连。为此,出现Spring框架。

Spring的作用就是完全解耦类之间的依赖关系,一个类如果要依赖什么,那就是一个接口。至于如何实现这个接口,这都不重要了。只要拿到一个实现了这个接口的类,就可以轻松的通过xml配置文件把实现类注射到调用接口的那个类里。所有类之间的这种依赖关系就完全通过配置文件的方式替代了。所以Spring框架最核心的就是所谓的依赖注射和控制反转。

Spring是一个强大而又"轻量级"的Java开发框架,之所以打引号是因为感觉并不是那么轻量。Spring的主要目的在于简化Java应用开发,以配置方式代替硬编码方式的编程,模块解耦,其架构包括了数据访问、远程通信、AOP、核心容器等部分。

6.spring MVC 框架

Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的SpringMVC框架或集成其他MVC开发框架,如Struts1,Struts2等。

它是一个典型的教科书式的mvc构架,而不像struts等都是变种或者不是完全基于mvc系统的框架,对于初学者或者想了解mvc的人来说我觉得 spring是最好的,它的实现就是教科书!第二它和tapestry一样是一个纯正的servlet系统,这也是它和tapestry相比 struts所具有的优势。而且框架本身有代码,看起来容易理解。Data Access Objects(DAOs)。

7.Jersey 框架

Jersey RESTful 框架是开源的RESTful框架, 实现了JAX-RS (JSR 311 & JSR 339) 规范。它扩展了JAX-RS 参考实现, 提供了更多的特性和工具, 可以进一步地简化 RESTful service 和 client 开发。尽管相对年轻,它已经是一个产品级的 RESTful service 和 client 框架。与Struts类似,它同样可以和hibernate,spring框架整合。

由于Struts2+hibernate+spring整合在市场的占有率太高,所以很少一部分人去关注Jersey。所以网上有关于Jersey的介绍很少。但是它确实是一个非常不错的框架。对于请求式服务,对于GET,DELETE请求,你甚至只需要给出一个URI即可完成操作。

举个简单的例子:如果你想获得服务器数据库中的所有数据;那么你可以在浏览器或者利用Ajax的GET方法,将路径设置好;例如:localhost:8080/Student(项目名称)/studentinfo(项目服务总体前缀)/student(处理student对象的签注)/getStudentInfo(最后前缀)。这样就可以获取所有学生信息。你可以选择GET获取的数据的返回类型:JSON,XML,TEXT_HTML(String)…获取之后,你可以通过JS将这些数据塞到html或者jsp页面上。

8.springboot 框架

springboot 框架,被称作一栈式解决方案。比较轻量,也是当前微服务下的趋势;springboot本身就是构建与spring之上,各种思想和特性无需多说,去掉了spring繁琐的配置,简化了原有spring开发的流程,提供了各种实用的特性如metric,actuctor等等;最重要的是springboot附带了整个springcloud生态。两个框架对你解决大,中,小项目都没任何问题。

9.play 框架

play可能更加偏向于scala点,本身轻量性能高,随着逐步的优化易用性以及扩展性都变得越来越好。

10.Vue.js 框架

严格来说这个应该不属于框架, 从组建构造上来讲 是和reactjs 类似的构造UI组件的。 从整体逻辑来讲, 他要解决的是MVVM的VM这个部分, 就是如何把应用程序的model 和 view 联系起来的这个VM(view model) 部分。众所周知, MVC这个design pattern争议大的就是这个C的部分, 所以才有各种MV* 的方案提出。 他使用起来确实比reactjs 简单方便多了。 代码也清晰。借鉴了angularjs的declarative的特点。 另外文档, 例子做的都很漂亮。 上手比较快, 这些都是很好的优点。

11.jfinal 框架

JFinal 是基于Java 语言的极速 web 开发框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展、Restful。在拥有Java语言所有优势的同时再拥有ruby、python等动态语言的开发效率。

到这里java基础知识就结束了,下面是java基础语法,来通过一张图看一下:
在这里插入图片描述
注:图片来源:https://blog.csdn.net/java_wxid/article/details/82937787是个大咖哦

上一篇:JAVA java学习(15)——————java程序员学习路线

下一篇:JAVA java学习(17)——————标识符、关键字、代码注释

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_43434300/article/details/108813206

智能推荐

[webpack] Configuration Error: Avoid modifying webpack output.publicPath directly.-程序员宅基地

文章浏览阅读5.2k次。goalvue-cli脚手架生成的项目,想要配置webpack下的output.publicPath选项配置1module.exports = { configureWebpack: { publicPath: 'http://localhost:8080/', }}报错configuration has an unknown property ‘publicPath’. These properties are valid: output?理解:需要在ou_configuration error: avoid modifying webpack output.path directly. use the

python summary writer_tensorflow中summary操作-程序员宅基地

文章浏览阅读2k次。tf中 tensorboard 工具通过读取在网络训练过程中保存到本地的日志文件实现数据可视化,日志数据保存主要用到 tf.summary 中的方法。tf.summary中summary是tf中的一个py文件,位置在 '/tensorflow/python/summary/' 文件夹下,提供了像tf.summary.scalar、tf.summary.histogram等方法,用来把graph图中..._summary_writer.add_summary()

Vue中实现div编辑效果,及contenteditable设置为plaintext-only与true的区别-程序员宅基地

文章浏览阅读9.6k次,点赞5次,收藏20次。有时候我们希望实现点击一段div内文本时就能直接进行编辑,当然使用文本框、富文本等也可以实现,但终究有些麻烦。目录效果预览参数介绍封装与使用使用效果差异plaintext-only 的效果使用contenteditable = "true" 的效果效果预览今天我给大家介绍的这种方式是直接使用div的 contenteditable属性,即可实现div的文本编辑..._plaintext-only

对标大厂标准CSDN能力认证 and 超级实习生-大厂实习直通车_csdn认证-程序员宅基地

文章浏览阅读8.1k次,点赞41次,收藏61次。对标大厂标准CSDN能力认证 and 超级实习生-大厂实习直通车详情介绍!!!_csdn认证

快速找出System.Management.Automation.dll,c#调用powershell-程序员宅基地

文章浏览阅读772次。public static void InvokeSystemPS(string cmd) { List<string> ps = new List<string>(); ps.Add("Set-ExecutionPolicy RemoteSigned"); ps..._system.management.automation

MacBook键盘符号_苹果电脑箭头符号是哪个键-程序员宅基地

文章浏览阅读1.1k次。图标介绍⌘Command⇧Shift⇪Caps Lock⌥Option = Alt⌃ControlEnter⌫Delete⌦Fn + Delete↑上箭头↓下箭头←左箭头→右箭头⇞Fn + ↑ = Page Up⇟Fn + ↓ = Page DownHomeFn + ←EndFn + →⇥Tab = 右制表符⇤Shift + Tab = 左制表符..._苹果电脑箭头符号是哪个键

随便推点

使用 CloudFlare 为 hexo 博客实现 HTTPS-程序员宅基地

文章浏览阅读5.4k次,点赞4次,收藏3次。博客地址之前一直都是默认的 secsilm.github.io,一直想换个自己的域名,正巧看到 NameBeta 上好几个域名都好便宜,就准备买个搞搞,最后挑中了 alanlee.fun 这个域名。把自己的博客域名换成自己买的域名并实现 HTTPS(GitHub Pages 不支持自定义域名 HTTPS),大概需要这么几个步骤(以在 namecheap 上购买域名为例):在 namech...

Centos7 通过SSH使用密钥实现免密登录_centos7生成的公钥密钥对,默认保存在-程序员宅基地

文章浏览阅读633次。转载https://blog.csdn.net/axing2015/article/details/83754785概述 Public Key认证的主要魅力在于认证时承诺不必提供密码就能够同远程系统建立连接。 Public Key认证的基础在于一对密钥,public key和private key,public key对数据进行加密而且只能用于加密,private key 只能对..._centos7生成的公钥密钥对,默认保存在

S32K flash擦除异常以及flash保护 (FLASH_DRV_CommandSequence函数异常)_s32k如何读取flash的保护状态-程序员宅基地

文章浏览阅读3.1k次,点赞4次,收藏27次。对Flash擦除,bit0置为1的过程,擦除完的扇区基本是0xffff…。写入数据,一般是将1置为0.S32K144芯片有512K,地址0-0x0007_ffff,每个扇区的大小是4K,共有128个扇区,这里Flash是Program Flash(P_Flash 程序Flash)。还有Data Flash(D_Flash 数据Flash),有16个扇区,64K。4K的EEPROM。_s32k如何读取flash的保护状态

vmware报:与vmx86 驱动版本不匹配: 期待xxo.o,当前ooo.x 你的驱动程序vmx86.sys 版本不正确。_kali - vmware workstation 与vmx86驱动程序的版本不匹 预期为361.0-程序员宅基地

文章浏览阅读8.3k次。一般是以前安装过旧版本的没卸载,或是所谓绿色虚拟机造成的,1 在虚拟机目录下找vmx86.sys (ctrl+f),, 7系列一般在安装后的main目录下,6系统或更早系统可能躲在某个iso或rar里,但一定要是在虚拟机目录!2 把找到的vmx86.sys轻轻地放到C:\windows\system32\drivers 目录下3 开始,运行,cmd4.在_kali - vmware workstation 与vmx86驱动程序的版本不匹 预期为361.0,实际为398.0。驱动程序"vmx86.sys"的版本不正确

利用pyrealsense获取深度图,并进行像素对齐_pyrealsense2深度值-程序员宅基地

文章浏览阅读6.4k次,点赞4次,收藏32次。系统:Ubuntu16.04python版本:python2.7内核版本:4.13.0realsense SDK:librealsense1.12.1python wrapper:pyrealsense2.2这里的pyrealsense2.2指的是pyrealsense1的2.2版本,并不是pyrealsense2,如图:安装pyrealsense/2.21. 进入..._pyrealsense2深度值

推荐文章

热门文章

相关标签