·ÒëÎĸå1¡¢
SpringµÄweb MVC ¹¹¼Üģʽ
Juergen Hoeller
1.½éÉÜ£ºSpring Ó¦Óù¹¼Ü
µ±ÄãµÚÒ»´Î¿´µ½SpringµÄʱºò£¬ÄãÒ»¶¨»á˵:\Ŷ²»£¬ÓÖÒ»ÖÖweb ¹¹¼Ü\ÕâÆªÎÄÕ½«¸æËßÄãSpringÃ÷ÏÔÇø±ðÓÚÆäËûÇáÁ¿¼¶application framework, Ëü½«×¨×¢ÓÚwebµÄÖ§³Ö£¬Óëstruts ºÍ webworkÓÐ×ÅÃ÷ÏÔµÄÇø±ð¡£
ÔÚºÍstruts ºÍ webworkµÄ¶Ô±ÈÉÏ,SpringÊÇÒ»¸ö·þÎñÓÚËùÓвãÃæµÄapplication framework:ÌṩÁËbeanµÄÅäÖûù´¡£¬AOPµÄÖ§³Ö£¬JDBCµÄÌáÈ¡¿ò¼Ü£¬³éÏóÊÂÎñÖ§³Ö£¬µÈµÈ¡£ËüÓÐÒ»¸ö·Ç³£ÏÔÖøµÄÌØµã£ºÔÚij¸ö²ãÃæÉÏÈç¹ûÄã²»ÐèÒªSpringµÄÖ§³Ö£¬Äã¾Í¿ÉÒÔ²»Ê¹ÓÃStringµÄclass£¬Ö»Ê¹ÓÃËüµÄijһ²¿·ÖµÄ¹¦ÄÜ¡£ ´ÓËüµÄÉè¼ÆÀíÄÄã¿ÉÒÔ¿´µ½String °ïÖúÄãʵÏÖÁËÕæÕýµÄÂß¼²ãºÍweb²ãµÄ·ÖÀ룺ÀýÈç¡£Ò»¸öУÑéÓ¦Óý«²»ÓÃÒÀ¿¿controllers£¬¾Í¿ÉÒÔʵÏÖ¡£ÕâÑùµÄÄ¿±êÊÇ ¸üºÃµÄÖØÓúÍÒײ⣺¹ý·ÖÒÀ¿¿²»±ØÒªµÄÈÝÆ÷ºÍ¿ò¼Ü½«²»ÄÜʵÏÖÕâÒ»µã¡£
µ±È»,Spring µÄ×Ô¼ºµÄwebÖ§³ÖºÍͨ³£¿ò¼ÜģʽµÄϸÖÂÍêÕû.È»¶ø£¬SpringÌæ»»struts,webwork»òÕ߯äËûµÄweb·½°¸·Ç³£µÄÈÝÒ×.¶ÔÓÚSpringµÄwebÖ§³Ö»òÕß²»Í¬µÄµØ·½£¬Spring ÔÊÐíÄãÔÚwebÈÝÆ÷ÀïÃæ½¨Á¢Ò»¸öÖмä²ã£¬ÔÚ²âÊÔ»·¾³»òÕß±ê×¼¶ÀÁ¢µÄÓ¦ÓÃÀïÃæÀ´ÉèÖÃÖØÓÃÄãµÄÉÌÎñÂß¼.»¹ÓÐÔÚJ2EE»·¾³ÀïÃæ£¬ÄãµÄÉÌÎñÂß¼²»±ØÒÀ¿¿ÈÝÆ÷ÌṩµÄ·þÎñ£¬ÏñJTA ,EJBµÄÖ§³Ö.Á¼ºÃµÄ¹¹¼ÜµÄwebÓ¦ÓÿÉÒÔÔËÐÐÔÚÈκÎÈÝÆ÷ÉÏ£¬È磬Tomcat »òÕß Resin. ÖµµÃ×¢ÒâµÄÊÇ£¬Spring ²»ÊǺÍÒѾ´æÔڵĽâ¾ö·½°¸½øÐоºÕù. ÎÒÃǹÄÀø½áºÏ±ê×¼µÄ¼¼Êõ£¬È磬 Servlet, JSP, JTA, JNDI, JDBC, and JDO, ºÍ·Ç³£Æ¥ÅäµÄ¹¤¾ß£¬È磬Hibernate, Velocity, Log4J, and Caucho's Hessian/Burlap.Õâ¸ö¿ò¼ÜµÄµÄÉè¼ÆË¼ÏëÊÇÔÚÄãµÄÓ¦ÓÃÐèÒª¸ÄÁ¼µÄʱºò£¬Ä㽫»á×öһЩ¼¼ÊõµÄÑ¡Ôñ:ÀýÈç,Èç¹ûÄãÐèÒª·Ö²¼Ê½ÊÂÎñ´¦Àí£¬Äã¿ÉÄÜÐèÒªÓÃSpringµÄJta TransactionManager À´ÊµÏÖJTA·þÎñ.»òÕߣ¬ÓÃ
DataSourceTransactionManager or HibernateTransactionManager À´ÊµÏÖÃÀÃîÍêÃÀµÄµ¥¸öÊý¾Ý¿â½»»»¡£
2. Web MVC:Spring web ¿ò¼ÜµÄÉè¼ÆË¼Ïë
Spring ¿ò¼Üͨ¹ýÅäÖòÙ×÷mappings,չʾresolution,±¾µØ»¯ºÍÄ£°æ¼¯³ÉÎ§ÈÆ×Å·ÖÅÉÇëÇó²Ù×÷µÄservlet - DispatcherServletÉè¼ÆµÄ.ȱʡµÄ²Ù×÷ÊÇÒ»¸ö·Ç³£¼òµ¥µÄ¿ØÖƽӿÚ, ËûÖ»ÌṩÁËModelAndView
handleRequest(request,response)·½·¨.Õ⽫ÓÃÓÚÒ»¸öÓ¦ÓõĿØÖÆ,µ«ÊÇ,Èç¹ûÄãÏë°üº¬¶à¸ö²ã´ÎµÄ¿ØÖÆ£¬AbstractController, AbstractCommandController, MultiActionController, SimpleFormController,
AbstractWizardFormController ½«°ïÖúÄãÍê³É.Ó¦ÓÿØÖƽ«´ú±íÄÇЩ×Óϵͳ.×¢Ò⣬Äã¿ÉÒÔÑ¡ÔñÒ»¸öÊʵ±µÄ»ùÀà:Èç¹ûÄãûÓÐ web form,Äã¾Í²»±ØÓÃ
FormController.Õâ¾ÍÊǺÍStruts×î´óµÄ²»Í¬. Äã¿ÉÒÔͨ¹ýÃüÁî»òÕßform¶ÔÏóÀ´²Ù×÷ÈκζÔÏó:Õâ²»ÐèÒª½Ó¿Ú¹¤¾ß»òÕßÒ»¸ö»ù´¡ÀàµÄÇý¶¯.SpringµÄÊý¾Ý°î¶¨ÊǷdz£µÄÁé»îµÄ.¾ÙÀýÀ´Ëµ,ËüÃèÊöÁ˾ßÓÐÔÚÓ¦Ó÷¶Î§ÄÚµÄУÑé´íÎóµÄÊäÈë»úÖÆ,µ«²»ÊÇϵͳ´íÎó.ËùÒÔÔÚÄãµÄform¶ÔÏóÀïÃæÄã²»±Ø¸´ÖÆÄãµÄÒµÎñ¶ÔÏóµÄstringÊôÐÔ,Ö»²Ù×÷³ö´íµÄ×ÓÈÎÎñ,»òÕßÊʵ±µØ×ª»»string.»»¾ä»°Ëµ,Ëüͨ³£¿ÉÒԺܺõÄÖ±½Ó°î¶¨ÄãµÄÒµÎñ¶ÔÏó. ÕâÒ²ÊǺÍstrutsÎ§ÈÆÇëÇó»ù´¡ÀàAction ºÍ ActionForm (ÿ¸öaction²Ù×÷ÀàÐÍ) ½¨Á¢Ö÷ÒªµÄ²»Í¬Ö®Ò». ¶Ô±È
WebWork,Sping¸ü¶àµÄÇø±ðÔÚÓÚ¶ÔÏó½ÇÉ«:SpingÖ§³Ö¿ØÖÆÆ÷µÄ¸ÐÄî,Ò»¸ö²Ù×÷ÃüÁî»òÕßform¶ÔÏó,ºÍµÃµ½Êý¾Ý´«µÝ¸øÊÓͼµÄģʽ.Õâ¸öģʽͨ³£°üº¬ÃüÁîºÍform¶ÔÏó,µ«ÓÐʱҲ°üº¬ÈÎÒâµÄ²Î¿¼Êý¾Ý.»»¾ä»°Ëµ,Ò»¸öWebWork ActionÁªºÏËùÓÐÕâЩ½ÇÉ«µ½Ò»¸öµ¥¶ÀµÄ¶ÔÏó.WebWork ÔÊÐíÄãÓÃÒѾ´æÔÚµÄÒµÎñ¶ÔÏó×÷ΪÄã form µÄÒ»²¿·Ö,µ«ÊÇÖ»Éú³É¸÷×ÔAction µÄ bean ÊôÐÔ. ×îºó,²Ù×÷ÇëÇóµÄAction ʵÀýÔÚÒ»¸öÊÓͼÀïÃæ»ñµÃ¸¶ÖµºÍform population. È»¶ø,²Î¿¼Êý¾ÝÒ²ÐèÒª×÷ΪAction µÄÊôÐÔ±»Ä£Äâ. Ò»¸öÀàÀïÃæÓÐÌ«¶àµÄ½ÇÉ«ÊÇÖµµÃÌÖÂÛµÄ. ¹ØÓÚÊÓͼ:SpringµÄÊÓͼ·½°¸·Ç³£µÄÁé»î. Ò»¸ö¿ØÖÆÆ÷Ö´ÐпÉÒÔͨ¹ýresponse ·µ»ØModelAndView¶ÔÏónull,¾Í¿ÉÒÔÖ±½Óдµ½Ò»¸öÊÓͼ.ÔÚͨ³£µÄ×´¿öÏÂ,Ò»¸öModelAndViewʵÀý½áºÏÁË Ò»¸öview ºÍÒ»¸ö model Map,°üº¬ÁËbean name ºÍ ͨѶ¶ÔÏó(ÏñÃüÁî»òÕßform,²Î¿¼Êý¾ÝµÈµÈ). ViewÃû³ÆÊǷdz£¸ß¶ËµÄµÄÅäÖ㬲»ÊÇͨ¹ýbean name, Ò»¸öproperties Îļþ¾ÍÊÇͨ¹ýÄã×Ô¼ºµÄViewResolver.Õâ¸ö³éÏóµÄmodel Map ÔÊÐíÄãÔÚÊÓͼ²ãÃæÍê³ÉÌáÈ¡,ûÓÐÈκεÄÕù±çJSP/Velocity
»òÕ߯äËû,ÿһÖÖ¶¼¿ÉÒÔÖ±½ÓÍêÕûʹÓÃ.Õâ¸ömodel Map »¹¿ÉÒÔ¼òµ¥µÃµÃµ½Êʵ±µÄ¸ñʽ»¯Êý¾ÝµÄת»»,ÏñJSP ÇëÇóÊôÐÔ»òÕßVelocity Ä£°æÄ£Ê½.
3.¼¯³É:ÓÃSpringÒ»¸ö²»Í¬web ¿ò¼Ü
Ðí¶à¿ª·¢ÍŶӽ«ÎªËûÃÇÒÑÓеÄÏîÄ¿»òÕßеÄÏîÄ¿ÒѾ»ñµÃµÄÆÚÏ޺͹¤¾ß½øÐÐͶ×Ê.ÕâÀïûÓÐÏñStrutsÄÇÑù´óÁ¿µÄͼÊéºÍ¹¤¾ß£¬µ«ÊÇͬÑùÎÒÃÇÓдóÁ¿µÄÓµÓÐSpring¿ª·¢¼¼ÇɵĿª·¢ÈËÔ±.È»¶ø,Èç¹ûÄãÔ¸ÒâÉú»îÔÚStrutsµÄ¹¹¼Ü覴ÃÖеϰ£¬Ëû½«ÊÇÄãÔÚweb²ã¿ª·¢²»´íµÄÑ¡Ôñ.µ±È»£¬ÆäËûÓ¦ÓÃÒ²ÊÇÒ»Ñù. Èç¹ûÄã²»ÏëÓÃSpringµÄ web MVC £¬µ«ÊÇÏë½èÓÃSpring¼Þ½ÓÆäËûµÄ½â¾ö·½°¸,Äã¿ÉÒԷdz£¼òµ¥µØÍ¨¹ýSpring ¼Ì³ÐÄã×Ô¼ºµÄweb ¿ò¼Ü.Äã¿ÉÒԷdz£¼òµ¥µØÍ¨¹ý
ContextLoaderListener Æô¶¯Ò»¸öSpring root application context, ²¢ÇÒ,ͨ¹ýStruts »òÕßWebWork µÄaction ÀûÓÃServletContext ÊôÐÔ(»òÕßSpring µÄhelper·½·¨)´æÈ¡Ëü. ÖµµÃ×¢ÒâµÄÊÇ, ÕâÀïûÓÐÈÎºÎµÄ \±»µ÷ÓÃ,Òò´ËûÓÐרÃŵÉ:À´×Ôweb²ãµÄÊÓͼ, Äã¿ÉÒÔ¼òµ¥µÄ½«Spring×÷Ϊһ¸ö¹ÜÀíapplication context ʵÀýÈë¿ÚµãµÄÀà¿â. ËùÓÐÄã×¢²ábeanºÍSpring·þÎñ¶¼¿ÉÒÔÔÚ²»ÐèÒªSpringµÄweb MVCµÄÇé¿ö϶¼¿ÉÒÔ±»ÄãÇáËÉÕÆÎÕ.Spring ²»ÊǺÍStruts ,WebWorkÕâЩӦÓýøÐоºÕù,Ëü½«×÷Ϊһ¸ö´¿web¿ò¼ÜÓ¦ÓÃÓÚ ºÜ¶àÁìÓò,ÒòΪËü²»ÐèÒªÅäÖÃÊý¾Ý´æ´¢ºÍÊÂÎñ²Ù×÷.ËùÒÔ,Äã¿ÉÒÔÀûÓÃSpringÌṩµÄÖмä²ãºÍÊý¾Ý´æ´¢²ãÀ´·á¸»ÄãµÄÓ¦ÓÃ,ÉõÖÁ,ÄãÏëÓÃJDBC»òÕßHibernate½øÐÐÊÂÎñ³éÏó.
4.ÌØµãºË¶ÔÁбí
Èç¹û¾Û½¹ÓÚweb Ö§³Ö,SpringµÄһЩÏÔÖøÌØµãÊÇ: Çå³þµØ½ÇÉ«·Ö
Àë:controller , validator , command object , form object , model object,ºÍ DispatcherServlet , handler mapping vs view resolver, µÈµÈ Ç¿´ó¶øÇÒÖ±½ÓµÄ¿ò¼ÜºÍ×÷ΪJavaBeansµÄÓ¦ÓÃÅäÖÃ,°üÀ¨¼òµ¥µÄ²ÎÕÕºÍÓ¦ÓÃÄÚÈÝ,ÀýÈç,´Óweb¿ØÖÆÆ÷µ½ÒµÎñ¶ÔÏóºÍÊý¾ÝУÑé. ÊÊÓ¦ÐÔ,Íâ¹Ò:ÎÞÂÛʲôÑùµÄ¿ØÖÆÆ÷Äã¶¼ÐèÒªµÃµ½´úÌæAction/ActionFormËù×öµÄÿ¼þÊÂÇéµÄ·½°¸(¼òµ¥,ÃüÁî,form,·¶Àý,¶àÖØaction,»òÕß¶¨ÖÆÒ»¸ö) ÖØÓÃÒµÎñÂß¼´úÂë,²»ÐèÒª¸´ÖÆ:Äã¿ÉÒÔÓÃÒѾÓеÄÒµÎñÂß¼¶ÔÏó×÷ΪÃüÁî»òÔòform¶ÔÏó´úÌæ·´ÉäÌØ¶¨µÄActionForm×ÓÀà. ¿É¶©ÖƵİºÍÊý¾ÝУÑé:×÷ΪӦÓü¶µÄÊäÈë»úÖÆµÄ´íÎóУÑé,¹Ì¶¨ÈÕÆÚºÍÊý×ְ,ÀýÈç,ͨ¹ýÊÖ¶¯¼ì²éºÍת»»ÒµÎñ¶ÔÏóÀ´Ìæ»»µ¥¸öµÄstring¡£ ¿É¶©ÖƵIJÙ×÷,¿É¶©
ÖÆµÄÊÓͼ·½°¸:ͨ¹ýname/value MapÁé»îµÄÄ£ÐÍ´«ËÍ,ÓÃÒ»¸ö¼òµ¥µÄ·½·¨´Ó¼òµ¥µ½¸´ÔÓ²Ù×÷Ó³ÉäºÍÊÓͼ·½°¸²ßÂÔ.
±¾µØ¶¨ÖƺÍÖ÷Ìâ·½°¸:SpringûÓÐtaglib,Íêȫ֧³ÖÓÚJSPs£¬JSTL,²»ÐèÒª¶îÍâµÄÁ¬½Ó¾Í¿ÉÒÔÖ§³ÖVelocity,µÈµÈ. ¼òµ¥µ«ÊÇÇ¿´óµÄtag library±ÜÃâÁËHTML²úÉúµÄ»ìÂÒ,×î´óÏ޶ȵÄÁé»îÀ©Õ¹Á˱ê¼Ç´úÂë.
Ïà¹ØÍÆ¼ö£º