`
Sunshyfangtian
  • 浏览: 252341 次
  • 性别: Icon_minigender_1
  • 来自: 惠州
社区版块
存档分类
最新评论

Java知识拾遗:三大框架的技术起源

阅读更多

  

    在Java开发中,我们经常使用Struts、Hibernate和Spring三个主流框架,但你是否知道这三个框架最初是为解决怎样的问题而生的?

     

    Struts、Hibernate和Spring是我们Java开发中的常用关键,他们分别针对不同的应用场景给出最合适的解决方案。但你是否知道,这些知名框架最初是怎样产生的?

    我们知道,传统的Java Web应用程序是采用JSP+Servlet+Javabean来实现的,这种模式实现了最基本的MVC分层,使的程序结构分为几层,有负责前台展示的JSP、负责流程逻辑控制的Servlet以及负责数据封装的Javabean。但是这种结构仍然存在问题:如JSP页面中需要使用符号嵌入很多的Java代码,造成页面结构混乱,Servlet和Javabean负责了大量的跳转和运算工作,耦合紧密,程序复用度低等等。

    Struts

    为了解决这些问题,出现了Struts框架,它是一个完美的MVC实现,它有一个中央控制类(一个Servlet),针对不同的业务,我们需要一个Action类负责页面跳转和后台逻辑运算,一个或几个JSP页面负责数据的输入和输出显示,还有一个Form类负责传递Action和JSP中间的数据。JSP中可以使用Struts框架提供的一组标签,就像使用HTML标签一样简单,但是可以完成非常复杂的逻辑。从此JSP页面中不需要出现一行包围的Java代码了。

    可是所有的运算逻辑都放在Struts的Action里将使得Action类复用度低和逻辑混乱,所以通常人们会把整个Web应用程序分为三层,Struts负责显示层,它调用业务层完成运算逻辑,业务层再调用持久层完成数据库的读写。

    使用JDBC连接来读写数据库,我们最常见的就是打开数据库连接、使用复杂的SQL语句进行读写、关闭连接,获得的数据又需要转换或封装后往外传,这是一个非常烦琐的过程。

    Hibernate

    这时出现了Hibernate框架,它需要你创建一系列的持久化类,每个类的属性都可以简单的看做和一张数据库表的属性一一对应,当然也可以实现关系数据库的各种表件关联的对应。当我们需要相关操作是,不用再关注数据库表。我们不用再去一行行的查询数据库,只需要持久化类就可以完成增删改查的功能。使我们的软件开发真正面向对象,而不是面向混乱的代码。我的感受是,使用Hibernate比JDBC方式减少了80%的编程量。

    现在我们有三个层了,可是每层之间的调用是怎样的呢?比如显示层的Struts需要调用一个业务类,就需要new一个业务类出来,然后使用;业务层需要调用持久层的类,也需要new一个持久层类出来用。通过这种new的方式互相调用就是软件开发中最糟糕设计的体现。简单的说,就是调用者依赖被调用者,它们之间形成了强耦合,如果我想在其他地方复用某个类,则这个类依赖的其他类也需要包含。程序就变得很混乱,每个类互相依赖互相调用,复用度极低。如果一个类做了修改,则依赖它的很多类都会受到牵连。 为此,出现Spring框架。

    Spring

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

    现在的结构是,Struts负责显示层,Hibernate负责持久层,Spring负责中间的业务层,这个结构是目前国内最流行的Java Web应用程序架构了。另外,由于Spring使用的依赖注射以及AOP(面向方面编程),所以它的这种内部模式非常优秀,以至于Spring自己也实现了一个使用依赖注射的MVC框架,叫做Spring MVC,同时为了很好的处理事物,Spring集成了Hibernate,使事物管理从Hibernate的持久层提升到了业务层,使用更加方便和强大。

    Struts框架是2000年就开始起步了,到目前已经发展了5年,技术相当成熟,目前全球Java开发中Struts框架是显示层技术中当之无愧的王者。它拥有大量的用户群和很好的开发团队。这也是国内大部分Java软件公司对新进员工的基本要求。

    其他

    Java这个名词似乎注定和开源紧密联系在一起了,在Java界,每天都有大量的开源技术出现,由于是开放源代码的,技术中存在的问题和不足很快就会被人发现,开源软件提供者会很快的修正或扩展这些技术,因此版本更新很快,几个星期或者几天就有一个新版本出来。

    当我们在技术线路中选择了Java,也就选择了你必须持续学习,经常关注最新的技术,了解它们,看是否适合你的需要,然后学习使用它们。

    你应该掌握的Java技术

    Java基础:

    ◆Java原理和使用,包括基本的语言、语法知识和API

    ◆JSP+Servlet,Java Web开发的基础

    这方面可以关注Java开发基础专题。

    服务器:

    WebLogic的原理、使用和配置

    Tomcat:轻量的JavaWeb容器,和WebLogic功能类似,使用简单、方便、免费、开源,但不支持EJB

    JBoss:类似于Tomcat,功能更强,支持EJB

    这三种应用服务器至少掌握其中的一种是很必要的。

    框架:

    ◆Struts、Spring、Hibernate

    Tapestry:这是一个新的MVC框架,使用组件式开发,是显示层技术的发展趋势。

    ◆Flex和Laszlo:新的显示层技术,支持富客户端应用,是目前的较前沿的显示技术。

    EJB :EJB的全称是Enterprise JavaBeans,是Java中的商业应用组件技术。

    Java Web开发周边技术:

    ◆HTML、Javascript、CSS、XML、XSLT,这些是开发中经常使用到的,应该熟练掌握。

    开发工具:

    ◆Dreamweaver、Eclipse或Jbuilder、PL/SQL

    数据库:

    ◆Oracle必须会用、SQLServer掌握、MySQL可以在自己学习时使用。DB2那种东西就不要学了,国内太少使用了。

    软件工程:

    ◆可以理解UML设计和使用UML进行简单设计。

    更多关于Java技术的学习请参考《成为Java高手需要注意的25个学习目标》,更多Java方面的报道请关注51CTO Java频道

     

分享到:
评论

相关推荐

    java知识拾遗-三大框架的技术起源.pdf

    Java开发中的三大框架,即Struts、Hibernate和Spring,各自解决了传统Java Web应用程序中的不同问题,提升了开发效率和代码质量。下面将详细讲解这三个框架的技术起源及其核心功能。 首先,Struts框架诞生于解决JSP...

    java知识拾遗-三大框架的技术起源.docx

    Java开发中的三大框架——Struts、Hibernate和Spring,都是为了解决传统Java Web应用程序中存在的一系列问题而诞生的。这些框架分别针对MVC模式的实现、数据持久化和依赖管理给出了高效且灵活的解决方案。 Struts...

    java面试进阶讲义

    ### Java面试进阶讲义知识点总结 ...以上是对“Java面试进阶讲义”中各部分内容的详细总结,涵盖了 Java 语言基础知识、高级特性和常用框架的介绍,旨在帮助读者深入理解和掌握 Java 相关的知识和技术。

    thymeleaf-2.0.15.jar中文文档.zip

    # 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    javassist-3.25.0-GA.jar中文-英文对照文档.zip

    # 压缩文件中包含: 中文-英文对照文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文-英文对照文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    “计及源荷双重不确定性的虚拟电厂微网日前随机优化调度模型设计与实现(基于蒙特卡洛与概率距离法处理不确定性变量)”

    内容概要:本文详细介绍了利用MATLAB进行虚拟电厂日前随机优化调度的方法。首先,通过蒙特卡洛模拟生成大量光伏出力和负荷的随机场景,考虑到光伏出力和负荷预测的不确定性。接着,采用概率距离削减法将大量场景缩减为少数典型场景,确保计算效率的同时保留重要特征。然后,构建随机优化模型,将燃气轮机、储能、弃光等成本纳入目标函数,并设置严格的功率平衡和设备出力限制作为约束条件。最终,使用CPLEX求解器求解该混合整数规划问题,得到最优调度方案。实验结果显示,相比传统确定性优化,随机优化显著提高了系统的鲁棒性和经济效益。 适合人群:从事电力系统研究、虚拟电厂调度、智能电网优化的研究人员和技术人员。 使用场景及目标:适用于需要处理光伏出力和负荷预测不确定性的虚拟电厂调度场景,旨在提高调度方案的稳定性和经济性,降低运营风险。 其他说明:文中提供了详细的MATLAB代码片段,帮助读者理解和实现具体的算法步骤。此外,还给出了若干实用技巧和注意事项,如场景削减时的概率归一化、储能SOC约束的跨场景耦合等。

    aws-java-sdk-s3-1.12.249.jar中文文档.zip

    # 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    农产品销售管理系统 - Java课程设计项目 - SpringBoot毕业设计 - Vue+MySQL期末大作业

    农产品销售管理系统基于SpringBoot+MyBatisPlus+Vue+MySQL开发,专为Java课程设计、毕业设计及初学者打造。适合作为Java期末大作业或实战练手项目。采用IDEA开发,技术主流,代码规范,帮助快速掌握全栈开发技能,助力Java学习与答辩!

    aws-java-sdk-s3-1.12.254.jar中文-英文对照文档.zip

    # 压缩文件中包含: 中文-英文对照文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文-英文对照文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    物联网设备开发_蓝牙低能耗BLE技术_小米手环1非心率版数据读取与控制_实现Android平台下小米手环1代非心率版设备的蓝牙连接_步数数据获取_电量监测_震动控制功能_适用于An.zip

    物联网设备开发_蓝牙低能耗BLE技术_小米手环1非心率版数据读取与控制_实现Android平台下小米手环1代非心率版设备的蓝牙连接_步数数据获取_电量监测_震动控制功能_适用于An

    安卓系统开发_蓝牙低功耗监测与音频控制_支持AirPods全系列电量显示与入耳检测_为OPPO手机深度优化并兼容其他安卓设备的智能耳机管理助手_实现耳机离耳自动暂停和入耳自动播放功.zip

    安卓系统开发_蓝牙低功耗监测与音频控制_支持AirPods全系列电量显示与入耳检测_为OPPO手机深度优化并兼容其他安卓设备的智能耳机管理助手_实现耳机离耳自动暂停和入耳自动播放功

    基于.NET 6的WPF工具:集成OpenCVSharp与ReactiveUI,深度学习目标识别及3D点云数据处理

    内容概要:本文介绍了一个基于.NET 6 WPF框架构建的多功能图像处理与3D点云显示工具。该项目集成了ReactiveUI用于响应式UI设计,OpenCVSharp用于图像处理,以及HelixToolkit用于3D点云渲染。通过ReactiveUI实现了参数的实时调整和图像处理的即时反馈,如Canny边缘检测、高斯模糊等。此外,项目还包括了YOLOv4的目标检测功能,支持多种3D点云格式的导入和渲染。文中详细描述了各个模块的技术实现细节,包括性能优化和常见问题的解决方案。 适合人群:熟悉.NET和WPF框架的开发者,尤其是对图像处理和3D点云感兴趣的研发人员。 使用场景及目标:① 实时调整图像处理参数,快速验证算法效果;② 作为3D点云查看器,支持多种格式的点云数据;③ 集成YOLOv4进行目标检测,适用于计算机视觉领域的研究和开发。 其他说明:项目仍在持续改进中,源码中有许多待优化的地方,提供了丰富的扩展空间和技术挑战。

    人工势场法路径规划Matlab代码详解:涵盖两种方法的编写与注释,公式解释及A*、rrt等算法整合

    内容概要:本文探讨了机器人路径规划领域的多种经典算法,重点介绍了人工势场法的基本原理和Matlab实现方法。文中不仅提供了传统人工势场法的具体代码实现,还针对其易陷入局部最优的问题提出了改进措施,如引入随机扰动。此外,简要提及了A*和RRT算法的特点及其实现思路。通过详细的代码解析和参数调优指南,帮助读者更好地理解和应用这些算法。 适合人群:对机器人路径规划感兴趣的初学者以及有一定编程基础的研究人员。 使用场景及目标:适用于希望深入了解人工势场法的工作原理并掌握其具体实现的技术人员。目标是能够独立编写和优化路径规划算法,特别是在Matlab环境下进行实验和验证。 其他说明:文章附带了完整的代码片段和注释,便于读者实践操作。同时强调了不同算法的选择依据和应用场景,鼓励读者根据实际情况灵活选用合适的方法。

    威纶通触摸屏一机多屏程序

    内容概要:本文深入介绍了威纶通触摸屏一机多屏程序及其与FX3U系列PLC和MODBUS通讯的集成应用。首先,文章阐述了系统的硬件架构,即一个FX3U系列PLC搭配四个MT6051ip触摸屏的工作原理。接着,详细解析了威纶通模板的特点,特别是梯形图的详尽注释,便于理解和维护。此外,文章还探讨了PLC与上位机的MODBUS通讯设置,包括波特率、数据位、停止位等参数的具体配置方法。最后,强调了该系统的学习意义和借鉴价值,适用于新手和资深工程师。 适合人群:从事自动化控制领域的工程师和技术人员,尤其是那些希望深入了解PLC、触摸屏和MODBUS通讯的人群。 使用场景及目标:①帮助工程师快速掌握威纶通触摸屏的一机多屏配置;②提高PLC与触摸屏、上位机之间的通讯效率;③优化中小型企业生产线的监控系统,提升生产效率和稳定性。 其他说明:文中提供的实例和代码片段有助于读者更好地理解和实践相关技术,同时附带了一些实用的小技巧,如心跳检测和双看门狗设计,增强了系统的可靠性和容错能力。

    CNC雕刻机STM32F407源码详解:带详细中文注解与原理图解析

    内容概要:本文深入剖析了一款基于STM32F407的CNC雕刻机控制系统,涵盖硬件原理图和源码实现。首先介绍了步进电机驱动部分,详细解释了XYZ三轴的方向引脚配置及时序控制,确保电机平稳运行。接着讨论了PWM脉冲生成的核心配置,通过定时器精确控制雕刻精度,并解决了高速雕刻时的脉冲丢失问题。串口通信部分采用DMA+空闲中断,显著提升了数据处理效率。运动插补算法利用定时器触发DMA传输脉冲,实现高效的三轴联动。此外,文中还涉及了G代码解析、运动前瞻算法以及硬件设计中的防呆措施,如IO口的TVS二极管和RC滤波。最后,分享了一些调试经验和隐藏的开发彩蛋,如通过LED灯效显示工作状态和电流检测实现堵转保护。 适合人群:具备嵌入式开发基础,尤其是对STM32和CNC雕刻机感兴趣的开发者和技术爱好者。 使用场景及目标:①帮助开发者理解和实现CNC雕刻机的控制系统;②提供详细的硬件和软件设计方案,便于动手制作;③分享调试技巧和实战经验,提高系统的稳定性和可靠性。 阅读建议:本文不仅提供了详细的代码实现和硬件设计,还包括了许多实战经验和调试技巧,因此在阅读过程中应重点关注这些细节,并尝试复现相关功能。

    aws-java-sdk-s3-1.12.242.jar中文-英文对照文档.zip

    # 压缩文件中包含: 中文-英文对照文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文-英文对照文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    karson711_JKCircleViewDemo_12888_1745868188120.zip

    karson711_JKCircleViewDemo_12888_1745868188120

    医学超声成像_基于FPGA和CYUSB30的超声信号处理_超声波发射与AD采集_剪切波弹性成像_多通道数据同步传输_高速BULK传输_URAT状态控制_4096点扫描线采集_30.zip

    医学超声成像_基于FPGA和CYUSB30的超声信号处理_超声波发射与AD采集_剪切波弹性成像_多通道数据同步传输_高速BULK传输_URAT状态控制_4096点扫描线采集_30

    一些小游戏,比较好玩,windows10系统运行

    一些小游戏,比较好玩,windows10系统运行

Global site tag (gtag.js) - Google Analytics