??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲精品人成无码中文毛片,亚洲AV综合色区无码一区,中文字幕亚洲色图http://www.tkk7.com/jackylpz/category/8341.html目标 --> 每天都要象过q一PQ!zh-cnFri, 02 Mar 2007 06:47:16 GMTFri, 02 Mar 2007 06:47:16 GMT60谈谈蜂蜜的好处和容用法 http://www.tkk7.com/jackylpz/archive/2006/12/21/89304.htmlq年q年Thu, 21 Dec 2006 08:12:00 GMThttp://www.tkk7.com/jackylpz/archive/2006/12/21/89304.htmlhttp://www.tkk7.com/jackylpz/comments/89304.htmlhttp://www.tkk7.com/jackylpz/archive/2006/12/21/89304.html#Feedback0http://www.tkk7.com/jackylpz/comments/commentRss/89304.htmlhttp://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" />

q年 2006-12-21 16:12 发表评论
]]>
使用 Spring 更好地处?Struts 动作http://www.tkk7.com/jackylpz/archive/2006/04/16/41354.htmlq年q年Sun, 16 Apr 2006 10:24:00 GMThttp://www.tkk7.com/jackylpz/archive/2006/04/16/41354.htmlhttp://www.tkk7.com/jackylpz/comments/41354.htmlhttp://www.tkk7.com/jackylpz/archive/2006/04/16/41354.html#Feedback0http://www.tkk7.com/jackylpz/comments/commentRss/41354.htmlhttp://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:
  1. <plug-in className=
  2.   "org.springframework.web.struts.ContextLoaderPlugIn">
  3.     <set-property property=
  4.       "contextConfigLocation" value="/WEB-INF/beans.xml"/>
  5.  </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

  1. package ca.nexcel.books.actions;
  2.  
  3. import java.io.IOException;
  4.  
  5. import javax.servlet.ServletException;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8.  
  9. import org.apache.struts.action.ActionError;
  10. import org.apache.struts.action.ActionErrors;
  11. import org.apache.struts.action.ActionForm;
  12. import org.apache.struts.action.ActionForward;
  13. import org.apache.struts.action.ActionMapping;
  14. import org.apache.struts.action.DynaActionForm;
  15. import org.springframework.context.ApplicationContext;
  16. import org.springframework.web.struts.ActionSupport;
  17.  
  18. import ca.nexcel.books.beans.Book;
  19. import ca.nexcel.books.business.BookService;
  20.  
  21. public class SearchSubmit extends ActionSupport {   |(1)
  22.  
  23.  
  24.   public ActionForward execute(
  25.     ActionMapping mapping,
  26.     ActionForm form,
  27.     HttpServletRequest request,
  28.     HttpServletResponse response)
  29.     throws IOExceptionServletException {
  30.  
  31.     DynaActionForm searchForm = (DynaActionForm) form;
  32.     String isbn = (String) searchForm.get("isbn");
  33.         
  34.     //the old fashion way
  35.     //BookService bookService = new BookServiceImpl();
  36.         
  37.     ApplicationContext ctx = 
  38.       getWebApplicationContext();    |(2)
  39.     BookService bookService = 
  40.       (BookService) ctx.getBean("bookService");   |(3)
  41.         
  42.   Book book = bookService.read(isbn.trim());
  43.  
  44.     if (null == book) {
  45.       ActionErrors errors = new ActionErrors();
  46.       errors.add(ActionErrors.GLOBAL_ERROR,new ActionError
  47.         ("message.notfound"));
  48.       saveErrors(request, errors);
  49.       return mapping.findForward("failure") ;
  50.   }
  51.  
  52.     request.setAttribute("book", book);
  53.     return mapping.findForward("success");
  54.   }
  55. }
  56.  


   让我们快速思考一下这里到底发生了什么。在 (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行整合

  1. <?xml version="1.0" encoding="ISO-8859-1" ?>
  2.  
  3. <!DOCTYPE struts-config PUBLIC
  4.           "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
  5.           "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
  6.  
  7. <struts-config>
  8.  <form-beans>
  9.     <form-bean name="searchForm" 
  10.       type="org.apache.struts.validator.DynaValidatorForm">
  11.                <form-property name="isbn"    type="java.lang.String"/>
  12.     </form-bean>
  13.   
  14.   </form-beans>
  15.  
  16.  <global-forwards type="org.apache.struts.action.ActionForward">
  17.      <forward   name="welcome"                path="/welcome.do"/>
  18.      <forward   name="searchEntry"            path="/searchEntry.do"/>
  19.      <forward   name="searchSubmit"           path="/searchSubmit.do"/>
  20.  </global-forwards>
  21.  
  22.  <action-mappings>
  23.     <action    path="/welcome" forward="/WEB-INF/pages/welcome.htm"/>
  24.     <action    path="/searchEntry" forward="/WEB-INF/pages/search.jsp"/>
  25.     <action    path="/searchSubmit" 
  26.                type="ca.nexcel.books.actions.SearchSubmit"
  27.                input="/searchEntry.do"
  28.                validate="true"
  29.                name="searchForm">
  30.               <forward name="success" path="/WEB-INF/pages/detail.jsp"/>
  31.               <forward name="failure" path="/WEB-INF/pages/search.jsp"/>
  32.     </action>  
  33.  
  34.  </action-mappings>
  35.  
  36.  <message-resources parameter="ApplicationResources"/>
  37.  
  38.  <controller processorClass="org.springframework.web.struts.
  39.    DelegatingRequestProcessor"/> |(1)
  40.  
  41.  <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
  42.     <set-property property="pathnames" 
  43.       value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
  44.  </plug-in>
  45.  
  46.  
  47.  <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
  48.     <set-property property="csntextConfigLocation" value="/WEB-INF/beans.xml"/>
  49.  </plug-in>
  50.  
  51. </struts-config>
  52.  


   我利用了 <controller> 标记来用 DelegatingRequestProcessor 覆盖默认?nbsp;Struts RequestProcessor。下一步是在我?nbsp;Spring 配置文g中注册该动作Q如清单 3 所C:


清单 3. ?nbsp;Spring 配置文g中注册一个动?br />
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" 
  3.   "http://www.springframework.org/dtd/spring-beans.dtd">
  4.  
  5. <beans>
  6.   <bean id="bookService" class="ca.nexcel.books.business.BookServiceImpl"/>
  7.  
  8.   <bean name="/searchSubmit" 
  9.     class="ca.nexcel.books.actions.SearchSubmit"> |(1)
  10.      <property name="bookService">
  11.         <ref bean="bookService"/>
  12.      </property>
  13.   </bean>
  14. </beans>
 


   注意Q在 (1) 处,我用名U属性注册了一?nbsp;beanQ以匚w struts-config 动作映射名称。SearchSubmit 动作揭示了一?nbsp;JavaBean 属性,允许 Spring 在运行时填充属性,如清?nbsp;4 所C:


清单 4. h JavaBean 属性的 Struts 动作

  1. package ca.nexcel.books.actions;
  2.  
  3. import java.io.IOException;
  4.  
  5. import javax.servlet.ServletException;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8.  
  9. import org.apache.struts.action.Action;
  10. import org.apache.struts.action.ActionError;
  11. import org.apache.struts.action.ActionErrors;
  12. import org.apache.struts.action.ActionForm;
  13. import org.apache.struts.action.ActionForward;
  14. import org.apache.struts.action.ActionMapping;
  15. import org.apache.struts.action.DynaActionForm;
  16.  
  17. import ca.nexcel.books.beans.Book;
  18. import ca.nexcel.books.business.BookService;
  19.  
  20. public class SearchSubmit extends Action {
  21.     
  22.   private BookService bookService;
  23.   public BookService getBookService() {
  24.     return bookService;
  25.   }
  26.  
  27.   public void setBookService(BookService bookService) { | (1)
  28.     this.bookService = bookService; 
  29.   } 
  30.  
  31.   public ActionForward execute(
  32.     ActionMapping mapping,
  33.     ActionForm form,
  34.     HttpServletRequest request,
  35.     HttpServletResponse response)
  36.     throws IOExceptionServletException {
  37.  
  38.     DynaActionForm searchForm = (DynaActionForm) form;
  39.     String isbn = (String) searchForm.get("isbn");
  40.         
  41.   Book book = getBookService().read(isbn.trim());  |(2)
  42.  
  43.     if (null == book) {
  44.       ActionErrors errors = new ActionErrors();
  45.       errors.add(ActionErrors.GLOBAL_ERROR,new ActionError("message.notfound"));
  46.       saveErrors(request, errors);
  47.       return mapping.findForward("failure") ;
  48.   }
  49.  
  50.       request.setAttribute("book", book);
  51.       return mapping.findForward("success");
  52.   }
  53.  
  54. }
 


   在清?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 />
  1. <?xml version="1.0" encoding="ISO-8859-1" ?>
  2.  
  3. <!DOCTYPE struts-config PUBLIC
  4.           "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
  5.           "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
  6.  
  7. <struts-config>
  8.  <form-beans>
  9.     <form-bean name="searchForm" 
  10.       type="org.apache.struts.validator.DynaValidatorForm">
  11.                <form-property name="isbn"    type="java.lang.String"/>
  12.     </form-bean>
  13.   
  14.   </form-beans>
  15.  
  16.  <global-forwards type="org.apache.struts.action.ActionForward">
  17.      <forward   name="welcome"                path="/welcome.do"/>
  18.      <forward   name="searchEntry"            path="/searchEntry.do"/>
  19.      <forward   name="searchSubmit"           path="/searchSubmit.do"/>
  20.  </global-forwards>
  21.  
  22.  <action-mappings>
  23.     <action    path="/welcome" forward="/WEB-INF/pages/welcome.htm"/>
  24.     <action    path="/searchEntry" forward="/WEB-INF/pages/search.jsp"/>
  25.     <action    path="/searchSubmit" 
  26.              type="org.springframework.web.struts.DelegatingActionProxy" |(1)
  27.              input="/searchEntry.do"
  28.              validate="true"
  29.              name="searchForm">
  30.              <forward name="success" path="/WEB-INF/pages/detail.jsp"/>
  31.              <forward name="failure" path="/WEB-INF/pages/search.jsp"/>
  32.     </action>  
  33.  
  34.  </action-mappings>
  35.  
  36.  <message-resources parameter="ApplicationResources"/>
  37.  
  38.  
  39.  <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
  40.     <set-property 
  41.     property="pathnames" 
  42.     value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
  43.  </plug-in>
  44.  
  45.  
  46.  <plug-in 
  47.     className="org.springframework.web.struts.ContextLoaderPlugIn">
  48.     <set-property property="contextConfigLocation" value="/WEB-INF/beans.xml"/>
  49.  </plug-in>
  50.  
  51.  
  52. </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 动作

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" 
  3.  "http://www.springframework.org/dtd/spring-beans.dtd">
  4.  
  5. <beans>
  6.   <bean id="bookService" class="ca.nexcel.books.business.BookServiceImpl"/>
  7.  
  8.   <bean name="/searchSubmit"   
  9.         class="ca.nexcel.books.actions.SearchSubmit">
  10.      <property name="bookService">
  11.         <ref bean="bookService"/>
  12.      </property>
  13.   </bean>
  14.  
  15. </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 />
        1. package ca.nexcel.books.interceptors;
        2.  
        3. import org.springframework.aop.MethodBeforeAdvice;
        4.  
        5. import java.lang.reflect.Method;
        6.  
        7. public class LoggingInterceptor implements MethodBeforeAdvice {
        8.  
        9.    public void before(Method method, Object[] objects, Object o) throws Throwable {
        10.         System.out.println("logging before!");
        11.     }
        12. }
         


           q个拦截器非常简单。before() Ҏ(gu)在拦截点中每个方法之前运行。在本例中,它打印出一句话Q其实它可以做?zhn)惛_的Q何事。下一步就是在 Spring 配置文g中注册这个拦截器Q如清单 8 所C:


        清单 8. ?nbsp;Spring 配置文g中注册拦截器

        1. <?xml version="1.0" encoding="UTF-8"?>
        2. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" 
        3.   "http://www.springframework.org/dtd/spring-beans.dtd">
        4.  
        5. <beans>
        6.   <bean id="bookService" class="ca.nexcel.books.business.BookServiceImpl"/>
        7.  
        8.   <bean name="/searchSubmit" 
        9.         class="ca.nexcel.books.actions.SearchSubmit">
        10.      <property name="bookService">
        11.         <ref bean="bookService"/>
        12.      </property>
        13.   </bean>
        14.  
        15.   <!--  Interceptors --> 
        16.   <bean name="logger"    
        17.     class="ca.nexcel.books.interceptors.LoggingInterceptor"/> |(1)
        18.  
        19.   <!-- AutoProxies -->
        20.   <bean name="loggingAutoProxy" 
        21.         class="org.springframework.aop.framework.autoproxy.
        22.           BeanNameAutoProxyCreator"> |(2)
        23.     <property name="beanNames">
        24.           <value>/searchSubmit</valuesgt; |(3)
        25.     </property>
        26.     <property name="interceptorNames">
        27.         <list>
        28.           <value>logger</value> |(4)
        29.         </list>
        30.     </property>
        31.    </bean>
        32.  
        33. </beans>
        34.  


           (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" />

        q年 2006-04-16 18:24 发表评论
        ]]> վ֩ģ壺 輤һ| þþƷƵ| ޾ƷɫƵ߹ۿԴ | ޾Ʒ| ʮ˽Ļվ| ޺Ʒһ | þþWWWѾƷ| 97þþƷĻ| ĻmvѸӰ| ɫƵ15| avƷ| ձһۺϾþa| պһѸ| һĻ߹ۿ| AV߹ۿɫ | Ƶ1| Ů18ëƬˮ| ޹ƷþþþþԻ| 99߹ۿƵ| רר| վѹۿ| ŷAۺһ | www޾Ʒþþ| 91㽶߹ۿ| ɫƵ߹ۿwww| 91ҹƷһ| ޹߹ۿ| AAƬ߹ۿ| ˳ɼƵ߹ۿ| Ծ޾ƷAAƬ߲| 91޹˾Ʒ| LƷþ| һƵ| ƬվɫƬѹۿAPP| þþƷŮav鶹| õӰ߹ۿ| AV| һȫëƬ| ߲ѲavƬ| h߹ۿƵվ| Ƭѹۿ|