java中三大框架struts/Hibernate/Spring,具体是怎样合作工作的?各自实现什么功能? struts2 hibernate spring 三大框架有...
java\u7684\u4e09\u5927\u6846\u67b6\u662f\u4ec0\u4e48,\u529f\u80fd\u5404\u662f\u4ec0\u4e48\u5e38\u8bf4\u7684\u4e09\u5927\u6846\u67b6\u6307\uff1aSSH\uff0c\u5373\uff1aSpring\u3001Struts\u3001Hibernate\u3002
Spring\uff1a\u529f\u80fd\u5f3a\u5927\u7684\u7ec4\u4ef6\u7c98\u5408\u6d4e\uff0c\u80fd\u591f\u5c06\u4f60\u7684\u6240\u6709\u7684java\u529f\u80fd\u6a21\u5757\u7528\u914d\u7f6e\u6587\u4ef6\u7684\u65b9\u5f0f\u7ec4\u5408\u8d77\u6765\u6210\u4e3a\u4e00\u4e2a\u5b8c\u6210\u7684\u5e94\u7528\u3002Spring\u662f\u4e00\u4e2a\u89e3\u51b3\u4e86\u8bb8\u591a\u5728J2EE\u5f00\u53d1\u4e2d\u5e38\u89c1\u7684\u95ee\u9898\u7684\u5f3a\u5927\u6846\u67b6\u3002Spring\u63d0\u4f9b\u4e86\u552f\u4e00\u7684\u6570\u636e\u8bbf\u95ee\u62bd\u8c61\uff0c\u5305\u62ec\u7b80\u5355\u548c\u6709\u6548\u7387\u7684JDBC\u6846\u67b6\uff0c\u6781\u5927\u7684\u6539\u8fdb\u4e86\u6548\u7387\u5e76\u4e14\u51cf\u5c11\u4e86\u53ef\u80fd\u7684\u9519\u8bef\u3002Spring\u7684\u6570\u636e\u8bbf\u95ee\u67b6\u6784\u8fd8\u96c6\u6210\u4e86Hibernate\u548c\u5176\u4ed6O/R mapping\u89e3\u51b3\u65b9\u6848\u3002Spring\u8fd8\u63d0\u4f9b\u4e86\u552f\u4e00\u7684\u4e8b\u52a1\u7ba1\u7406\u62bd\u8c61\uff0c\u5b83\u80fd\u591f\u5728\u5404\u79cd\u5e95\u5c42\u4e8b\u52a1\u7ba1\u7406\u6280\u672f\u3002
Struts\uff1a\u628aServlet\u3001JSP\u3001\u81ea\u5b9a\u4e49\u6807\u7b7e\u548c\u4fe1\u606f\u8d44\u6e90(message resources)\u6574\u5408\u5230\u4e00\u4e2a\u7edf\u4e00\u7684\u6846\u67b6\u4e2d\uff0c\u5f00\u53d1\u4eba\u5458\u5229\u7528\u5176\u8fdb\u884c\u5f00\u53d1\u65f6\u4e0d\u7528\u518d\u81ea\u5df1\u7f16\u7801\u5b9e\u73b0\u5168\u5957MVC\u6a21\u5f0f\uff0c\u6781\u5927\u7684\u8282\u7701\u4e86\u65f6\u95f4\uff0c\u6240\u4ee5\u8bf4\u5b83\u662f\u5927\u540d\u9f0e\u9f0e\u7684\u529f\u80fd\u5f3a\u5927\u7684MVC\u67b6\u6784\u3002
Hibernate\uff1a\u5f3a\u5927\u7684ORM\u5de5\u5177\uff0c\u7136\u540e\u5f88\u65b9\u4fbf\u5c06\u6570\u636e\u5e93\u8bb0\u5f55\u8f6c\u5316\u4e3ajava\u7684\u5b9e\u4f53\u5b9e\u4f8b\uff0c\u5c06java\u7684\u5b9e\u4f53\u5b9e\u4f8b\u5f88\u5bb9\u6613\u7684\u4fdd\u5b58\u5230\u6570\u636e\u5e93\u4e2d\uff0c\u5982\u679c\u4f60\u4e0d\u9700\u8981\u5f88\u590d\u6742\u7684\u6570\u636e\u5e93\u8bbf\u95ee\uff0c\u5229\u7528\u5b83\u4f60\u6839\u672c\u5c31\u4e0d\u7528\u4e86\u89e3\u6570\u636e\u5e93\u7684\u7ec6\u8282\u3002
\u62d3\u5c55\u8d44\u6599Java\u662f\u4e00\u79cd\u53ef\u4ee5\u64b0\u5199\u8de8\u5e73\u53f0\u5e94\u7528\u8f6f\u4ef6\u7684\u9762\u5411\u5bf9\u8c61\u7684\u7a0b\u5e8f\u8bbe\u8ba1\u8bed\u8a00\u3002Java \u6280\u672f\u5177\u6709\u5353\u8d8a\u7684\u901a\u7528\u6027\u3001\u9ad8\u6548\u6027\u3001\u5e73\u53f0\u79fb\u690d\u6027\u548c\u5b89\u5168\u6027\uff0c\u5e7f\u6cdb\u5e94\u7528\u4e8ePC\u3001\u6570\u636e\u4e2d\u5fc3\u3001\u6e38\u620f\u63a7\u5236\u53f0\u3001\u79d1\u5b66\u8d85\u7ea7\u8ba1\u7b97\u673a\u3001\u79fb\u52a8\u7535\u8bdd\u548c\u4e92\u8054\u7f51\uff0c\u540c\u65f6\u62e5\u6709\u5168\u7403\u6700\u5927\u7684\u5f00\u53d1\u8005\u4e13\u4e1a\u793e\u7fa4\u3002
Java\u7531\u56db\u65b9\u9762\u7ec4\u6210\uff1aJava\u7f16\u7a0b\u8bed\u8a00\uff0c\u5373\u8bed\u6cd5\u3002Java\u6587\u4ef6\u683c\u5f0f\uff0c\u5373\u5404\u79cd\u6587\u4ef6\u5939\u3001\u6587\u4ef6\u7684\u540e\u7f00\u3002Java\u865a\u62df\u673a(JVM)\uff0c\u5373\u5904\u7406*.class\u6587\u4ef6\u7684\u89e3\u91ca\u5668\u3002Java\u5e94\u7528\u7a0b\u5e8f\u63a5\u53e3(Java API)\u3002
\u8bf4struts2\u662f\u63a7\u5236\u5c42\u662f\u9519\u8bef\u7684\uff0c\u56e0\u4e3astruts2\u672c\u8eab\u5c31\u662f\u4e00\u4e2a\u6807\u51c6\u7684Web\u5c42\u7684MVC\u6846\u67b6\uff0c\u4e3b\u8981\u63a7\u5236\u7684\u662f"\u7528\u6237\u7684\u8bf7\u6c42\u2014\u2014\u7a0b\u5e8f\u7684\u5904\u7406\u2014\u2014\u7a0b\u5e8f\u7684\u8fd4\u56de"\u8fd9\u4e2a\u6d41\u8f6c\u8fc7\u7a0b\u3002
hibernate\u662f\u4e00\u4e2a\u6301\u4e45\u5c42\u7684\u6846\u67b6\uff0c\u4ed6\u5728JDBC\u4e0a\u8fdb\u884c\u7684\u8f7b\u91cf\u7ea7\u7684\u5c01\u88c5\uff0c\u662f\u7528\u6237\u53ef\u4ee5\u76f4\u63a5\u7528\u9762\u5411\u5bf9\u8c61\u7684\u65b9\u5f0f\u6765\u64cd\u4f5c\u5173\u7cfb\u578b\u6570\u636e\u5e93\u3002\u4f8b\u5982\uff0c\u5982\u679c\u4f60\u60f3\u4fdd\u5b58\u4e00\u4e2a\u5b66\u751f\u4fe1\u606f\uff0c\u4ee5\u524d\u53ef\u80fd\u9700\u8981\u5199\u4e00\u4e2ainsert\u8bed\u53e5\uff0c\u7528\u4e86hibernate\u5c31\u53ea\u7528\u8c03\u7528\u5b83\u7684save\u65b9\u6cd5\u5c31\u884c\u4e86\u3002
spring\u662f\u4e00\u4e2a\u591a\u5143\u5316\u7684\u6846\u67b6\uff0c\u5b83\u6709\u7c7b\u4f3cstruts\u7684MVC\u3002\u4f46\u662f\u4ed6\u6700\u4e3b\u8981\u7684\u529f\u80fd\u662f\u4f9d\u8d56\u6ce8\u5165\u548c\u9762\u5411\u5207\u9762\u7f16\u7a0b\u3002\u6240\u8c13\u4f9d\u8d56\u6ce8\u5165\u5c31\u662f\u8bf4\u4ee5\u524d\u4f60\u9700\u8981\u4e00\u4e2a\u5bf9\u8c61\u7684\u8bdd\u9700\u8981new\u4e00\u4e2a\uff0c\u8fd9\u6837\u52bf\u5fc5\u9020\u6210\u4ee3\u7801\u5199\u6b7b\u5230\u7a0b\u5e8f\u4e2d\u4e86\uff0c\u8fd9\u6837\u4e0d\u5229\u4e8e\u6539\u52a8\u3002\u4f9d\u8d56\u6ce8\u5165\u53ef\u4ee5\u628a\u4f60\u9700\u8981\u7684\u5bf9\u8c61\u81ea\u52a8\u751f\u6210\u4e86\u7ed9\u4f60\uff0c\u8fd9\u6837\u7528\u8d77\u6765\u5c31\u5f88\u7075\u6d3b\u4e86\u3002AOO\u5c31\u662f\u5728\u7a0b\u5e8f\u9700\u8981\u8fdb\u884c\u7edf\u4e00\u5904\u7406\u7684\u5730\u65b9\u8fdb\u884c\u5904\u7406\uff0c\u4f46\u662f\u53c8\u4e0d\u7528\u5199\u6b7b\u5728\u7a0b\u5e8f\u4e2d\u3002
数据持久层及Hibernate
Hibernate是一个数据持久层框架,是一种实现对象和关系之间映射(O/R Mapping)的工具,它对JDBC进行了轻量级的对象封装,使程序员可以使用对象编程思想来操作数据库。它不仅提供了从Java类到数据表的映射,也提供了数据查询和恢复机制。相对于使用JDBC和SQL来操作数据库,使用Hibernate能大大的提高实现的效率。Hibernate框架用配置文件的形式来定义Java对象和数据表之间的映射关系,同时在更深的层面将数据表之间的关系解释为Java对象之间的继承及包含等关系。通过使用HQL语句将复杂的关系算法用对象的方式描述,在很大程度上简化了对数据的查询,加快了开发的效率。在Hibernate中有一个简单而直观的API,用于对数据库所表示的对象执行查询。要创建或修改这些对象,只需在程序中与它们进行交互,然后告诉Hibernate保存即可。这样,大量封装持久化操作的业务逻辑不再需要编写烦琐的JDBC语句,从而使数据持久层得到了极大的简化。
用Struts实现MVC架构
MVC(Model-View-Controller)由Trygve Reenskaug提出,首先被应用在SmallTalk-80环境中,是许多交互和界面系统的构成基础。根据界面设计可变性的需求,MVC把交互系统的组成分解成模型、视图、控制器三部分。
模型(Model)是软件所处理问题逻辑在独立于外在显示内容和形式情况下的内在抽象,封装了问题的核心数据、逻辑和功能的计算关系,独立于具体的界面表达和I/O操作。视图(View)把表示模型数据及逻辑关系和状态的信息及特定形式展示给用户。它从模型获得显示信息,对于相同的信息可以有多个不同的显示形式或视图。控制器(Controller)是处理用户与软件的交互操作的,其职责是控制提供模型中任何变化的传播,确保用户界面于模型间的对应联系;它接受用户的输入,将输入反馈给模型,进而实现对模型的计算控制,是使模型和视图协调工作的部件。通常一个视图对应一个控制器。模型、视图与控制器的分离,使得一个模型可以具有多个显示视图。如果用户通过某个视图的控制器改变了模型的数据,所有其它依赖于这些数据的视图都应反映到这些变化。因此,无论何时发生了何种数据变化,控制器都会将变化通知所有的视图,导致显示的更新。这实际上是一种模型的变化-传播机制。
Struts框架最早是作为Apache Jakarta项目的组成部分问世运做,它继承了MVC的各项特性,并根据J2EE的特点,做了相应的变化与扩展。Struts框架很好的结合了Jsp,Java Servlet,Java Bean,Taglib等技术。在Struts中,承担MVC中控制器角色的是ActionServlet。ActionServlet是一个通用的控制组件。这个控制组件提供了处理所有发送到Struts的HTTP请求的入口点。它截取和分发这些请求到相应的动作类(这些动作类都是Action类的子类)。另外控制组件也负责用相应的请求参数填充Action Form(FromBean),并传给动作类(ActionBean)。动作类访问核心商业逻辑,即访问Java Bean或调用EJB。最后动作类把控制权传给后续的JSP文件,由JSP文件生成视图。所有这些控制逻辑利用Struts-config.xml文件来配置。在Struts框架中,视图主要由JSP生成页面完成,Struts提供丰富的JSP标签库,这有利于分开表现逻辑和程序逻辑。模型以一个或多个Java Bean的形式存在。在Struts中,主要存在三种Bean,分别是:Action,ActionForm,EJB或者Java Bean。
Struts框架没有具体定义模型层的实现,在实际开发中,模型层通常是和业务逻辑紧密相连的,并且要对底层数据进行操作。下面介绍一种开发策略,将Hibernate引入到Struts框架的模型层中,使用它来进行数据封装和映射,提供持久化的支持。
就我个人理解,以登录为例,当我们输入用户名和密码后,点击submit提交时,浏览器请求道服务器,服务器端有个actionServlet ,他会根据请求的不同找到对应的servlet来处理,一般是到了struts.xml中,struts.xml文件中有相应的action,由于使用了spring,所有struts.xml 的class属性,只是一个ID,他是spring注入的,再到spring的配置文件中,找到对应action的类,action会掉用service层,service层会导入一个bean这个bean也是在spring已经注入的并且bean里面的属性都是和bean.hbm.xml对应的,service通过这个bean对象调用dao,而后dao层就可以使用hibernate对数据库中进行操作
spring配置文件是会注入数据库连接的
简单说:struts接收页面的请求然后你请求的路径会由spring给你创建,一步一步的注入,知道你的任务完成,spring还可以管理hibernate的数据库连接,以及事物,等等。
先把struts和Spring整合到一起,然后把hibernate整合到Spring里。Struts主要控制跳转,Spring说白了你就不用总是 A a = new A();了,hibernate你就不用写老长的sql了!
理解不深,希望可以帮到你!
struts负责前台的呈现层,hibernate负责后台数据库的持久层,spring则是处理业务逻辑,具体的你就下载点文档看看,当你用ssh完成一个项目时你就会有一定的了解的
绛旓細Java闇瑕佸涔犵殑妗嗘灦鏈夊緢澶氾紝渚嬪锛歋pring銆Struts銆丠ibernate銆丏ubbo銆丮aven銆丷abbitMQ銆丒hcache銆丷edis銆丼hiro绛夈備笅闈㈠叿浣撲粙缁岼ava鏈閲嶈鐨勪笁澶涓绘祦妗嗘灦锛1銆丼pring锛氬姛鑳藉己澶х殑缁勪欢绮樺悎娴庯紝鑳藉灏嗕綘鐨勬墍鏈夌殑java鍔熻兘妯″潡鐢ㄩ厤缃枃浠剁殑鏂瑰紡缁勫悎璧锋潵锛屾垚涓轰竴涓畬鎴愮殑搴旂敤 銆2銆丼truts锛氬姛鑳藉己澶х殑MVC鏋舵瀯 銆3銆...
绛旓細闂涓:java鐨勪笁澶ф鏋鏄粈涔,鍔熻兘鍚勬槸浠涔 涓夊ぇ妗嗘灦鏄敤鏉ュ紑鍙憌eb搴旂敤绋嬪簭涓娇鐢ㄧ殑. Struts:鍩轰簬MVC鐨勫厖褰撲簡鍏朵腑鐨勮瘯鍥惧眰鍜屾帶鍒跺櫒 Hibernate:鍋氭寔涔呭寲鐨,瀵笿DBC杞婚噺绾х殑灏佽,浣垮緱鎴戜滑鑳借繃闈㈠悜瀵硅薄鐨勭哗浣滄暟鎹簱 Spring: 閲囩敤浜嗘帶鍒跺弽杞殑鎶鏈,绠$悊Bean,闄嶄綆浜嗗悇灞備箣闂寸殑鑰﹀悎. 闂浜:JAVA涓夊ぇ妗嗘灦鏄粈涔 甯歌...
绛旓細Java妗嗘灦灏辨槸涓浜涚被鍜屾帴鍙g殑闆嗗悎锛岄氳繃杩欎簺绫诲拰鎺ュ彛鍗忚皟鏉ュ畬鎴愪竴绯诲垪鐨勭▼搴忓疄鐜般侸ava妗嗘灦鍙互鍒嗕负涓夊眰锛氳〃绀哄眰锛屼笟鍔″眰鍜岀墿鐞嗗眰銆傛嫇灞曪細Java涓夊ぇ鍩烘湰妗嗘灦 Spring锛氬姛鑳藉己澶х殑缁勪欢绮樺悎娴庯紝鑳藉灏嗕綘鐨勬墍鏈夌殑java鍔熻兘妯″潡鐢ㄩ厤缃枃浠剁殑鏂瑰紡缁勫悎璧锋潵锛屾垚涓轰竴涓畬鎴愮殑搴旂敤 銆Struts锛氬姛鑳藉己澶х殑MVC鏋舵瀯 銆侶ibernate...
绛旓細涓夊ぇ妗嗘灦鍙互甯姪鎴戜滑鍑忓皯浠g爜鍐椾綑锛屾彁楂樿繍琛岄熷害锛屼究浜庣淮鎶わ紝瑙勮寖缂栫▼\x0d\x0astruts涓昏璐熻矗琛ㄧず灞鐨鏄剧ず锛宻pring鍒╃敤瀹冪殑IOC鍜孉OP鏉ュ鐞嗘帶鍒朵笟鍔★紙璐熻矗瀵规暟鎹簱鐨勬搷浣滐級锛宧ibernate涓昏浣滅敤鏄暟鎹殑鎸佷箙鍖栧埌鏁版嵁搴揬x0d\x0a涓銆丼pring\x0d\x0aSpring鏄竴涓В鍐充簡璁稿鍦↗2EE寮鍙戜腑甯歌鐨勯棶棰樼殑寮哄ぇ...
绛旓細鍥犳锛屾棤璁轰綍鏃跺彂鐢熶簡浣曠鏁版嵁鍙樺寲锛屾帶鍒跺櫒閮戒細灏嗗彉鍖栭氱煡鎵鏈夌殑瑙嗗浘锛屽鑷存樉绀虹殑鏇存柊銆傝繖瀹為檯涓婃槸涓绉嶆ā鍨嬬殑鍙樺寲-浼犳挱鏈哄埗銆Struts妗嗘灦鏈鏃╂槸浣滀负Apache Jakarta椤圭洰鐨勭粍鎴愰儴鍒嗛棶涓栬繍鍋氾紝瀹冪户鎵夸簡MVC鐨勫悇椤圭壒鎬э紝骞舵牴鎹甁2EE鐨勭壒鐐癸紝鍋氫簡鐩稿簲鐨勫彉鍖栦笌鎵╁睍銆係truts妗嗘灦寰堝ソ鐨勭粨鍚堜簡Jsp锛Java Servlet锛孞ava Bean...
绛旓細Java 鐨勪笁澶ф鏋鍒嗗埆鏄 Spring銆丠ibernate 鍜 Struts銆備粠鍏跺簲鐢ㄨ寖鍥村拰寮鍙戞晥鐜囩殑瑙掑害鏉ョ湅锛孲pring 妗嗘灦鏇撮傚悎涓轰紒涓氱骇 Java 搴旂敤绋嬪簭鎻愪緵瀹屾暣鐨勮В鍐虫柟妗堬紝鍥犳鍦 Java 妗嗘灦涓渶瀹炵敤鐨勬槸 Spring 妗嗘灦 銆
绛旓細浼樼偣鏄細鍦Java閲岄潰锛屾垜浠彲浠ョ洿鎺ラ氳繃JDBC鏉ヨ闂暟鎹簱锛岃屼笖杩愯鏁堢巼楂橈紝浣嗘槸鍗磋鍦↗ava浠g爜涓祵濂楀ぇ閲忕殑SQL璇彞锛屼娇鍚庢湡鐨勭淮鎶ゅ洶闅撅紝鑰孒ibernate瀵笿DBC杩涜鐨勮交閲忕骇鐨勫皝瑁咃紝浣跨敤鏂逛究绠鍗曪紝骞朵笖鏀寔澶氱WEB鏈嶅姟鍣ㄥ拰鏁版嵁搴擄紝鍙敤浜嶫ava椤圭洰鎴朩EB椤圭洰銆Struts鏄疄鐜扮殑MVC鍗矼odel2鐨妗嗘灦銆備粬鐨勬湁鐐瑰湪浜庤兘澶熷姞蹇...
绛旓細Hibernate鍙互搴旂敤鍦ㄤ换浣曚娇鐢↗DBC鐨勫満鍚堬紝鏃㈠彲浠ュ湪Java鐨瀹㈡埛绔▼搴忓疄鐢紝涔熷彲浠ュ湪Servlet/JSP鐨刉eb搴旂敤涓娇鐢紝鏈鍏烽潻鍛芥剰涔夌殑鏄紝Hibernate鍙互鍦ㄥ簲鐢‥JB鐨凧2EE鏋舵瀯涓彇浠MP锛屽畬鎴愭暟鎹寔涔呭寲鐨勯噸浠汇 JAVA涓夊ぇ妗嗘灦鐢ㄦ潵鍋歐EN搴旂敤銆 struts涓昏璐熻矗琛ㄧず灞傜殑鏄剧ず spring鍒╃敤瀹冪殑IOC鍜孉OP鏉ュ鐞嗘帶鍒朵笟鍔★紙璐熻矗瀵规暟...
绛旓細java妗嗘灦瀹炲湪鏄お澶氫簡锛岀綉涓婁竴鎶勪竴澶ф锛屾牴鏈氨浜嗚В涓嶅埌浠涔堛傛垜杩樻槸浠ユ垜鐨勭粡楠屾潵璇翠竴涓媕2ee鐨勬鏋銆1.棣栧厛鍔涙帹struts2妗嗘灦锛岃繖鏄渶缁忓吀鐨勬鏋(鍙互璇存病鏈夆滀箣涓鈥)銆傚彲浠ュ府浣犲揩閫熸惌寤哄嚭涓涓狹VC妯″瀷鍑烘潵銆(娉細struts1宸茬粡寰堝皯鐢ㄤ簡锛屼笖闂涔熷緢澶氾紝寮虹儓鎺ㄨ崘浣跨敤struts2).2.Spring妗嗘灦锛岃繖鏄帓琛岀浜...
绛旓細鎵璋涓夊ぇ妗嗘灦灏辨槸鎸嘢SH妗嗘灦锛屽嵆锛struts2,spring,hibernate锛