web开发中三层结构和四层结构分别指哪三层和哪四层 javaweb开发中三层架构的一个困惑?
Web\u5f00\u53d1\u4e2d\u4e09\u5c42\u67b6\u6784\u662f\u54ea\u4e09\u5c42\uff1f\u3002\u3002\u5206\u522b\u653e\u4e9b\u4ec0\u4e48\uff1f\u3002\u3002\u7f51\u4e0a\u641c\u7d22\u7684,\u4e0d\u5bf9\u6211\u5728\u627e :
java \u4e09\u5c42\u67b6\u6784ssh
\u4e00\u4e2aspring2.5+hibernate3.2+struts2.0\u7ec4\u5408\u6846\u67b6\uff0c\u4f7f\u7528spring\u7684 IoC\u6765\u7ba1\u7406\u5e94\u7528\u7684 \u6240\u6709bean\uff0c\u5305\u62ecstruts2\u7684 action\uff0c\u5145\u5206\u53d1\u6325\u4e86spring\u8f7b\u91cf\u7ea7\u6846\u67b6\u7684 \u4f18\u52bf\u3002
\u6458 \u8981: \u9488\u5bf9\u5f53\u524dWeb\u5e94\u7528\u7a0b\u5e8f\u5f00\u53d1\u9762\u4e34\u7684\u95ee\u9898\uff0c\u7ed3\u5408\u76ee\u524d\u6bd4\u8f83\u6d41\u884c\u7684\u5f00\u6e90\u6846\u67b6Spring\u3001Struts\u548cHibernate\uff0c\u63d0\u51fa\u4e86\u4e00\u79cd\u5f00\u53d1J2EE Web\u5e94\u7528\u7684\u8f7b\u91cf\u7ea7\u89e3\u51b3\u65b9\u6848\uff0c\u4ee5\u5e2e\u52a9\u5f00\u53d1\u4eba\u5458\u5728\u77ed\u671f\u5185\u642d\u5efa\u7ed3\u6784\u6e05\u6670\u3001\u53ef\u590d\u7528\u6027\u597d\u3001\u7ef4\u62a4\u65b9\u4fbf\u7684Web\u5e94\u7528\u7a0b\u5e8f\u3002\u5e76\u4e14\uff0c\u901a\u8fc7\u6848\u4f8b\u5177\u4f53\u8bf4\u660e\u4e86\u5982\u4f55\u5c06\u8fd9\u4e00\u65b9\u6848\u5e94\u7528\u5230\u5b9e\u9645\u9879\u76ee\u4e2d\u3002
\u5173\u952e\u8bcd: J2EE MVC Struts Spring Hibernate
\u5927\u578b\u4f01\u4e1a\u7ea7Web\u5e94\u7528\u7cfb\u7edf\u7684\u5f00\u53d1\u901a\u5e38\u8981\u6c42\u6709\u4e00\u4e2a\u826f\u597d\u7684\u8f6f\u4ef6\u67b6\u6784\u3001\u4fbf\u4e8e\u534f\u4f5c\u5f00\u53d1\u548c\u6269\u5c55\u5347\u7ea7\uff0c\u800c\u4f20\u7edf\u7684\u5f00\u53d1\u6a21\u5f0f\u4e0d\u80fd\u5f88\u597d\u5730\u6ee1\u8db3\u8fd9\u4e9b\u8981\u6c42\u3002\u672c\u6587\u9488\u5bf9\u5f53\u524dWeb\u5e94\u7528\u7a0b\u5e8f\u5f00\u53d1\u9762\u4e34\u7684\u95ee\u9898\uff0c\u7ed3\u5408\u76ee\u524d\u6bd4\u8f83\u6d41\u884c\u7684\u5f00\u6e90\u6846\u67b6SSH\uff08Spring\u3001Struts\u3001Hibernate)\uff0c\u63d0\u51fa\u4e00\u79cd\u5f00\u53d1J2EE \u4f01\u4e1a\u7ea7Web\u5e94\u7528\u7684\u8f7b\u91cf\u7ea7\u89e3\u51b3\u65b9\u6848\uff0c\u5e76\u901a\u8fc7\u6848\u4f8b\u5177\u4f53\u8bf4\u660e\u5982\u4f55\u5c06\u8fd9\u4e00\u65b9\u6848\u5e94\u7528\u5230\u5b9e\u9645\u9879\u76ee\u4e2d\u3002
1 \u6846\u67b6\u6280\u672f
\u8457\u540d\u7684\u8f6f\u4ef6\u5927\u5e08Ralph Johnson\u5bf9\u6846\u67b6(Framework)\u8fdb\u884c\u4e86\u5982\u4e0b\u7684\u5b9a\u4e49\uff1a \u6846\u67b6\u662f\u6574\u4e2a\u7cfb\u7edf\u6216\u7cfb\u7edf\u7684\u4e00\u90e8\u5206\u7684\u53ef\u91cd\u7528\u8bbe\u8ba1\uff0c\u7531\u4e00\u7ec4\u62bd\u8c61\u7684\u7c7b\u53ca\u5176\u5b9e\u4f8b\u95f4\u7684\u76f8\u4e92\u4f5c\u7528\u65b9\u5f0f\u7ec4\u6210[1] \u3002
\u6846\u67b6\u4e00\u822c\u5177\u6709\u5373\u63d2\u5373\u7528\u7684\u53ef\u91cd\u7528\u6027\u3001\u6210\u719f\u7684\u7a33\u5b9a\u6027\u4ee5\u53ca\u826f\u597d\u7684\u56e2\u961f\u534f\u4f5c\u6027\u3002J2EE\u590d\u6742\u7684\u591a\u5c42\u7ed3\u6784\u51b3\u5b9a\u4e86\u5927\u578b\u7684J2EE\u9879\u76ee\u9700\u8981\u8fd0\u7528\u6846\u67b6\u548c\u8bbe\u8ba1\u6a21\u5f0f\u6765\u63a7\u5236\u8f6f\u4ef6\u8d28\u91cf\u3002\u76ee\u524d\uff0c\u5e02\u573a\u4e0a\u51fa\u73b0\u4e86\u4e00\u4e9b\u5546\u4e1a\u7684\u3001\u5f00\u6e90\u7684\u57fa\u4e8eJ2EE\u7684\u5e94\u7528\u6846\u67b6\uff0c\u5176\u4e2d\u4e3b\u6d41\u7684\u6846\u67b6\u6280\u672f\u6709\uff1a\u57fa\u4e8eMVC\u6a21\u5f0f\u7684Struts\u6846\u67b6\u548c\u57fa\u4e8eIoC\u6a21\u5f0f\u7684 Spring\u6846\u67b6\u4ee5\u53ca\u5bf9\u8c61/\u5173\u7cfb\u6620\u5c04\u6846\u67b6Hibernate\u7b49\u3002
1.1 \u8868\u793a\u5c42\u6846\u67b6Struts
Struts\u662f\u4e00\u4e2a\u5728JSP Model2\u57fa\u7840\u4e0a\u5b9e\u73b0\u7684MVC\u6846\u67b6\uff0c\u4e3b\u8981\u5206\u4e3a\u6a21\u578b(Model)\u3001\u89c6\u56fe(Viewer)\u548c\u63a7\u5236\u5668(Controller)\u4e09\u90e8\u5206\uff0c\u5176\u4e3b\u8981\u7684\u8bbe\u8ba1\u7406\u5ff5\u662f\u901a\u8fc7\u63a7\u5236\u5668\u5c06\u8868\u73b0\u903b\u8f91\u548c\u4e1a\u52a1\u903b\u8f91\u89e3\u8026\uff0c\u4ee5\u63d0\u9ad8\u7cfb\u7edf\u7684\u53ef\u7ef4\u62a4\u6027\u3001\u53ef\u6269\u5c55\u6027\u548c\u53ef\u91cd\u7528\u6027[2] \u3002Struts\u6846\u67b6\u7684\u4f53\u7cfb\u7ed3\u6784\u5982\u56fe1\u6240\u793a\u3002
\u3000\u3000\u4e0b\u9762\u5c31\u56fe1\u6240\u793a\u7684\u4f53\u7cfb\u7ed3\u6784\u56fe\u5206\u6790Struts\u6846\u67b6\u4e2d\u7684MVC\u7ec4\u4ef6\u3002
\uff081\uff09\u89c6\u56fe\uff1a\u89c6\u56fe\u90e8\u5206\u4e3b\u8981\u7531JSP\u9875\u9762\u7ec4\u6210\uff0c\u5176\u4e2d\u6ca1\u6709\u6d41\u7a0b\u903b\u8f91\u3001\u4e1a\u52a1\u903b\u8f91\u548c\u6a21\u578b\u4fe1\u606f\uff0c\u53ea\u6709\u6807\u8bb0\u3002Struts\u81ea\u8eab\u5305\u542b\u4e86\u4e00\u7ec4\u6807\u8bb0\u5e93(TagLib)\uff0c\u8fd9\u4e5f\u662fStruts\u7684\u7cbe\u534e\u4e4b\u4e00\uff0c\u7075\u6d3b\u8fd0\u7528\u5b83\u4eec\u53ef\u4ee5\u7b80\u5316JSP\u9875\u9762\u7684\u4ee3\u7801\uff0c\u63d0\u9ad8\u5f00\u53d1\u6548\u7387\u3002
\uff082\uff09\u63a7\u5236\u5668\uff1aStruts\u4e2d\u7684Controller\u4e3b\u8981\u662f\u5176\u81ea\u8eab\u63d0\u4f9b\u7684ActionServlet\u3002ActionServlet\u63a5\u6536\u6240\u6709\u6765\u81ea\u5ba2\u6237\u7aef\u7684\u8bf7\u6c42\u5e76\u6839\u636e\u914d\u7f6e\u6587\u4ef6(struts-config.xml)\u4e2d\u7684\u5b9a\u4e49\u5c06\u63a7\u5236\u8f6c\u79fb\u5230\u9002\u5f53\u7684Action\u5bf9\u8c61\u3002
\uff083\uff09\u6a21\u578b\uff1aStruts\u6ca1\u6709\u5b9a\u4e49\u5177\u4f53Model\u5c42\u7684\u5b9e\u73b0\uff0cModel\u5c42\u901a\u5e38\u662f\u548c\u4e1a\u52a1\u903b\u8f91\u7d27\u5bc6\u76f8\u5173\u7684\uff0c\u6709\u6301\u7eed\u5316\u7684\u8981\u6c42\u3002\u76ee\u524d\u5728\u5546\u4e1a\u9886\u57df\u548c\u5f00\u6e90\u4e16\u754c\uff0c\u90fd\u6709\u4e00\u4e9b\u4f18\u79c0\u7684\u5de5\u5177\u53ef\u4ee5\u4e3aModel\u5c42\u7684\u5f00\u53d1\u63d0\u4f9b\u4fbf\u5229\u3002
1.2 \u4e1a\u52a1\u903b\u8f91\u5c42\u6846\u67b6Spring
Spring\u662f\u4e00\u4e2a\u89e3\u51b3\u4e86\u8bb8\u591aJ2EE\u5f00\u53d1\u4e2d\u5e38\u89c1\u95ee\u9898\u5e76\u80fd\u591f\u66ff\u4ee3EJB\u6280\u672f\u7684\u5f3a\u5927\u7684\u8f7b\u91cf\u7ea7\u6846\u67b6\u3002\u8fd9\u91cc\u6240\u8bf4\u7684\u8f7b\u91cf\u7ea7\u6307\u7684\u662f Spring\u6846\u67b6\u672c\u8eab\uff0c\u800c\u4e0d\u662f\u6307Spring\u53ea\u80fd\u7528\u4e8e\u8f7b\u91cf\u7ea7\u7684\u5e94\u7528\u5f00\u53d1\u3002Spring\u7684\u8f7b\u76c8\u4f53\u73b0\u5728\u5176\u6846\u67b6\u672c\u8eab\u7684\u57fa\u7840\u7ed3\u6784\u4ee5\u53ca\u5bf9\u5176\u4ed6\u5e94\u7528\u5de5\u5177\u7684\u652f\u6301\u548c\u88c5\u914d\u80fd\u529b\u3002\u4e0eEJB\u8fd9\u79cd\u5e9e\u7136\u5927\u7269\u76f8\u6bd4\uff0cSpring\u53ef\u4f7f\u7a0b\u5e8f\u7814\u53d1\u4eba\u5458\u628a\u5404\u4e2a\u6280\u672f\u5c42\u6b21\u4e4b\u95f4\u7684\u98ce\u9669\u964d\u4f4e\u3002
Spring\u6846\u67b6\u7684\u6838\u5fc3\u662f\u63a7\u5236\u7ffb\u8f6cIoC(Inversion of Control)/\u4f9d\u8d56\u6ce8\u5165DI(Dependence Injection)\u673a\u5236\u3002IoC\u662f\u6307\u7531\u5bb9\u5668\u4e2d\u63a7\u5236\u7ec4\u4ef6\u4e4b\u95f4\u7684\u5173\u7cfb\uff08\u8fd9\u91cc\uff0c\u5bb9\u5668\u662f\u6307\u4e3a\u7ec4\u4ef6\u63d0\u4f9b\u7279\u5b9a\u670d\u52a1\u548c\u6280\u672f\u652f\u6301\u7684\u4e00\u4e2a\u6807\u51c6\u5316\u7684\u8fd0\u884c\u65f6\u7684\u73af\u5883\uff09\u800c\u975e\u4f20\u7edf\u5b9e\u73b0\u4e2d\u7531\u7a0b\u5e8f\u4ee3\u7801\u76f4\u63a5\u64cd\u63a7\uff0c\u8fd9\u79cd\u5c06\u63a7\u5236\u6743\u7531\u7a0b\u5e8f\u4ee3\u7801\u5230\u5916\u90e8\u5bb9\u5668\u7684\u8f6c\u79fb\uff0c\u79f0\u4e3a\u201c\u7ffb\u8f6c\u201d[3] \u3002DI\u662f\u5bf9IoC\u66f4\u5f62\u8c61\u7684\u89e3\u91ca\uff0c\u5373\u7531\u5bb9\u5668\u5728\u8fd0\u884c\u671f\u95f4\u52a8\u6001\u5730\u5c06\u4f9d\u8d56\u5173\u7cfb(\u5982\u6784\u9020\u53c2\u6570\u3001\u6784\u9020\u5bf9\u8c61\u6216\u63a5\u53e3)\u6ce8\u5165\u5230\u7ec4\u4ef6\u4e4b\u4e2d[3] \u3002 Spring\u91c7\u7528\u8bbe\u503c\u6ce8\u5165(\u4f7f\u7528Setter\u65b9\u6cd5\u5b9e\u73b0\u4f9d\u8d56)\u548c\u6784\u9020\u5b50\u6ce8\u5165(\u5728\u6784\u9020\u65b9\u6cd5\u4e2d\u5b9e\u73b0\u4f9d\u8d56)\u7684\u673a\u5236\uff0c\u901a\u8fc7\u914d\u7f6e\u6587\u4ef6\u7ba1\u7406\u7ec4\u5efa\u7684\u534f\u4f5c\u5bf9\u8c61\uff0c\u521b\u5efa\u53ef\u4ee5\u6784\u9020\u7ec4\u4ef6\u7684IoC\u5bb9\u5668\u3002\u8fd9\u6837\uff0c\u4e0d\u9700\u8981\u7f16\u5199\u5de5\u5382\u6a21\u5f0f\u3001\u5355\u4f8b\u6a21\u5f0f\u6216\u8005\u5176\u4ed6\u6784\u9020\u7684\u65b9\u6cd5\uff0c\u5c31\u53ef\u4ee5\u901a\u8fc7\u5bb9\u5668\u76f4\u63a5\u83b7\u53d6\u6240\u9700\u7684\u4e1a\u52a1\u7ec4\u4ef6\u3002Spring\u6846\u67b6\u7684\u7ed3\u6784\u5982\u56fe2\u6240\u793a\u3002
\u3000 Spring\u6846\u67b6\u7531\u4e03\u4e2a\u5b9a\u4e49\u660e\u786e\u7684\u6a21\u5757\u7ec4\u6210\uff0c\u4e14\u6bcf\u4e2a\u6a21\u5757\u6216\u7ec4\u4ef6\u90fd\u53ef\u4ee5\u5355\u72ec\u5b58\u5728\uff0c\u6216\u8005\u4e0e\u5176\u4ed6\u4e00\u4e2a\u6216\u591a\u4e2a\u6a21\u5757\u8054\u5408\u5b9e\u73b0\u3002Spring Core Container\u662f\u4e00\u4e2a\u7528\u6765\u7ba1\u7406\u4e1a\u52a1\u7ec4\u4ef6\u7684IoC\u5bb9\u5668\uff0c\u662fSpring\u5e94\u7528\u7684\u6838\u5fc3\uff1bSpring DAO\u548cSpring ORM\u4e0d\u4ec5\u63d0\u4f9b\u6570\u636e\u8bbf\u95ee\u7684\u62bd\u8c61\u6a21\u5757\uff0c\u8fd8\u96c6\u6210\u4e86\u5bf9Hibernate\u3001JDO\u548ciBatis\u7b49\u6d41\u884c\u7684\u5bf9\u8c61\u5173\u7cfb\u6620\u5c04\u6846\u67b6\u7684\u652f\u6301\u6a21\u5757\uff0c\u5e76\u4e14\u63d0\u4f9b\u4e86\u7f13\u51b2\u8fde\u63a5\u6c60\u3001\u4e8b\u52a1\u5904\u7406\u7b49\u91cd\u8981\u7684\u670d\u52a1\u529f\u80fd\uff0c\u4fdd\u8bc1\u4e86\u7cfb\u7edf\u7684\u6027\u80fd\u548c\u6570\u636e\u7684\u5b8c\u6574\u6027\uff1bSprnig Web\u6a21\u5757\u63d0\u4f9b\u4e86Web\u5e94\u7528\u7684\u4e00\u4e9b\u62bd\u8c61\u5c01\u88c5\uff0c\u53ef\u4ee5\u5c06Struts\u3001Webwork\u7b49Web\u6846\u67b6\u4e0eSpring\u6574\u5408\u6210\u4e3a\u9002\u7528\u4e8e\u81ea\u5df1\u7684\u89e3\u51b3\u65b9\u6848\u3002
Spring\u6846\u67b6\u53ef\u4ee5\u6210\u4e3a\u4f01\u4e1a\u7ea7\u5e94\u7528\u7a0b\u5e8f\u4e00\u7ad9\u5f0f\u7684\u89e3\u51b3\u65b9\u6848\uff0c\u540c\u65f6\u5b83\u4e5f\u662f\u6a21\u5757\u5316\u7684\u6846\u67b6\uff0c\u5141\u8bb8\u5f00\u53d1\u4eba\u5458\u81ea\u7531\u5730\u6311\u9009\u9002\u5408\u81ea\u5df1\u5e94\u7528\u7684\u6a21\u5757\u8fdb\u884c\u5f00\u53d1\u3002Spring\u6846\u67b6\u5f0f\u662f\u4e00\u4e2a\u677e\u8026\u5408\u7684\u6846\u67b6\uff0c\u6846\u67b6\u7684\u90e8\u5206\u8026\u5408\u5ea6\u88ab\u8bbe\u8ba1\u4e3a\u6700\u5c0f\uff0c\u5728\u5404\u4e2a\u5c42\u6b21\u4e0a\u5177\u4f53\u9009\u7528\u54ea\u4e2a\u6846\u67b6\u53d6\u51b3\u4e8e\u5f00\u53d1\u8005\u7684\u9700\u8981\u3002
1.3 \u6570\u636e\u6301\u4e45\u5c42\u6846\u67b6Hibernate
O/R mapping\u6280\u672f\u662f\u4e3a\u4e86\u89e3\u51b3\u5173\u7cfb\u578b\u6570\u636e\u5e93\u548c\u9762\u5411\u5bf9\u8c61\u7684\u7a0b\u5e8f\u8bbe\u8ba1\u4e4b\u95f4\u4e0d\u5339\u914d\u7684\u77db\u76fe\u800c\u4ea7\u751f\u7684\u3002Hibernate\u662f\u76ee\u524d\u6700\u4e3a\u6d41\u884c\u7684O/R mapping\u6846\u67b6\uff0c\u5b83\u5728\u5173\u7cfb\u578b\u6570\u636e\u5e93\u548cJava\u5bf9\u8c61\u4e4b\u95f4\u505a\u4e86\u4e00\u4e2a\u81ea\u52a8\u6620\u5c04\uff0c\u4f7f\u5f97\u7a0b\u5e8f\u5458\u53ef\u4ee5\u4ee5\u975e\u5e38\u7b80\u5355\u7684\u65b9\u5f0f\u5b9e\u73b0\u5bf9\u6570\u636e\u5e93\u7684\u64cd\u4f5c\u3002Hibernate\u5de5\u4f5c\u539f\u7406\u5982\u56fe3\u6240\u793a\u3002
\u3000 Hibernate\u901a\u8fc7\u5bf9JDBC\u7684\u5c01\u88c5\uff0c\u5411\u7a0b\u5e8f\u5458\u5c4f\u853d\u4e86\u5e95\u5c42\u7684\u6570\u636e\u5e93\u64cd\u4f5c\uff0c\u4f7f\u7a0b\u5e8f\u5458\u4e13\u6ce8\u4e8eOO\u7a0b\u5e8f\u7684\u5f00\u53d1\uff0c\u6709\u52a9\u4e8e\u63d0\u9ad8\u5f00\u53d1\u6548\u7387\u3002\u7a0b\u5e8f\u5458\u8bbf\u95ee\u6570\u636e\u5e93\u6240\u9700\u8981\u505a\u7684\u5c31\u662f\u4e3a\u6301\u4e45\u5316\u5bf9\u8c61\u7f16\u5236xml\u6620\u5c04\u6587\u4ef6[4] \u3002
\u5e95\u5c42\u6570\u636e\u5e93\u7684\u6539\u53d8\u53ea\u9700\u8981\u7b80\u5355\u5730\u66f4\u6539\u521d\u59cb\u5316\u914d\u7f6e\u6587\u4ef6(hibernate.cfg.xml\u6216\u8005hibernate.properties)\u5373\u53ef\uff0c\u4e0d\u4f1a\u5bf9\u5e94\u7528\u7a0b\u5e8f\u4ea7\u751f\u5f71\u54cd\u3002
Hibernate\u6709\u81ea\u5df1\u7684\u9762\u5411\u5bf9\u8c61\u7684\u67e5\u8be2\u8bed\u8a00HQL\uff0cHQL\u529f\u80fd\u5f3a\u5927\uff0c\u652f\u6301\u76ee\u524d\u5927\u90e8\u5206\u4e3b\u6d41\u7684\u6570\u636e\u5e93\uff0c\u5982Oracle\u3001DB2\u3001MySQL\u3001 Microsoft SQL Server\u7b49\uff0c\u662f\u76ee\u524d\u5e94\u7528\u6700\u5e7f\u6cdb\u7684O/R\u6620\u5c04\u5de5\u5177\u3002Hibernate\u4e3a\u5feb\u901f\u5f00\u53d1\u5e94\u7528\u7a0b\u5e8f\u63d0\u4f9b\u4e86\u5e95\u5c42\u7684\u652f\u6301\u3002
2 \u57fa\u4e8eSSH\u7ec4\u5408\u6846\u67b6\u7684Web\u5e94\u7528\u6a21\u578b\u8bbe\u8ba1\u4e0e\u5b9e\u73b0
2.1 \u96c6\u6210SSH\u7684\u65b0\u578bJ2EE\u6846\u67b6
\u3000\u3000\u524d\u9762\u5206\u6790\u4e86\u57fa\u4e8eJ2EE\u7684\u4e09\u79cd\u6846\u67b6\u6280\u672f\uff0c\u4e0b\u9762\u901a\u8fc7\u96c6\u6210\u4ee5\u4e0a\u4e09\u79cd\u6846\u67b6\u6280\u672f\u6765\u5bf9\u4f20\u7edf\u7684J2EE Web\u5f00\u53d1\u6a21\u578b\u52a0\u4ee5\u6539\u8fdb\uff0c\u4ee5\u5f62\u6210\u4e00\u79cd\u65b0\u7684\u3001\u8f7b\u91cf\u578b\u7684J2EE\u67b6\u6784\u3002
\u3000\u3000\u96c6\u6210SSH\u6846\u67b6 \u7684\u7cfb\u7edf\u6846\u67b6\u56fe \u5982\u56fe4\u6240\u793a\uff0c\u7cfb\u7edf\u4ece\u804c\u8d23\u4e0a\u5206\u4e3a\u56db\u5c42\uff1a\u8868\u793a\u5c42\u3001\u4e1a\u52a1\u903b\u8f91\u5c42\u3001\u6570\u636e\u6301\u4e45\u5c42\u548c\u57df\u6a21\u5757\u5c42\u3002\u5176\u4e2d\u4f7f\u7528Struts\u4f5c\u4e3a\u7cfb\u7edf\u7684\u6574\u4f53\u57fa\u7840\u67b6\u6784\uff0c\u8d1f\u8d23MVC\u7684\u5206\u79bb\uff0c\u5728 Struts\u6846\u67b6\u7684\u6a21\u578b\u90e8\u5206\uff0c\u5229\u7528Hibernate\u6846\u67b6\u5bf9\u6301\u4e45\u5c42\u63d0\u4f9b\u652f\u6301\uff0c\u4e1a\u52a1\u5c42\u7528Spring\u652f\u6301\u3002\u5177\u4f53\u505a\u6cd5\u662f\uff1a\u7528\u9762\u5411\u5bf9\u8c61\u7684\u5206\u6790\u65b9\u6cd5\u6839\u636e\u9700\u6c42\u63d0\u51fa\u4e00\u4e9b\u6a21\u578b\uff0c\u5c06\u8fd9\u4e9b\u6a21\u578b\u5b9e\u73b0\u4e3a\u57fa\u672c\u7684Java\u5bf9\u8c61\uff0c\u7136\u540e\u7f16\u5199\u57fa\u672c\u7684DAO\u63a5\u53e3\uff0c\u5e76\u7ed9\u51faHibernate\u7684DAO\u5b9e\u73b0\uff0c\u91c7\u7528Hibernate\u67b6\u6784\u5b9e\u73b0\u7684 DAO\u7c7b\u6765\u5b9e\u73b0Java\u7c7b\u4e0e\u6570\u636e\u5e93\u4e4b\u95f4\u7684\u8f6c\u6362\u548c\u8bbf\u95ee\uff0c\u6700\u540e\u7531Spring\u5b8c\u6210\u4e1a\u52a1\u903b\u8f91\u3002
\u3000\u3000\u7cfb\u7edf\u7684\u57fa\u672c\u4e1a\u52a1\u6d41\u7a0b\u662f\uff1a\u5728\u8868\u793a\u5c42\u4e2d\uff0c\u9996\u5148\u901a\u8fc7JSP\u9875\u9762\u5b9e\u73b0\u4ea4\u4e92\u754c\u9762\uff0c\u8d1f\u8d23\u4f20\u9001\u8bf7\u6c42(Request)\u548c\u63a5\u6536\u54cd\u5e94(Response)\uff0c\u7136\u540eStruts\u6839\u636e\u914d\u7f6e\u6587\u4ef6 (struts-config.xml)\u5c06ActionServlet\u63a5\u6536\u5230\u7684Request\u59d4\u6d3e\u7ed9\u76f8\u5e94\u7684Action\u5904\u7406\u3002\u5728\u4e1a\u52a1\u5c42\u4e2d\uff0c\u7ba1\u7406\u670d\u52a1\u7ec4\u4ef6\u7684 Spring IoC\u5bb9\u5668\u8d1f\u8d23\u5411Action\u63d0\u4f9b\u4e1a\u52a1\u6a21\u578b(Model)\u7ec4\u4ef6\u548c\u8be5\u7ec4\u4ef6\u7684\u534f\u4f5c\u5bf9\u8c61\u6570\u636e\u5904\u7406(DAO)\u7ec4\u4ef6\u5b8c\u6210\u4e1a\u52a1\u903b\u8f91\uff0c\u5e76\u63d0\u4f9b\u4e8b\u52a1\u5904\u7406\u3001\u7f13\u51b2\u6c60\u7b49\u5bb9\u5668\u7ec4\u4ef6\u4ee5\u63d0\u5347\u7cfb\u7edf\u6027\u80fd\u548c\u4fdd\u8bc1\u6570\u636e\u7684\u5b8c\u6574\u6027\u3002\u800c\u5728\u6301\u4e45\u5c42\u4e2d\uff0c\u5219\u4f9d\u8d56\u4e8eHibernate\u7684\u5bf9\u8c61\u5316\u6620\u5c04\u548c\u6570\u636e\u5e93\u4ea4\u4e92\uff0c\u5904\u7406DAO\u7ec4\u4ef6\u8bf7\u6c42\u7684\u6570\u636e\uff0c\u5e76\u8fd4\u56de\u5904\u7406\u7ed3\u679c\u3002
\u3000\u3000\u91c7\u7528\u4e0a\u8ff0\u5f00\u53d1\u6a21\u578b\uff0c\u4e0d\u4ec5\u5b9e\u73b0\u4e86\u89c6\u56fe\u3001\u63a7\u5236\u5668\u4e0e\u6a21\u578b\u7684\u5f7b\u5e95\u5206\u79bb\uff0c\u800c\u4e14\u8fd8\u5b9e\u73b0\u4e86\u4e1a\u52a1\u903b\u8f91\u5c42\u4e0e\u6301\u4e45\u5c42\u7684\u5206\u79bb\u3002\u8fd9\u6837\u65e0\u8bba\u524d\u7aef\u5982\u4f55\u53d8\u5316\uff0c\u6a21\u578b\u5c42\u53ea\u9700\u5f88\u5c11\u7684\u6539\u52a8\uff0c\u5e76\u4e14\u6570\u636e\u5e93\u7684\u53d8\u5316\u4e5f\u4e0d\u4f1a\u5bf9\u524d\u7aef\u6709\u6240\u5f71\u54cd\uff0c\u5927\u5927\u63d0\u9ad8\u4e86\u7cfb\u7edf\u7684\u53ef\u590d\u7528\u6027\u3002\u800c\u4e14\u7531\u4e8e\u4e0d\u540c\u5c42\u4e4b\u95f4\u8026\u5408\u5ea6\u5c0f\uff0c\u6709\u5229\u4e8e\u56e2\u961f\u6210\u5458\u5e76\u884c\u5de5\u4f5c\uff0c\u5927\u5927\u63d0\u9ad8\u4e86\u5f00\u53d1\u6548\u7387\u3002
2.2 \u57fa\u4e8eSSH\u6846\u67b6 \u7684Web\u5e94\u7528\u7cfb\u7edf\u7684\u5b9e\u73b0
\u3000\u3000\u4e0b\u9762\u5c06\u901a\u8fc7\u4e00\u4e2a\u5b9e\u9645\u7684\u7cfb\u7edf\u6765\u5c55\u793a\u5982\u4f55\u8fdb\u884c\u57fa\u4e8eSSH\u6846\u67b6 \u7684Web\u5e94\u7528\u5f00\u53d1\u3002\u8be5\u7cfb\u7edf\u662f\u4e3a\u67d0\u901a\u4fe1\u516c\u53f8\u8fd0\u8425\u90e8\u5f00\u53d1\u7684\u4e00\u4e2a\u95ee\u7b54\u5f0f\u7cfb\u7edf\uff0c\u529f\u80fd\u7c7b\u4f3c\u4e8e\u767e\u5ea6\u77e5\u9053\u548c\u65b0\u6d6a\u7231\u95ee\u3002\u7531\u4e8e\u7cfb\u7edf\u7684\u6a21\u5757\u8f83\u591a\uff0c\u4e0b\u9762\u5c31\u4ee5\u4e00\u4e2a\u7528\u6237\u7ba1\u7406\u6a21\u5757\u4e3a\u4f8b\u6765\u8bf4\u660e\u7cfb\u7edf\u7684\u5f00\u53d1\u5b9e\u73b0\u8fc7\u7a0b\uff0c\u5e76\u5c06\u6309\u7167\u6570\u636e\u6301\u4e45\u5c42\u3001\u4e1a\u52a1\u903b\u8f91\u5c42\u3001\u8868\u793a\u5c42\u7684\u987a\u5e8f\u8bf4\u660e\u7cfb\u7edf\u6784\u5efa\u8fc7\u7a0b\u3002
\u3000\u3000\uff081\uff09\u6570\u636e\u6301\u4e45\u5c42
\u3000\u3000\u6570\u636e\u6301\u4e45\u5c42\u7531Java\u5bf9\u8c61\u6301\u4e45\u5316\u7c7b\u548c\u6570\u636e\u8bbf\u95ee\u5bf9\u8c61(DAO)\u7ec4\u6210\u3002\u6bcf\u4e2a\u6570\u636e\u5e93\u8868\u90fd\u5bf9\u5e94\u7740\u4e00\u4e2a\u6301\u4e45\u5316\u5bf9\u8c61\uff0c\u8fd9\u6837\u5c31\u7ed9\u4e88\u4e86\u5f00\u53d1\u8005\u4f7f\u7528OO\u601d\u60f3\u8bbe\u8ba1\u548c\u5f00\u53d1\u7684\u4fbf\u5229\uff0c\u540c\u65f6\u4e5f\u5c4f\u853d\u4e86\u5177\u4f53\u7684\u6570\u636e\u5e93\u548c\u5177\u4f53\u7684\u6570\u636e\u8868\u3001\u5b57\u6bb5\uff0c\u6d88\u9664\u4e86\u5bf9\u6570\u636e\u5e93\u64cd\u4f5c\u7684\u786c\u7f16\u7801\u5728\u91cd\u7528\u6027\u4e0a\u7684\u5f0a\u7aef\u3002\u7528\u6237\u4fe1\u606f\u8868\u7684\u90e8\u5206\u7ed3\u6784\u5982\u88681\u6240\u793a\u3002
\u3000\u3000Hibernate\u901a\u8fc7\u6620\u5c04(Mapping)\u6587\u4ef6\u5c06\u5bf9\u8c61(Object)\u4e0e\u5173\u7cfb\u578b\u6570\u636e(Relational)\u76f8\u5173\u8054\uff0c\u56e0\u6b64\u9700\u8981\u7f16\u5199\u548c\u6570\u636e\u5e93\u8868\u76f8\u5bf9\u5e94\u7684Java\u6301\u4e45\u5316\u7c7b\u4ee5\u53ca\u5bf9\u5e94\u7684\u6620\u5c04\u6587\u4ef6\u3002\u6709\u4e86Java\u6301\u4e45\u5316\u7c7b\u540e\u5c31\u53ef\u4ee5\u5728\u6b64\u57fa\u7840\u4e0a\u5b9e\u73b0\u6570\u636e\u8bbf\u95ee\u7c7b\u3002\u5728Spring\u6846\u67b6\u4e2d\uff0c\u6570\u636e\u8bbf\u95ee\u7c7b\u53ef\u4ee5\u4ece\u8f85\u52a9\u7c7b HibernateDaoSupport\u7ee7\u627f\uff0c\u8fd9\u6781\u5927\u5730\u65b9\u4fbf\u4e86Hibernate\u6846\u67b6\u5728Spring\u4e2d\u7684\u4f7f\u7528\uff0c\u76f8\u5e94\u7684\u90e8\u5206\u4ee3\u7801\u5982\u4e0b\uff1a
public class UserDao
extends HibernateDaoSupport {
public int add(User user) {
return Integer.ParseInt(this.getHibernateTemplate().save(user).toString());
}
public List findAll() {
return this.getHibernateTemplate().loadAll(User.class);
}
}
\u3000 \u5177\u4f53\u7684Hibernate\u6570\u636e\u6e90\u3001session\u5de5\u5382\u3001\u4e8b\u52a1\u7ba1\u7406\u3001\u7f13\u51b2\u8fde\u63a5\u6c60\u7b49\u529f\u80fd\u90fd\u7531\u4e1a\u52a1\u5c42\u7684Spring\u5bb9\u5668\u63d0\u4f9b\u3002
\u3000\u3000\uff082\uff09\u4e1a\u52a1\u903b\u8f91\u5c42
\u3000\u3000\u4e1a\u52a1\u903b\u8f91\u5c42\u7531Spring\u6846\u67b6\u652f\u6301\uff0c\u63d0\u4f9b\u4e86\u5904\u7406\u4e1a\u52a1\u903b\u8f91\u7684\u670d\u52a1\u7ec4\u4ef6\u3002\u5f00\u53d1\u8005\u9700\u8981\u5bf9\u4e1a\u52a1\u5bf9\u8c61\u5efa\u6a21\uff0c\u62bd\u8c61\u51fa\u4e1a\u52a1\u6a21\u578b\u5e76\u5c01\u88c5\u5728Model\u7ec4\u4ef6\u4e2d\u3002\u7531\u4e8e\u6570\u636e\u6301\u4e45\u5c42\u5b9e\u73b0\u4e86Java\u6301\u4e45\u5316\u7c7b\u5e76\u4e14\u5c01\u88c5\u4e86\u6570\u636e\u8bbf\u95ee\u5bf9\u8c61(DAO)\uff0c\u56e0\u6b64\u53ef\u4ee5\u5728Model\u7ec4\u4ef6\u4e2d\u65b9\u4fbf\u5730\u8c03\u7528DAO\u7ec4\u4ef6\u6765\u5b58\u53d6\u6570\u636e\u3002Spring\u7684IoC\u5bb9\u5668\u8d1f\u8d23\u7edf\u4e00\u7ba1\u7406Model\u7ec4\u4ef6\u548cDAO\u7ec4\u4ef6\u4ee5\u53caSpring\u6240\u63d0\u4f9b\u7684\u4e8b\u52a1\u5904\u7406\u3001\u7f13\u51b2\u8fde\u63a5\u6c60\u7b49\u670d\u52a1\u7ec4\u4ef6\u3002
\u3000\u3000\u5728\u7528\u6237\u7ba1\u7406\u6a21\u5757\u4e2d\uff0c\u901a\u8fc7\u4e1a\u52a1\u5efa\u6a21\u521b\u5efa\u4e86\u7528\u6237\u6a21\u578bUserService\u7c7b\uff0c\u5c01\u88c5\u4e86\u5bf9\u7528\u6237\u7684\u6743\u9650\u7ba1\u7406\u4ee5\u53ca\u79ef\u5206\u7ba1\u7406\u7b49\u529f\u80fd\u3002UserService\u7c7b\u901a\u8fc7\u8c03\u7528\u6570\u636e\u8bbf\u95ee\u7c7bUserDao\u5b9e\u73b0\u5bf9\u7528\u6237\u6570\u636e\u7684\u64cd\u4f5c\u3002\u8fd9\u4e9b\u7ec4\u4ef6\u7684\u5173\u7cfb\u5c06\u901a\u8fc7\u914d\u7f6eSpring\u6846\u67b6\u7684applicationContext.xml\u8054\u7cfb\u8d77\u6765\uff0c\u914d\u7f6e\u6587\u4ef6\u7684\u4e3b\u8981\u5185\u5bb9\u5982\u4e0b\uff1a
\u3000\u3000\u3000
\uff083\uff09\u8868\u793a\u5c42
\u8868\u793a\u5c42\u7ed3\u5408JSP\u548cStruts\u7684TagLib\u5e93\u5904\u7406\u663e\u793a\u529f\u80fd\uff0c\u5229\u7528ActionServlet\u5c06\u8bf7\u6c42(*.do)\u6620\u5c04\u5230\u76f8\u5e94\u7684Action\uff0c\u5e76\u7531Action\u8c03\u7528\u4e1a\u52a1\u903b\u8f91\u7684\u670d\u52a1\u7ec4\u4ef6\uff0c\u7136\u540e\u6839\u636e\u5904\u7406\u7ed3\u679c\u8df3\u8f6c\u5230Forword\u5bf9\u8c61\u6307\u5b9a\u7684\u54cd\u5e94\u9875\u9762\u3002
\u4e1a\u52a1\u6d41\u7a0b\u7684\u90e8\u7f72\u7531struts-config.xml\u5b8c\u6210\u3002\u4e0b\u9762\u4ee5\u4e00\u4e2a\u663e\u793a\u6240\u6709\u7528\u6237\u4fe1\u606f\u7684\u8bf7\u6c42(ListUser.do)\u4e3a\u4f8b\u6765\u8bf4\u660e\u914d\u7f6e\u6587\u4ef6\u7684\u4f7f\u7528\u3002
\u3000
\u57fa\u4e8eJ2EE\u7684Web\u5e94\u7528\u4ee5\u5176\u5c42\u6b21\u6027\u3001\u5e73\u53f0\u65e0\u5173\u6027\u7684\u4f18\u52bf\u5df2\u7ecf\u9010\u6e10\u6210\u4e3a\u4e86\u7535\u5b50\u5546\u52a1\u3001\u7535\u5b50\u653f\u52a1\u4e3b\u8981\u7684\u89e3\u51b3\u65b9\u6848\u3002\u672c\u6587\u9488\u5bf9\u4f20\u7edf\u7684J2EE Web\u5e94\u7528\u5f00\u53d1\u7684\u5f0a\u7aef\uff0c\u63d0\u51fa\u4e86\u4e00\u79cd\u5229\u7528\u8f7b\u91cf\u7ea7\u6846\u67b6\u6765\u5feb\u901f\u642d\u5efaWeb\u5e94\u7528\u7684\u89e3\u51b3\u65b9\u6848\uff0c\u5e76\u4e14\u901a\u8fc7\u5176\u5728\u5b9e\u9645\u9879\u76ee\u4e2d\u7684\u5e94\u7528\uff0c\u8bc1\u660e\u4e86\u91c7\u7528\u6b64\u65b9\u6848\u53ef\u4ee5\u5e2e\u52a9\u5f00\u53d1\u4eba\u5458\u5728\u77ed\u65f6\u95f4\u5185\u5efa\u7acb\u7ed3\u6784\u6e05\u6670\u3001\u53ef\u91cd\u7528\u6027\u597d\u3001\u7ef4\u62a4\u6269\u5c55\u65b9\u4fbf\u7684Web\u5e94\u7528\u7a0b\u5e8f\u3002
\u53c2\u8003\u6587\u732e
[1] GAMMA E, HELM R, JOHNSON R, et al. Design patterns:Elements of reusable object-oriented software[M]. Addison Wesley, 1994.
[2] \u5b59\u536b\u7434.\u7cbe\u901aStruts:\u57fa\u4e8eMVC\u7684Java Web\u8bbe\u8ba1\u4e0e\u5f00\u53d1[M]. \u5317\u4eac\uff1a\u7535\u5b50\u5de5\u4e1a\u51fa\u7248\u793e,2004.
[3] JOHNSON R, HOELLER J, ARENDSEN A, et al. Java/J2EE application framework reference document. V1.1.
2004.
[4] \u5f90\u957f\u76db,\u6234\u8d85.\u4e00\u79cd\u5feb\u901f\u5f00\u53d1Web\u5e94\u7528\u7a0b\u5e8f\u65b9\u6cd5\u7684\u7814\u7a76[J]. \u8ba1\u7b97\u673a\u5de5\u7a0b\u4e0e\u8bbe\u8ba1,2004,(12):2237-2239.
[5] \u590f\u6615,\u66f9\u6653\u94a2,\u5510\u52c7.\u6df1\u5165\u6d45\u51faHibernate[M]. \u5317\u4eac\uff1a\u7535\u5b50\u5de5\u4e1a\u51fa\u7248\u793e,2005.
[6] JOHNSON R.Expert one-on-one J2EE design and development[M]. \u9b4f\u6d77\u840d\u8bd1.\u5317\u4eac\uff1a\u7535\u5b50\u5de5\u4e1a\u51fa\u7248\u793e,2003.
\u5728\u7528ssh \u5f00\u53d1web\u5e94\u7528\u65f6\uff0c\u9700\u8981\u5bf9\u751f\u6210\u7684 \u5404\u4e2a\u7c7b\u6587\u4ef6\u8fdb\u884c\u7ec4\u7ec7\uff0c\u4e0b\u9762\u5c31\u5bf9\u4e00\u4e2a\u53ef\u884c\u7684 \u76ee\u5f55\u65b9\u6848\u8fdb\u884c\u4ecb\u7ecd\uff1a
\u8b6c\u5982\u5e94\u7528\u4e2d\u6709\u4e00\u4e2a\u7528\u6237\u7ba1\u7406\u6a21\u5757\uff0c\u5219\u5728\u516c\u5171\u5305\u4e0b\u5efa\u7acb\u4e00\u4e2auser\u5305\uff0c\u5982\u8be5\u516c\u5171\u5305\u53ef\u4ee5\u4e3acom.simon.oa\uff0c
\u5728user\u5305\u4e0b\u5305\u62ec\u5982\u4e0b\u5b50\u5305
1\u3001controler\u5305
\u8be5\u5305\u653e\u7f6e\u5404\u79cdstruts\u7684 action\u3002
2\u3001dao\u5305
\u8be5\u5305\u653e\u7f6e\u5404\u7c7bdao\uff08data access object\uff09\uff0c\u4e5f\u5c31\u662f\u653e\u7f6e\u5bf9\u6570\u636e\u5e93\u8bbf\u95ee\u7684 \u5b9e\u73b0\u7c7b\uff0c\u5728\u7528myeclipse\u4e2d\u7684 \u201cHibernate Reverse Engineering\u201d\u8fdb\u884c\u53cd\u5411\u64cd\u4f5c\u65f6\u5728\u67d0\u4e00\u4e2a\u76ee\u5f55\u4e2d\u5c31\u4f1a\u751f\u6210\u5bf9\u5e94\u67d0\u4e2a\u8868\u7684 DAO\uff0c\u751f\u6210\u540e\u53ef\u5c06\u8be5DAO\u62d6\u5230dao\u5305\u4e2d\u3002\u5728\u67d0\u4e9b\u5e94\u7528\u4e2d\u5c06DAO\u4f5c\u4e3a\u63a5\u53e3\uff0c\u5728\u8be5\u63a5\u53e3\u4e2d\u5305\u62ec\u6240\u6709\u5bf9\u6570\u636e\u5e93\u7684 \u64cd\u4f5c\u65b9\u6cd5\uff0c\u7136\u540e\u5728dao\u5305\u5efa\u7acb\u4e00\u4e2ahibernate\u5305\uff0c\u5728hibernate\u5305\u4e2d\u653e\u7f6e\u5bf9DAO\u63a5\u53e3\u7684 \u5b9e\u73b0\uff0c\u8b6c\u5982\uff1aUserDAO\u63a5\u53e3\u6709\u4e00\u4e2a\u5b9e\u73b0\u7c7b\u4e3aUserDaoImpl\uff0c\u5c06\u8be5\u7c7b\u653e\u7f6e\u5230hibernate\u5305\u4e2d\uff0c\u5b9e\u9645\u7684 \u5f00\u53d1\u503e\u5411\u4e8e\u540e\u4e00\u79cd\u65b9\u5f0f\uff0c\u56e0\u4e3a\u5bf9\u8fd9\u4e2aDAO\u63a5\u53e3\u53ef\u4ee5\u5b9e\u73b0spring\u7684 IoC\u64cd\u4f5c\u3002(\u4e0d\u77e5\u9053myeclipse\u5bf9\u6b64\u662f\u600e\u4e48\u8003\u8651\u7684 \uff0c\u8fd9\u4e2a\u95ee\u9898\u8ba9\u6211\u7ea0\u7f20\u4e86\u5f88\u4e45\uff0c\u8bef\u5c06DAO\u7406\u89e3\u6210\u4e00\u4e2a\u80fd\u591f\u8fdb\u884c\u5b9e\u9645\u64cd\u4f5c\u7684 \u7c7b\uff0c\u800c\u4e0d\u662f\u4e00\u4e2a\u63a5\u53e3\uff0c\u4ee5\u540e\u5f00\u53d1\u8981\u6ce8\u610f )
3\u3001model\u5305
\u8be5\u5305\u4e2d\u653e\u7f6ehibernate\u53cd\u5411\u5de5\u7a0b\u751f\u6210\u7684 bean\u548c\u8be5bean\u5bf9\u5e94\u7684 .hbm.xml\u6587\u4ef6\u3002
4\u3001service\u5305
\u8be5\u5305\u653e\u7f6e\u4e1a\u52a1\u64cd\u4f5c\u7c7b\uff0c\u8b6c\u5982\u7528\u6237\u670d\u52a1\u7c7b\uff0c\u4e00\u822c\u60c5\u51b5\u5c06\u8be5\u7528\u6237\u64cd\u4f5c\u7c7b\u63d0\u53d6\u4e00\u4e2a\u63a5\u53e3\uff0c\u7136\u540e\u5728service\u5305\u4e0b\u751f\u6210\u4e00\u4e2aimpl\u5305\uff0c\u5728impl\u5305\u4e2d\u624d\u653e\u7f6e\u7528\u6237\u64cd\u4f5c\u63a5\u53e3\u7684 \u5b9e\u73b0\u7c7b\u3002\u8be5\u7528\u6237\u63a5\u53e3\u5b9e\u73b0\u7c7b\u4e2d\u8c03\u7528DAO\u63a5\u53e3\u5bf9\u6570\u636e\u5e93\u8fdb\u884c\u64cd\u4f5c\uff0c\u800c\u8c03\u7528\u8be5\u5b9e\u73b0\u7c7b\u7684 \u65b9\u6cd5\u5728struts\u7684 action\u4e2d\u3002
5\u3001vo\u5305\uff08value object\uff09
vo\u5305\u4e2d\u7684 \u4e2d\u5305\u62ecstruts\u4e2d\u4f7f\u7528\u7684 POJO\u53caactionform\u7b49\u4fe1\u606f\u3002
VO: Value Object
DTO: Data Transfer Object
\u4e2a\u4eba\u7406\u89e3VO\u548cDTO\u662f\u7c7b\u4f3c\u7684 \u4e1c\u897f\uff0c\u539f\u5219\u4e0aVO\u548cDTO\u53ea\u6709Public Fields\uff0c\u4e3b\u8981\u7528\u4e8e\u8fdb\u7a0b\u4e4b\u95f4\u6570\u636e\u4f20\u9012\u7684 \u95ee\u9898\uff0cVO\u548cDTO\u4e0d\u4f1a\u4f20\u9012\u5230\u8868\u793a\u5c42\uff0c\u5728\u4e1a\u52a1\u5c42\u5c31\u4f1a\u88ab\u5438\u6536\u3002\u4f46\u770b\u5230\u5f88\u591a\u4eba\u5728\u5efa\u7acbVO\u548cDTO\u65f6\uff0c\u4e5f\u542b\u6709Setter,Getter\u5c5e\u6027\u548c\u4e00\u4e9b\u5176\u5b83\u7684 \u8f85\u52a9\u65b9\u6cd5\uff0c\u8fd9\u4e5f\u65e0\u53ef\u539a\u975e\uff0c\u6211\u81ea\u5df1\u4e5f\u4e0d\u80fd\u786e\u5b9a\u8fd9\u5bf9\u4e0d\u5bf9\u3002
四层就是:客户机浏览器、Web服务器、数据仓库及模型仓库、分布式数据库群及模型库群
三层:
1:数据数据访问层:主要是对原始数据(数据库或者文本文件等存放数据的形式)的操作层,而不
是指原始数据,也就是说,是对数据的操作,而不是数据库,具体为业务逻辑层或表示层提供数据服务.
2:业务逻辑层:主要是针对具体的问题的操作,也可以理解成对数据层的操作,对数据业务逻辑处理,如果说数据层是积木,那逻辑层就是对这些积木的搭建。
3:表示层:主要表示WEB方式,也可以表示成WINFORM方式,如果逻辑层相当强大和完善,无论表现层如何定义和更改,逻辑层都能完善地提供服务。
四层:表示层->应用层->业务逻辑层->数据服务层
绛旓細涓夊眰锛1锛氭暟鎹暟鎹闂眰:涓昏鏄鍘熷鏁版嵁锛堟暟鎹簱鎴栬呮枃鏈枃浠剁瓑瀛樻斁鏁版嵁鐨褰㈠紡锛夌殑鎿嶄綔灞傦紝鑰屼笉 鏄寚鍘熷鏁版嵁锛屼篃灏辨槸璇达紝鏄鏁版嵁鐨勬搷浣滐紝鑰屼笉鏄暟鎹簱,鍏蜂綋涓轰笟鍔¢昏緫灞傛垨琛ㄧず灞傛彁渚涙暟鎹湇鍔★紟2锛氫笟鍔¢昏緫灞:涓昏鏄拡瀵瑰叿浣撶殑闂鐨勬搷浣滐紝涔熷彲浠ョ悊瑙f垚瀵规暟鎹眰鐨勬搷浣,瀵规暟鎹笟鍔¢昏緫澶勭悊锛屽鏋滆...
绛旓細浣滀负涓涓Web鍓嶇寮鍙鑰咃紝鎴戣涓篧eb鍓嶇椤甸潰涓昏鐢涓夊眰鏋勬垚锛屽垎鍒槸缁撴瀯灞銆佽〃鐜板眰鍜屼氦浜掑眰銆傛帴涓嬫潵鎴戝皢璇︾粏浠嬬粛姣忎竴灞傜殑浣滅敤鍜岄噸瑕佹с傜粨鏋勫眰锛氭瀯鎴愶細HTML浣滅敤锛氱粨鏋勫眰鏄疻eb鍓嶇椤甸潰鏈鍩虹鐨勪竴灞傦紝涓昏璐熻矗椤甸潰鐨勫唴瀹缁撴瀯鍜璇箟鍖栥傚畠閫氳繃浣跨敤HTML鏍囩鏉ョ粍缁囧唴瀹癸紝浣垮緱缃戦〉鍏锋湁鑹ソ鐨勫彲璇绘у拰SEO浼樺寲锛堟悳绱...
绛旓細閫氫織鐨勮锛web宸ョ▼涓鑸垎涓涓夊眰锛氳鍥撅紝鎺у埗鍜屾寔涔呭眰銆傝鍥惧眰鑷劧灏辨槸灞曠ず缁欑敤鎴风殑锛屼竴鑸槸jsp鎴栬卙tml椤甸潰绛夈傛帶鍒跺眰鏄帶鍒朵笟鍔¢昏緫鐨勶紝灏辨槸鍏蜂綋鐨勫疄鐜帮紝鎸佷箙灞傚綋鐒跺氨鏄暟鎹簱浜嗐
绛旓細璇箟Web鐨涓冨眰浣撶郴缁撴瀯濡備笅锛氱涓灞傦紝鍩虹鏋舵瀯锛氱敱Unicode鍜孶RI鏋勬垚銆俇nicode锛屼竴涓寘鍚65536涓瓧绗︾殑瀛楃闆嗭紝鏀寔鍏ㄧ悆璇█鐨勬贩鍚堬紝璐熻矗璧勬簮鐨勭紪鐮併俇RI浣滀负缁熶竴璧勬簮瀹氫綅绗︼紝涓虹綉缁滀笂鐨勬蹇垫垨璧勬簮鎻愪緵鍞竴鏍囪瘑锛屾槸鏁翠釜浣撶郴鐨勫熀纭銆傜浜屽眰锛屾暟鎹〃杈撅細XML+NS+xmlSchema銆俋ML鏄粨鏋勪赴瀵岀殑鏍囪璇█锛屾槗浜庝娇鐢紝...
绛旓細鎴戜滑甯稿父鎻愬埌java EE鐨勪笁灞鎴栬鍥涘眰缁撴瀯銆傚洓灞傛灦鏋勶細灞曠ず灞傦紙web灞锛夈佷笟鍔¢昏緫灞傘佹暟鎹闂眰銆佷俊鎭祫婧愬眰 鍥涘眰鏋舵瀯鍦ㄦ槸寮鍙浼佷笟搴旂敤鏃朵娇鐢ㄧ殑闈炲父缁忓吀鐨勫垝鍒嗘ā寮忋倃eb灞傝礋璐e墠绔睍绀哄拰鐢ㄦ埛璇锋眰鐨勫鐞嗐俶vc鏄竴涓璁℃ā寮忥紝涓昏鐢ㄦ埛鏋勫缓鐢ㄦ埛鐣岄潰锛岀洰鐨勬槸鎶婂睍绀洪昏緫鍜岄昏緫鍒嗙銆倃eb灞傞氬父浼氫娇鐢∕VC妯″紡杩涜...
绛旓細鏁版嵁搴撴湇鍔″櫒鏄Web鏋舵瀯鐨勭涓夊眰锛岃礋璐e瓨鍌ㄣ佹绱㈠拰绠$悊鏁版嵁銆傚綋Web鏈嶅姟鍣ㄩ渶瑕佸姩鎬佺敓鎴愬唴瀹规垨澶勭悊鏁版嵁鏃讹紝瀹冧細鍚戞暟鎹簱鏈嶅姟鍣ㄥ彂閫佽姹傦紝鏁版嵁搴撴湇鍔″櫒澶勭悊杩欎簺璇锋眰锛岀劧鍚庤繑鍥炴墍闇鐨勬暟鎹傚父鐢ㄧ殑鏁版嵁搴撶鐞嗙郴缁熷寘鎷琈ySQL銆丳ostgreSQL銆丱racle鍜孲QL Server绛夈傛暟鎹簱鏈嶅姟鍣ㄩ氬父浣跨敤SQL锛缁撴瀯鍖栨煡璇㈣瑷锛夎繘琛屾暟鎹鐞...
绛旓細4.琛ㄧ幇灞傦紙鍦ㄦ垜鐪嬫潵灏辨槸鏈嶅姟灞傦紝鐢ㄦ潵绠$悊瀹瑰櫒绾у埆鐨鏈嶅姟锛屼緥濡備簨鍔★紝瀹夊叏锛屾暟鎹闂昏緫绛夌瓑锛夎繖鏄繖鍥涘眰缁撴瀯锛岃繕鏈涓夊眰缁撴瀯琛ㄧず鐨勶細琛ㄧず灞 涓氬姟閫昏緫 鎸佷箙鍖 杩欎釜鍒嗗眰涓昏鏄湅閬靛惊鍝竴绉嶆爣鍑嗕互鍙婂垎灞傜殑鐢ㄩ斾簡銆傚氨濂芥瘮璁$畻鏈虹綉缁滀腑鐨勭綉缁滅粨鏋勫垎灞傦紝鏈変簲灞傜殑閫氱敤缁撴瀯锛屽洓灞傜殑TCP/IP鍗忚锛屼竷灞傜殑OSI鍗忚銆傛垜...
绛旓細涓鑸俊鎭郴缁熶腑鏈甯歌鐨勬槸濡備笅鎵鍒鐨4灞:琛ㄧず灞,涓氬姟閫昏緫灞,鎸佷箙灞,搴旂敤灞傘 妯″紡浠嬬粛: 琛ㄧず灞(涔熺О涓篣I灞):涓昏瀵圭敤鎴风殑璇锋眰鎺ュ彈,浠ュ強鏁版嵁鐨勮繑鍥,涓哄鎴风鎻愪緵搴旂敤绋嬪簭鐨勮闂 搴旂敤灞(涔熺О涓烘湇鍔″眰):鏈嶅姟灞傜殑浣滅敤灏辨槸灏嗚〃鐜板眰涓庝笟鍔¢昏緫灞備箣闂村畬鎴愯В鑰︺傞偅涔堣〃鐜板眰涓氨涓嶄細鍑虹幇浠讳綍鐨勪笟鍔′唬鐮,褰撶劧杩欐牱甯︽潵...
绛旓細瀹㈡埛鏈/鏈嶅姟鍣缁撴瀯1.浜屽眰C/S缁撴瀯浜屽眰C/S缁撴瀯鏄綋鍓嶉潪甯告祦琛鐨鏁版嵁搴撶郴缁熺粨鏋,鍦ㄨ繖绉嶇粨鏋勪腑,瀹㈡埛鏈烘彁鍑鸿姹,鏈嶅姟鍣ㄥ瀹㈡埛鏈虹殑鏈嶅姟璇锋眰鍋氬嚭鍥炵瓟銆傚畠鎶婄晫闈㈠拰鏁版嵁澶勭悊鎿嶄綔鍒嗗紑鍦ㄥ墠绔(瀹㈡埛绔)鍜屽悗绔(鏈嶅姟鍣ㄧ),杩欎釜涓昏鐗圭偣浣垮緱C/S绯荤粺鐨勫伐浣滈熷害涓昏鍙栧喅浜庤繘琛屽ぇ閲忔暟鎹搷浣滅殑鏈嶅姟鍣,鑰屼笉鏄墠绔殑纭欢璁惧;鍚屾椂涔...
绛旓細鍦web鍓嶇椤甸潰涓璈TML灞炰簬缁撴瀯灞锛岃礋璐f弿缁樺嚭鍐呭鐨勭粨鏋锛孋SS灞炰簬琛ㄧず灞傦紝璐熻矗鈥滃浣曟樉绀烘湁鍏冲唴瀹光濓紝JavaScript灞炰簬琛屼负灞傦紝璐熻矗鈥滃唴瀹瑰簲濡備綍瀵逛簨浠跺仛鍑哄弽搴旓紝杩欐槸Javascript璇█鍜孌OM涓诲鐨勯鍩熴傗濄侷T鍩硅閫夋嫨鍗冮攱鏁欒偛銆傚崈閿嬫槸涓瀹舵嫢鏈夋牳蹇冩暀鐮旇兘鍔涗互鍙婃牎浼佸悎浣滆兘鍔涚殑鑱屼笟鏁欒偛鍩硅浼佷笟锛2011骞存垚绔嬩簬鍖椾含锛岀鎵...