??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲精品人成无码中文毛片,亚洲AV综合色区无码一区,中文字幕亚洲色图 http://www.tkk7.com/jackylpz/category/8341.html目标 --> 每天都要象过q一PQ! zh-cn Fri, 02 Mar 2007 06:47:16 GMT Fri, 02 Mar 2007 06:47:16 GMT 60 谈谈蜂蜜的好处和容用法 http://www.tkk7.com/jackylpz/archive/2006/12/21/89304.htmlq年 q年 Thu, 21 Dec 2006 08:12:00 GMT http://www.tkk7.com/jackylpz/archive/2006/12/21/89304.html http://www.tkk7.com/jackylpz/comments/89304.html http://www.tkk7.com/jackylpz/archive/2006/12/21/89304.html#Feedback 0 http://www.tkk7.com/jackylpz/comments/commentRss/89304.html http://www.tkk7.com/jackylpz/services/trackbacks/89304.html 容?jng)_Q-q和蜂q 一、常食蜂蜜可保健康长? 蜂蜜是工蜂采p在l(f)中酿成。根据采蜜季节不同而有春、夏、冬蜜之分,以冬蜜质量最好。从野外如树上、岩z等采取者称为野蜂蜜Q又叫石蜜或岩蜜Q质量最好,但量有限,因而市面上见到的多是h工养蜂所取的蜂蜜。蜂蜜对Z健康的好处早已ؓZ认识。《神农本草经》把蜜列为有益于人的上品Q古希腊蜜是“天赐的C物”,而印度的《吠陀l》则说蜂蜜可益寿延年。我国梁代名医陶弘景说过Q“道家之丸,多用蜂蜜Q修仙之人,单食蜂蜜Q谓能长生。”这U说法虽有夸张之嫌,但仍充分说明了蜂蜜在营养及医疗上的作用? 营养分析表明Q蜂蜜中含有大约35Q葡萄糖Q?0Q果p,q两U糖都可以不l过消化作用而直接被Z所吸收利用。蜂蜜还含有与h体血清浓度相q的多种无机盐,q含有一定数量的l生素B1、B2、B6及铁、钙、铜、锰、磷、钾{。蜂蜜中含有淀(wn)_酶、脂肪酶、{化酶{,是食物中含酶最多的一U。酶是帮助h体消化、吸收和一pd物质代谢及化学变化的促进物。蜂蜜的气味芳香可口Q从营养和保健h(hun)值来看,不仅是滋补、益寿gq之品,又是ȝ之良药? 蜂蜜作ؓ药用Q在中国已有数千q的历史Q功效良好。明代医学家李时珍指出:“蜂蜜入药之功有五:清热也;补中也;润燥也;解毒也;止痛也。生则性凉Q故能清热。熟则性温Q故能补中。甘而和qI故能解毒。柔而濡泽,故能润燥。缓可以L,故能止心腹肌肉创伤之痛,和可以致中,故能调和百药Q而与甘草同功。? 在床上Q蜂蜜不仅可以治疗胃炎,q可以在蜂蜜中加上某些药物治疗溃疡病。如每晨用温开水冲蜂蜜6克,I服或用丹?5克,木香6克,炙甘?克,煎汁冲蜂蜜服Q可ȝ胃十二指肠溃疡以及各U胃痛症。ؓ什么蜂蜜有此疗效呢Q原来蜂蜜是一U潜在的性食物,它所含的锰等无机盐,有促q食物的消化和同化作用,从而减轻胃肠负担而缓解症状? 若用蜂蜜30克,炒枣仁末15克,?ơ冲服,有很好的宁心安神作用Q可d慌、失眠、健忘、多梦。如加入五味?克,柏子?克,q可以增忆力Q改善智能? 如果高血压、肝脏病、心脏病(zhn)者,早晚I?杯蜂蜜水Q对上述疄均有一定的疗效。若用丹参、首乌各15克,水煎取汁Q冲蜂蜜1汤匙内服Q功效更佟뀂用蜂蜜30克,_3克,加凉开水调匀Q每天早晚各?ơ,有良好的润肠通便作用Q尤光宜于老年人、体p、病后有便秘的?zhn)者? 当有呼吸道病变,出现阴虚肺燥Q久x痰时Q可用款冬花10克,癑15克,玉竹15克,煎水取汁Q调入蜂?汤匙饮用。也可在I心雪梨中放q蜂蜜适量Q隔水炖服,可消除因气候干燥引L咽喉q燥、发痒的感觉Qƈ有利于气中的积痰顺利咳出。因此,呼吸pȝ疄d之后Q如能经帔R服蜂蜜,不但可防止旧病复发,q有强壮之功? 对于生长期的儿童Q蜂蜜常是他们紧喜爱的食物,蜂蜜中含有铁和叶酸,常吃可以预防和纠正儿童的贫血? 此外Q蜂蜜还有润肌白肤的作用Q由于蜂蜜营M富而多样化Q又易被Z吸收利用Q对于皮肤有滋润作用Q尤其是冬季气候干燥时Q多吃蜂蜜能防止皮肤皲裂。很多高U的化妆品,是由蜂蜜提炼而成的,可见它对皮肤有良好的保护作用。如能长期内服及外敷外涂Q有助美容,q能益寿延年? 二、自制蜂蜜面? 蜂蜜黄瓜面膜Q美白除皱) 取鲜黄瓜汁加入奶_、蜂蜜适量Q风油精数滴调匀后涂面,20Q?0分钟后洗净Q或黄瓜洗净切薄片直接脓(chung)于脸部,h润肤、增白、除q作用? 蜂蜜白芷面膜Q去斑美白) 1、取白芷10克,白附?0克,ql末Q加水和蜂蜜适量调奖敷面Q?0分钟后洗净Q有皱、消斑、增白作用,适用于面部色素沉着或黄褐增斑?zhn)者? 2、材料:白芷6克;蛋黄1个;蜂蜜 1大匙Q小黄瓜?1匙Q橄榄a3匙? 做法Q? 1.先将白芷_末Q装在碗中,加入蛋黄搅均匀? 2.再加入蜂蜜和黄瓜汁Q调匀后涂抹于怸Q约二十分钟后,再用清水冲洗q净? 3.脸洗净后,用化妆棉沑֏榄油,敷于怸Q约5分钟? 4.然后再以热毛巾覆盖在怸Q此时化妆棉不需拿掉? 5.{毛巑ֆ却后Q再把毛巑֒化妆取下,z净脔R卛_? 蜂蜜珍珠_面? 准备一个干净的小瓶子Q倒入大半瓶珍珠粉Q再~缓倒入蜂蜜Q边倒边搅拌Q蜂蜜和珍珠粉充分混合Q注意蜂蜜不要倒得q多Q调成糊状即可。这样面膜就做好了? 使用前,先用温水把脸z净Q然后用棉{蘸着调好得面膜均匀得涂在脸上,不要太厚Q薄薄一层即可,q?-2时后洗掉,可以使脸光滑Q有光泽? U酒蜂蜜面膜Q美白滋养) U酒中的葡萄酒酸是果酸Q能够促q角质新城代谢,淡化色素Q让皮肤更白皙光滑。蜂蜜具有保湿和滋养的功效? Ҏ(gu)Q将一杯U酒??勺子蜂蜜调至稠的状态后Q均匀的敷在脸上,八分q后用温水洗q净? 注意Q酒_过敏的人慎用! 蜂蜜双仁面膜Q去斑) 冬瓜仁内含脂肪a酸、瓜胺酸{成分,有E斑的功效。桃仁有丰富的维他命E、维他命B6Q不仅帮助肌肤抗氧化Q还能减外线的伤実뀂蜂蜜的保湿效果和滋ȝ功效Q让面膜的效果更好? Ҏ(gu)Q将冬瓜子仁、桃仁晒q后成l分Q加入适量蜂蜜混合成粘E膏Ӟ每晚睡前涂在斑点上,W二天早晨洗净Q敷三个星期后,斑点会逐渐变EQ治疗时要注意防晒? 蜂蜜甘a面膜Q补_ 蜂蜜一勺,甘a一勺,对两勺水Q充分合,x面膜膏,使用时轻L于脸部和颈部QŞ成薄膜,20Q?5分钟后小心将面膜L卛_Q这U面膜可用于普通、干燥性衰萎皮肤,每周1-2ơ,30Q?5天一个疗E? 蜂蜜番茄面膜Q美白除皱) 先将番茄压烂取汁Q加入适量蜂蜜和少讔R_调成膏Ӟ涂于面部保持20Q?0分钟Q具有皮肤滋润、白嫩、柔软的作用Q长期用还h斑除皱和治疗皮肤痤疮等功能? 蜂蜜柠檬面膜Q防晒) 生鸡蛋一个,蜂蜜一匙Q柠檬半个,面粉适量Q合后搅拌成膏Ӟ敷面后入睡,W二天用温水z净。坚持用有较显著的防晒作用? 蜂蜜敷面 蜂蜜能供l皮肤养分ƈ能保持肌肤弹性,因此也被UCؓ是“营L面”。将蜂蜜加在面粉或麦_之中,搅拌成糊Ӟ在洗完脸后敷在脸部,U过30分钟后用温水z掉便可以了。因蜂蜜中有异味Q可适当加入几滴柠檬汁以减少味道? 蜂蜜酸奶面膜(收敛毛孔) 1、蜂蜜和酸奶?Q?的比例拌在一P涂在怸Q?5分钟后用清水z去卛_Q此N膜是收敛毛孔的? 2、酸牛奶、蜂蜜、柠檬汁?00毫克Q加5_维生素E调匀Q敷面ƈ保留15分钟,然后用清水洗净。此法可促进皮表上的ȝ?yu)脱落,新细胞(yu)再生,从而达到健皮肤的目的? 三、蜂蜜洗面美Ҏ(gu) 取新鲜、纯净、浅艌Ӏ不易结晶的优质天然蜂蜜Q装入小口美容用ȝ容器内(炎热夏季L|冰p藏室内)? 每次z脸Ӟ先用温水清洗面,然后倒出适量蜂蜜于手掌心Q双掌对搓(如果感觉太稠Q可用指蘸取少量水混合均匀Q,然后双手在面部向上向外打圈按摩,重点在下q几个部位细致按摩:D鱼尾U处Q用双手指肚作环状按摩;额部抬头U作垂直按摩QE冀两侧环状按摩QE梁边~作上下按摩Q颈w位由下而上按摩Qx两侧上下按摩Q口部四周作八字或倒八字按摩。按摩完毕,用温水清z干净Q涂搽营L肤品? 蜂蜜z面不仅单方便,而且容效果十分显著Q坚?周以上就能明显感觉到面部z白l腻Q自然红润,富有光泽Q皱U减。用后肌肤无紧lhQ舒适自Ӟ长期使用Q效果尤其明显。蜂蜜洗面还对皮肤过敏、皮肤干燥具有防L果。同Ӟ每天早晚内服王浆蜜,效果更好? 四、蜂蜜减肥法 蜂蜜是一U天然的营养剂,它包含可以燃烧h体能量的良质p分、维生素以及矿物质等。在一日三中Q只要加入一点蜂蜜,可以避免脂肪在Z中积聚下来? 蜂蜜h优良的杀菌效果与解毒效果Q它有助于把体内U聚下的废物排出体外Q让全n的新陈代谢功能得到改善,使得那些׃不能很好地消耗而在体内U聚下来的多余脂肪作量而得到燃烧。蜂蜜的p分如能从胃q送到血液中Q就会变成能量,很快地消除疲功뀂由于血pg升,I感也消失了? A、蜂蜜加白醋减肥法: 在日帔R食规律不变的情况下,蜂蜜和白醋?Q?的比例食用,具体Ҏ(gu)如下Q? 1、早前20分钟I? 2、中和晚餐后立d 注意Q挑选白醋时要选择l大c뀁高梁、黄豆等加工而成的,量避免含有化学品的Q同时徏议不要用果醋,因ؓ果醋是保健醋Q相对于减肥逊色些。蜂蜜和白醋的比例可以根据个人需要调整? B、早饭以前可以在喝水时加入蜂蜜,午饭与晚饭时则吃?yu)量的粥。一般h在吃蜂蜜两天后就感觉到n体轻松,心情愉快。五天以后可以吃面条cd易消化的东西Q然后慢慢恢复原来的饮食?蜂蜜可以消除体内垃圾QZ恢复原来的新陈代谢功能? 五、蜂蜜的其它容用法 1 、用蜂蜜作营L面剂 把蜂蜜加在面_中Q拌成糊Ӟz脸时敷于脸部,30分钟后用温开水洗净。蜂蜜对于皮肤没有刺Ȁ性,用于保养皮肤十分有效? 2、蜂蜜可以消除粉? 把脸z净后,用棉{蘸量蜂蜜Q直接涂在粉Z。在寝前用,非常有效? 蜂蜜中含有大量的l生素、}基酸及多U活性物质,可调节内分泌、抑制皮脂腺q多分泌脂肪Q改善脂肪酸代谢q改善血液@环、增强毛l血功能,促进血液将营养q送到皮肤层,而且蜂蜜q有很好的抑菌杀菌作用,能有效的抑制和杀灭毛囊中的细菌。因此,蜂蜜不但不会促长青春痘,相反q能防治青春痘,使皮肤变的光滑柔润? 3、用蜂蜜制作冰ʎ_? 香皂含有性,会洗ȝ肤脂肪,加一点蜂蜜就可以补救? 4、用蜂蜜按摩w体 蜂蜜的粘性可以防止皮肤水分蒸发。日晒而脱皮的后颈、背部、额头等处,涂上蜂蜜轻轻按摩Q立卌改善。蜂蜜中加入榄Ҏ(gu)婴aQ在面部轻轻按摩Q蜂蜜便能渗入皮肤内。不知不觉间׃蜂蜜的滋M但会qp变得细嫩,而且q会充满光泽? 5、ʎ前润? 沐ʎ前用蜂蜜保养。在沐ʎ之前Q用蜂蜜涂全w,其是脚底、膝盖。手肘等部位要多一炏V?0分钟后,q入Q然后再用香皂或沐ʎ露洗一遍,z完澡后Q会觉得全n滑腻如凝脂? 6、蜂蜜美发素 用一蜜与半杯牛奶混合在一Pz完头后用这U合液在头上按摩,q?5分钟后洗净Q头发会变得光滑? 7、蜂蜜美Ҏ(gu) A、取蜂蜜?倍水E释后每天涂敷面部Q然后用手轻L摩,可皮肤光洁l嫩Q减皱U,保持自然U润Q还能防止新的皱U出现? B、蜂?0克,一个鸡蛋清Q搅拌后攄中密备用,可用一周左叟뀂夏季放在冰内保存Q用时倒少许在手掌中,均匀涂于面部Q保留半时清水z净Q能紧羃面部皮肤Q消除皱U,增加营养Q洁净、增白皮肤。早晚各一ơ,持箋一个月后,面部皮肤光滑、细腅R白净、长期用效果更佟? 8、自制蜂蜜面? A、将Ҏ(gu)煮熟Q捣烂,加入蜂蜜与^脂,制成润肤面膜膏敷面,长期使用可o肤洁如玉? B、蜂?0克,柠檬汁一汤匙Q甜杏仁半汤匙,蛋清两个Q淀(wn)_适量Q制成Y膏,早晚擦用Q可滋润皮肤Q增加弹性? 六、蜂蜜疗法治感冒 我们俗称的“伤风”或“感冒”,pL鼅R咽、喉部的感染(上呼吔R感染)Q是最常见的呼吔R感染性疾病,因病原体不同而分为病毒性和l菌性两大类。病毒性占上感发病?0%以上Q一般通过含有病毒的飞沫或l污染的用具q行传播Q细菌性感染可直接感染或发于病毒感染之后Q以溶血性链球菌为最常见。床以发热、恶寒、头痛、E塞、流涕、咳嗽、咽痛、声嘶等为基本特征。其ȝ斚w是应q速减ȝ情、羃短病E、预防合q症。蜂产品及其配方Ҏ(gu)有良好的预防作用? 1、蜜姜感冒饮 配方Q蜂蜜、姜汁各适量? 用法Q将蜂蜜、姜汁按1?的比例配刉用? LQ普通感冒? 2、柠檬蜜? 配方Q蜂?00克,柠檬1个? 用法Q将柠檬榨汁Q溶解在800毫升沸水中,?00克蜂蜜合,作ؓ1天的用量? LQ流行性感冒或普通型感冒? 3、鲜蜜红? 配方Q蜂?0克,U茶若干? 用法Q蜂?0克冲红茉用? LQ流行性感冒或普通型感冒? 4、蒜蜜饮 配方Q蜂蜜、大蒜各适量? 用法Q将大蒜剥皮、洗净、磨,加等量蜂蜜匀Q日?ơ,每次1匙蒜蜜,用温开水冲服? LQ流行性感冒? 5、白菊蜜胶茶 配方Q蜂蜜、蜂胶水溶液(当地蜂品公司购?各适量Q杭白菊1克? 用法Q沸?杯冲泡杭白菊Q待水温降至40℃时兑入蜂蜜15克、蜂胶水溶液5~10滴合后代茶饮? LQ主L冒? 6、蜜奶感冒茶 配方Q蜂?5克,牛奶1杯? 用法Q将鲜牛奶煮沸,待温度降?0℃时加入蜂蜜饮之Q日?ơ? LQ感冒? 7、钩藤蜜? 配方Q蜂蜜、钩藤各15克,l茶1克? 用法Q钩藤加?00毫升Q煮?分钟Q去渣,加入蜂蜜与绿Ӟ日服1剂,?ơ温服? LQ流行性感冒? 说明Q流行性感冒由病毒引vQ表Cؓd、喷嚏、咽痛、声嘶、咳嗽、发烧、头痛、n痛,外周血白细?yu)减等Qƈ有流行趋ѝ? 普通感冒即“伤风”,多由病毒引vQ全w表现较行性感冒轻微,如头痛、牙痛、发热等? 七、蜂蜜加牛奶~解消除痛经 每晚睡前喝一杯加一蜜的热牛Ӟ卛_~解甚至消除痛经之苦。由于牛奶含钑֤Q而蜂蜜含有丰富的镁。而研I表明,钑֯经冲动的传对{血液的凝固q程都v重要的作用,它能~和情A、抑制疼痛、防止感染及减少l期p量;镁对大脑中枢经h镇静作用Q能调节心理Q消除紧张心理,减轻压力? q里再多说一点: 另一个对付痛l的对策是服用维生素c药物。B族维生素Q特别是B6对经前紧张症有显著疗效,它能E_情AQ帮助睡眠,使h_֊充沛Qƈ能减轻腹部疼痛。香蕉中含有较多的B族维生素Q痛l的JM不妨多吃一些,试试看有没有效果?br /> 中国十大蜂蜜榜中?1 汪氏蜜蜂?中国驰名商标,江西省名牌? 2 冠生?(中国驰名商标,国家特大型集? 3 百花?全国蜂品龙头企业,北京名牌) 4 老蜂?全国知名蜂蜜品牌) 5 博士?全国知名蜂蜜品牌) 6 蜂之?全国知名蜂蜜品牌) 7 颐园?全国知名蜂蜜品牌) 8 老山?全国知名蜂蜜品牌) 9 天骐q(全国知名蜂蜜品牌) 10 天新蜂?img src ="http://www.tkk7.com/jackylpz/aggbug/89304.html" width = "1" height = "1" /> ]]> 使用 Spring 更好地处?Struts 动作 http://www.tkk7.com/jackylpz/archive/2006/04/16/41354.htmlq年 q年 Sun, 16 Apr 2006 10:24:00 GMT http://www.tkk7.com/jackylpz/archive/2006/04/16/41354.html http://www.tkk7.com/jackylpz/comments/41354.html http://www.tkk7.com/jackylpz/archive/2006/04/16/41354.html#Feedback 0 http://www.tkk7.com/jackylpz/comments/commentRss/41354.html http://www.tkk7.com/jackylpz/services/trackbacks/41354.html 使用 Spring 更好地处?nbsp;Struts 动作
三种整合 Struts 应用E序?nbsp;Spring 的方?/u> U别: 中 George Franciscus , 负责? Nexcel 2005 q?nbsp;11 ?nbsp;03 ?br /> Struts Recipes 的合著?nbsp;George Franciscus 介l另一个重大的 Struts 整合H门 ?? q次是将 Struts 应用E序导入 Spring 框架。请跟随 GeorgeQ他向(zhn)展C如何改?nbsp;Struts 动作Q得管?nbsp;Struts 动作像理 Spring beans 那样。结果是一个增强的 web 框架Q这个框架可以方便地利用 Spring AOP 的优ѝ?br />(zhn)肯定已l听说过控制反{ (IOC) 设计模式Q因为很长一D|间以来一直在传关于它的信息。如果?zhn)在Q何功能中使用q?nbsp;Spring 框架Q那么?zhn)q道其原理的作用。在本文中,我利用这一原理把一?nbsp;Struts 应用E序注入 Spring 框架Q?zhn)亲w体会到 IOC 模式的强大?br /> 一?nbsp;Struts 应用E序整合q?nbsp;Spring 框架h多方面的优点。首先,Spring 是ؓ解决一些关?nbsp;JEE 的真实世界问题而设计的Q比如复杂性、低性能和可试性,{等。第二,Spring 框架包含一?nbsp;AOP 实现Q允许?zhn)面向方面技术应用于面向对象的代码。第三,一些h可能会说 Spring 框架只有处理 Struts ?nbsp;Struts 处理自己好。但是这是观炚w题,我演CZU将 Struts 应用E序整合?nbsp;Spring 框架的方法后Q具体由(zhn)自己决定用哪一U?br /> 我所演示的方法都是执行v来相对简单的Q但是它们却h明显不同的优炏V我为每一U方法创Z一个独立而可用的例子Q这h可以完全理解每U方法。请参阅 下蝲 部分获得完整例子源代码。请参阅 参考资料,下蝲 Struts MVC ?nbsp;Spring 框架?br />
Z?nbsp;Spring q么了不P
Spring 的创立?nbsp;Rod Johnson 以一U批判的眼光看待 Java™ 企业软g开发,q且提议很多企业N都能够通过战略C?nbsp;IOC 模式Q也UC依赖注入Q来解决。当 Rod 和一个具有奉献精的开放源码开发者团队将q个理论应用于实跉|Q结果就产生?nbsp;Spring 框架。简a之,Spring 是一个轻型的容器Q利用它可以使用一个外?nbsp;XML 配置文g方便地将对象q接在一赗每个对象都可以通过昄一?nbsp;JavaBean 属性收C个到依赖对象的引用,留给(zhn)的单Q务就只是在一?nbsp;XML 配置文g中把它们q接好?br />
IOC ?nbsp;Spring
IOC 是一U应用E序逻辑外在化的设计模式Q所以它是被注入而不是被写入客户Z码中。将 IOC 与接口编E应用结合,像 Spring 框架那样Q生了一U架构,q种架构能够减少客户机对特定实现逻辑的依赖。请参阅 参考资?nbsp;了解更多关于 IOC ?nbsp;Spring 的信息?br /> 依赖注入是一个强大的Ҏ(gu),但是 Spring 框架能够提供更多Ҏ(gu)。Spring 支持可插拔的事务理器,可以l?zhn)的事务处理提供更q泛的选择范围。它集成了领先的持久性框Ӟq且提供一个一致的异常层次l构。Spring q提供了一U用面向方面代码代替正常的面向对象代码的简单机制?br /> Spring AOP 允许(zhn)用拦截器 在一个或多个执行点上拦截应用E序逻辑。加强应用程序在拦截器中的日志记录逻辑会生一个更可读的、实用的代码基础Q所以拦截器q泛用于日志记录。?zhn)很快׃看到Qؓ了处理横切关注点QSpring AOP 发布了它自己的拦截器Q?zhn)也可以编写(zhn)自己的拦截器?br />
整合 Struts ?nbsp;Spring
?nbsp;Struts 怼QSpring 可以作ؓ一?nbsp;MVC 实现。这两种框架都具有自q优点和缺点,管大部分h同意 Struts ?nbsp;MVC 斚w仍然是最好的。很多开发团队已l学会在旉紧迫的时候利?nbsp;Struts 作ؓ构造高品质软g的基。Struts h如此大的推动力,以至于开发团队宁愿整?nbsp;Spring 框架的特性,而不愿意转换?nbsp;Spring MVC。没必要q行转换Ҏ(gu)来说是一个好消息。Spring 架构允许(zhn)将 Struts 作ؓ Web 框架q接到基?nbsp;Spring 的业务和持久层。最后的l果是现在一切条仉具备了?br /> 在接下来的小H门中,(zhn)将会了解到三种?nbsp;Struts MVC 整合?nbsp;Spring 框架的方法。我揭C每U方法的~陷q且Ҏ(gu)它们的优炏V?nbsp;一旦?zhn)了解到所有三U方法的作用Q我会向?zhn)展示一个o人兴奋的应用E序Q这个程序用的是这三种Ҏ(gu)中我最喜欢的一U?br />
三个窍?/h4>
接下来的每种整合技术(或者窍门)都有自己的优点和特点。我偏爱其中的一U,但是我知道这三种都能够加深?zhn)?nbsp;Struts ?nbsp;Spring 的理解。在处理各种不同情况的时候,q将l?zhn)提供一个广阔的选择范围。方法如下:
使用 Spring ?nbsp;ActionSupport cL?nbsp;Structs
使用 Spring ?nbsp;DelegatingRequestProcessor 覆盖 Struts ?nbsp;RequestProcessor ?nbsp;Struts Action 理委托l?nbsp;Spring 框架 装蝲应用E序环境 无论(zhn)用哪U技术,都需要?nbsp;Spring ?nbsp;ContextLoaderPlugin ?nbsp;Struts ?nbsp;ActionServlet 装蝲 Spring 应用E序环境。就像添加Q何其他插件一P单地向?zhn)?nbsp;struts-config.xml 文gd该插Ӟ如下所C:
<plug-in className=
"org.springframework.web.struts.ContextLoaderPlugIn" >
<set-property property=
"contextConfigLocation" value="/WEB-INF/beans.xml" />
</plug-in>
前面已经提到q,?nbsp;下蝲 部分Q?zhn)能够扑ֈq三个完全可使用的例子的完整源代码。每个例子都Z个书c搜索应用程序提供一U不同的 Struts ?nbsp;Spring 的整合方法。?zhn)可以在这里看C子的要点Q但是?zhn)也可以下载应用程序以查看所有的l节?br />
H门 1. 使用 Spring ?nbsp;ActionSupport
手动创徏一?nbsp;Spring 环境是一U整?nbsp;Struts ?nbsp;Spring 的最直观的方式。ؓ了它变得更单,Spring 提供了一些帮助。ؓ了方便地获得 Spring 环境Qorg.springframework.web.struts.ActionSupport cL供了一?nbsp;getWebApplicationContext() Ҏ(gu)。?zhn)所做的只是?nbsp;Spring ?nbsp;ActionSupport 而不?nbsp;Struts Action cL展?zhn)的动作,如清?nbsp;1 所C: 清单 1. 使用 ActionSupport 整合 Struts
package ca.nexcel.books.actions;
import java.io.IOException ;
import javax.servlet.ServletException ;
import javax.servlet.http.HttpServletRequest ;
import javax.servlet.http.HttpServletResponse ;
import org.apache.struts.action.ActionError;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.DynaActionForm;
import org.springframework.context.ApplicationContext;
import org.springframework.web.struts.ActionSupport;
import ca.nexcel.books.beans.Book ;
import ca.nexcel.books.business.BookService;
public class SearchSubmit extends ActionSupport { |(1)
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws IOException , ServletException {
DynaActionForm searchForm = (DynaActionForm) form;
String isbn = (String ) searchForm.get("isbn" );
//the old fashion way
//BookService bookService = new BookServiceImpl();
ApplicationContext ctx =
getWebApplicationContext(); |(2)
BookService bookService =
(BookService) ctx.getBean("bookService" ); |(3)
Book book = bookService.read(isbn.trim());
if (null == book) {
ActionErrors errors = new ActionErrors();
errors.add(ActionErrors.GLOBAL_ERROR,new ActionError
("message.notfound" ));
saveErrors(request, errors);
return mapping.findForward("failure" ) ;
}
request.setAttribute("book" , book);
return mapping.findForward("success" );
}
}
让我们快速思考一下这里到底发生了什么。在 (1) 处,我通过?nbsp;Spring ?nbsp;ActionSupport c而不?nbsp;Struts ?nbsp;Action c进行扩展,创徏了一个新?nbsp;Action。在 (2) 处,我?nbsp;getWebApplicationContext() Ҏ(gu)获得一?nbsp;ApplicationContext。ؓ了获得业务服务,我用在 (2) 处获得的环境?nbsp;(3) 处查找一?nbsp;Spring bean?br /> q种技术很单ƈ且易于理解。不q的是,它将 Struts 动作?nbsp;Spring 框架耦合在一赗如果?zhn)x换掉 SpringQ那么?zhn)必须重写代码。ƈ且,׃ Struts 动作不在 Spring 的控制之下,所以它不能获得 Spring AOP 的优ѝ当使用多重独立?nbsp;Spring 环境Ӟq种技术可能有用,但是在大多数情况下,q种Ҏ(gu)不如另外两种Ҏ(gu)合适?br />
H门 2. 覆盖 RequestProcessor
?nbsp;Spring ?nbsp;Struts 动作中分L一个更巧妙的设计选择。分ȝ一U方法是使用 org.springframework.web.struts.DelegatingRequestProcessor cL覆盖 Struts ?nbsp;RequestProcessor 处理E序Q如清单 2 所C: 清单 2. 通过 Spring ?nbsp;DelegatingRequestProcessor q行整合
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd" >
<struts-config>
<form-beans>
<form-bean name="searchForm"
type="org.apache.struts.validator.DynaValidatorForm" >
<form-property name="isbn" type="java.lang.String" />
</form-bean>
</form-beans>
<global-forwards type="org.apache.struts.action.ActionForward" >
<forward name="welcome" path="/welcome.do" />
<forward name="searchEntry" path="/searchEntry.do" />
<forward name="searchSubmit" path="/searchSubmit.do" />
</global-forwards>
<action-mappings>
<action path="/welcome" forward="/WEB-INF/pages/welcome.htm" />
<action path="/searchEntry" forward="/WEB-INF/pages/search.jsp" />
<action path="/searchSubmit"
type="ca.nexcel.books.actions.SearchSubmit"
input="/searchEntry.do"
validate="true"
name="searchForm" >
<forward name="success" path="/WEB-INF/pages/detail.jsp" />
<forward name="failure" path="/WEB-INF/pages/search.jsp" />
</action>
</action-mappings>
<message-resources parameter="ApplicationResources" />
<controller processorClass="org.springframework.web.struts.
DelegatingRequestProcessor"/> |(1)
<plug-in className="org.apache.struts.validator.ValidatorPlugIn" >
<set-property property="pathnames"
value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" />
</plug-in>
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn" >
<set-property property="csntextConfigLocation" value="/WEB-INF/beans.xml" />
</plug-in>
</struts-config>
我利用了 <controller> 标记来用 DelegatingRequestProcessor 覆盖默认?nbsp;Struts RequestProcessor。下一步是在我?nbsp;Spring 配置文g中注册该动作Q如清单 3 所C: 清单 3. ?nbsp;Spring 配置文g中注册一个动?br />
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd" >
<beans>
<bean id="bookService" class ="ca.nexcel.books.business.BookServiceImpl" />
<bean name="/searchSubmit"
class ="ca.nexcel.books.actions.SearchSubmit" > |(1)
<property name="bookService" >
<ref bean="bookService" />
</property>
</bean>
</beans>
注意Q在 (1) 处,我用名U属性注册了一?nbsp;beanQ以匚w struts-config 动作映射名称。SearchSubmit 动作揭示了一?nbsp;JavaBean 属性,允许 Spring 在运行时填充属性,如清?nbsp;4 所C: 清单 4. h JavaBean 属性的 Struts 动作
package ca.nexcel.books.actions;
import java.io.IOException ;
import javax.servlet.ServletException ;
import javax.servlet.http.HttpServletRequest ;
import javax.servlet.http.HttpServletResponse ;
import org.apache.struts.action.Action ;
import org.apache.struts.action.ActionError;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.DynaActionForm;
import ca.nexcel.books.beans.Book ;
import ca.nexcel.books.business.BookService;
public class SearchSubmit extends Action {
private BookService bookService;
public BookService getBookService() {
return bookService;
}
public void setBookService(BookService bookService) { | (1)
this .bookService = bookService;
}
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws IOException , ServletException {
DynaActionForm searchForm = (DynaActionForm) form;
String isbn = (String ) searchForm.get("isbn" );
Book book = getBookService().read(isbn.trim()); |(2)
if (null == book) {
ActionErrors errors = new ActionErrors();
errors.add(ActionErrors.GLOBAL_ERROR,new ActionError("message.notfound" ));
saveErrors(request, errors);
return mapping.findForward("failure" ) ;
}
request.setAttribute("book" , book);
return mapping.findForward("success" );
}
}
在清?nbsp;4 中,(zhn)可以了解到如何创徏 Struts 动作。在 (1) 处,我创Z一?nbsp;JavaBean 属性。DelegatingRequestProcessor自动地配|这U属性。这U设计 Struts 动作q不知道它正?nbsp;Spring 理Qƈ且(zhn)能够利?nbsp;Sping 的动作管理框架的所有优炏V由于?zhn)?nbsp;Struts 动作注意不到 Spring 的存在,所以?zhn)不需要重写?zhn)?nbsp;Struts 代码可以用其他控制反转容器来替换?nbsp;Spring?br /> DelegatingRequestProcessor Ҏ(gu)的确比第一U方法好Q但是仍然存在一些问题。如果?zhn)使用一个不同的 RequestProcessorQ则需要手动整?nbsp;Spring ?nbsp;DelegatingRequestProcessor。添加的代码会造成l护的麻烦ƈ且将来会降低(zhn)的应用E序的灵zL。此外,q有q一些用一pd命o来代?nbsp;Struts RequestProcessor 的传闅R?nbsp;q种改变会对这U解x法的使用寿命造成负面的媄响?br />
H门 3. 动作管理委托给 Spring
一个更好的解决Ҏ(gu)是将 Strut 动作理委托l?nbsp;Spring。?zhn)可以通过?nbsp;struts-config 动作映射中注册一个代理来实现。代理负责在 Spring 环境中查?nbsp;Struts 动作。由于动作在 Spring 的控制之下,所以它可以填充动作?nbsp;JavaBean 属性,qؓ应用诸如 Spring ?nbsp;AOP 拦截器之cȝҎ(gu)带来了可能?nbsp; 清单 5 中的 Action cM清单 4 中的相同。但?nbsp;struts-config 有一些不同: 清单 5. Spring 整合的委托方?br />
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd" >
<struts-config>
<form-beans>
<form-bean name="searchForm"
type="org.apache.struts.validator.DynaValidatorForm" >
<form-property name="isbn" type="java.lang.String" />
</form-bean>
</form-beans>
<global-forwards type="org.apache.struts.action.ActionForward" >
<forward name="welcome" path="/welcome.do" />
<forward name="searchEntry" path="/searchEntry.do" />
<forward name="searchSubmit" path="/searchSubmit.do" />
</global-forwards>
<action-mappings>
<action path="/welcome" forward="/WEB-INF/pages/welcome.htm" />
<action path="/searchEntry" forward="/WEB-INF/pages/search.jsp" />
<action path="/searchSubmit"
type="org.springframework.web.struts.DelegatingActionProxy" |(1)
input="/searchEntry.do"
validate="true"
name="searchForm" >
<forward name="success" path="/WEB-INF/pages/detail.jsp" />
<forward name="failure" path="/WEB-INF/pages/search.jsp" />
</action>
</action-mappings>
<message-resources parameter="ApplicationResources" />
<plug-in className="org.apache.struts.validator.ValidatorPlugIn" >
<set-property
property="pathnames"
value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" />
</plug-in>
<plug-in
className="org.springframework.web.struts.ContextLoaderPlugIn" >
<set-property property="contextConfigLocation" value="/WEB-INF/beans.xml" />
</plug-in>
</struts-config>
清单 5 是一个典型的 struts-config.xml 文gQ只有一个小的差别。它注册 Spring 代理cȝ名称Q而不是声明动作的cdQ如Q?Q处所C。DelegatingActionProxy cM用动作映名U查?nbsp;Spring 环境中的动作。这是我们使用 ContextLoaderPlugIn 声明的环境?br /> 一?nbsp;Struts 动作注册Z?nbsp;Spring bean 是非常直观的Q如清单 6 所C。我利用动作映射使用 <bean> 标记的名U属性(在这个例子中?nbsp;"/searchSubmit"Q简单地创徏了一?nbsp;bean。这个动作的 JavaBean 属性像M Spring bean 一栯填充Q?nbsp; 清单 6. ?nbsp;Spring 环境中注册一?nbsp;Struts 动作
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd" >
<beans>
<bean id="bookService" class ="ca.nexcel.books.business.BookServiceImpl" />
<bean name="/searchSubmit"
class ="ca.nexcel.books.actions.SearchSubmit" >
<property name="bookService" >
<ref bean="bookService" />
</property>
</bean>
</beans>
动作委托的优?/h5>
动作委托解决Ҏ(gu)是这三种Ҏ(gu)中最好的。Struts 动作不了?nbsp;SpringQ不对代码作M改变可用于?nbsp;Spring 应用E序中。RequestProcessor 的改变不会媄响它Qƈ且它可以利用 Spring AOP Ҏ(gu)的优点?nbsp; 动作委托的优点不止如此。一旦让 Spring 控制(zhn)的 Struts 动作Q?zhn)可以?nbsp;Spring l动作补充更强的zd。例如,没有 Spring 的话Q所有的 Struts 动作都必LU程安全的。如果?zhn)讄?nbsp;<bean> 标记?nbsp;singleton 属性ؓ“false”Q那么不用何种Ҏ(gu)Q?zhn)的应用程序都在每一个请求上有一个新生成的动作对象。?zhn)可能不需要这U特性,但是把它攑֜(zhn)的工具׃也很好。?zhn)也可以利?nbsp;Spring 的生命周期方法。例如,当实例化 Struts 动作Ӟ<bean> 标记?nbsp;init-method 属性被用于q行一个方法。类似地Q在从容器中删除 bean 之前Qdestroy-method 属性执行一个方法。这些方法是理昂贵对象的好办法Q它们以一U与 Servlet 生命周期相同的方式进行管理?br />
拦截 Struts
前面提到q,通过?nbsp;Struts 动作委托l?nbsp;Spring 框架而整?nbsp;Struts ?nbsp;Spring 的一个主要的优点是:(zhn)可以将 Spring ?nbsp;AOP 拦截器应用于(zhn)的 Struts 动作。通过?nbsp;Spring 拦截器应用于 Struts 动作Q?zhn)可以用最的代h(hun)处理横切x炏V?br /> 虽然 Spring 提供很多内置拦截器,但是我将向?zhn)展示如何创徏自己的拦截器q把它应用于一?nbsp;Struts 动作。ؓ了用拦截器Q?zhn)需要做三g事:
创徏拦截器?/ul>
注册拦截器?/ul>
声明在何处拦截代码?/ul>
q看h非常单的几句话却非常强大。例如,在清?nbsp;7 中,我ؓ Struts 动作创徏了一个日志记录拦截器?nbsp;q个拦截器在每个Ҏ(gu)调用之前打印一句话Q?br /> 清单 7. 一个简单的日志记录拦截?br />
package ca.nexcel.books.interceptors;
import org.springframework.aop.MethodBeforeAdvice;
import java.lang.reflect.Method ;
public class LoggingInterceptor implements MethodBeforeAdvice {
public void before(Method method, Object [] objects, Object o) throws Throwable {
System .out.println("logging before!" );
}
}
q个拦截器非常简单。before() Ҏ(gu)在拦截点中每个方法之前运行。在本例中,它打印出一句话Q其实它可以做?zhn)惛_的Q何事。下一步就是在 Spring 配置文g中注册这个拦截器Q如清单 8 所C: 清单 8. ?nbsp;Spring 配置文g中注册拦截器
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd" >
<beans>
<bean id="bookService" class ="ca.nexcel.books.business.BookServiceImpl" />
<bean name="/searchSubmit"
class ="ca.nexcel.books.actions.SearchSubmit" >
<property name="bookService" >
<ref bean="bookService" />
</property>
</bean>
<!-- Interceptors -->
<bean name="logger"
class ="ca.nexcel.books.interceptors.LoggingInterceptor" /> |(1)
<!-- AutoProxies -->
<bean name="loggingAutoProxy"
class ="org.springframework.aop.framework.autoproxy.
BeanNameAutoProxyCreator"> |(2)
<property name="beanNames" >
<value>/searchSubmit</valuesgt; |(3)
</property>
<property name="interceptorNames" >
<list>
<value>logger</value> |(4)
</list>
</property>
</bean>
</beans>
(zhn)可能已l注意到了,清单 8 扩展?nbsp;清单 6 中所C的应用E序以包含一个拦截器。具体细节如下: ?nbsp;(1) 处,我注册了q个拦截器?br />?nbsp;(2) 处,我创Z一?nbsp;bean 名称自动代理Q它描述如何应用拦截器。还有其他的Ҏ(gu)定义拦截点,但是q种Ҏ(gu)常见而简ѝ?br />?nbsp;(3) 处,我将 Struts 动作注册为将被拦截的 bean。如果?zhn)惌拦截其他?nbsp;Struts 动作Q则只需要在 "beanNames" 下面创徏附加?nbsp;<value> 标记?br />?nbsp;(4) 处,当拦截发生时Q我执行了在 (1) 处创建的拦截?nbsp;bean 的名U。这里列出的所有拦截器都应用于“beanNames”?br />是q样。就像这个例子所展示的,?zhn)?nbsp;Struts 动作|于 Spring 框架的控制之下,为处理?zhn)?nbsp;Struts 应用E序提供了一pd全新的选择。在本例中,使用动作委托可以L地利?nbsp;Spring 拦截器提?nbsp;Struts 应用E序中的日志记录能力?br />
l束?/h4>
在本文中Q?zhn)已经学习了?nbsp;Struts 动作整合?nbsp;Spring 框架中的三种H门。?nbsp;Spring ?nbsp;ActionSupport 来整?nbsp;StrutsQ第一U窍门中是q样做的Q简单而快P但是会将 Struts 动作?nbsp;Spring 框架耦合在一赗如果?zhn)需要将应用E序ULC个不同的框架Q则需要重写代码。第二种解决Ҏ(gu)通过委托 RequestProcessor 巧妙地解开代码的耦合Q但是它的可扩展性不强,q且?nbsp;Struts ?nbsp;RequestProcessor 变成一pd命oӞq种Ҏ(gu)持l不了很长时间。第三种Ҏ(gu)是这三种Ҏ(gu)中最好的Q将 Struts 动作委托l?nbsp;Spring 框架可以使代码解耦,从而(zhn)可以在(zhn)的 Struts 应用E序中利?nbsp;Spring 的特性(比如日志记录拦截器)?br /> 三种 Struts-Spring 整合H门中的每一U都被实现成一个完整可用的应用E序。请参阅 下蝲 部分仔细研究它们?img src ="http://www.tkk7.com/jackylpz/aggbug/41354.html" width = "1" height = "1" /> ]]>
վ֩ģ壺
輤һ |
þþƷƵ |
ƷɫƵ߹ۿԴ
|
Ʒ |
ʮ˽Ļվ |
Ʒһ
|
þþWWWѾƷ |
97þþƷĻ |
ĻmvѸӰ |
ɫƵ15 |
avƷ |
ձһۺϾþa |
պһѸ |
һĻ߹ۿ |
AV߹ۿɫ
|
Ƶ1 |
Ů18ëƬˮ |
ƷþþþþԻ |
99߹ۿƵ |
רר |
վѹۿ |
ŷAۺһ
|
wwwƷþþ |
91㽶߹ۿ |
ɫƵ߹ۿwww |
91ҹƷһ |
߹ۿ |
AAƬ߹ۿ |
˳ɼƵ߹ۿ |
ԾƷAAƬ߲ |
91˾Ʒ |
LƷþ |
һƵ |
ƬվɫƬѹۿAPP |
þþƷŮav鶹 |
õӰ߹ۿ |
AV |
һȫëƬ |
߲ѲavƬ |
h߹ۿƵվ |
Ƭѹۿ |