ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>
¾|‘站定ä½å†›_®šäº†ç½‘ç«™ç–åˆ’æ€æƒ³çš„宽度和深度åQŒç½‘站客户决定了¾|‘ç«™½{–划æ€ç»´å½¢å¼åQŒç½‘站页é¢å’Œ½E‹åºçš„实现决定了优秀¾|‘ç«™½{–åˆ’æ€æƒ³çš„表现力åQŒç½‘站市åœ?销售冋Æ?
验课|‘ç«™½{–划水åã^çš„é«˜ä½Žï¼›å¦‚æžœéœ€è¦æ·±å…¥åƈ˜q用上å¥çš„æ€æƒ³åQŒå°±å¿…须具备市场ã€é”€å”®ã€å’Œæ‰Žå®žæŠ€æœ¯äºŽä¸€íw«ï¼Œ˜q™ç§å¤åˆæ€§ç½‘ç«™ç–划ähæ‰åˆ™æ˜¯çŽ°ä»Šå¤§¾|‘ç«™å“牌竞争ä¸ä¸å?
或缺的äh力资æºï¼Œéšç€å›½å®¶2001òq´å¼€è®„¡”µå商务专业,˜q™ç§äººæ‰çœŸæ£æˆç†Ÿ™å»è¦å†ç‰5òq´ä»¥ä¸Šï¼›ä½†ç”±äºŽç½‘站越æ¥è¶Šå¤šï¼Œä¼˜ç§€çš„网站竞争越æ¥è¶Šéš¾ï¼Œ˜q™ç§äººæ‰åœ?òq?
内将从从事网站销售ã€å¸‚åœºã€æŠ€æœ¯è¿™ä¸‰æ–¹é¢çš„人æ‰ä¸äñ”生,其ä¸å½“剾|‘站竞争实力ä¸é«˜çš„æƒ…况下åQŒæŠ€æœ¯ähæ‰è{型是¾|‘ç«™½{–划是当å‰çްçŠÓž¼Œä¸è¿‡æœªæ¥ä»¥å¸‚åœ?销售䨓ä¸?
çš„ähæ‰è{型,æ‰èƒ½çœŸæ£æŽ¨åЍ¾|‘ç«™½{–划走å‘专业化ã€?br>  2åQŽäh机工½E‹å¦æ€æƒ³ž®†å¤§è¡Œå…¶é?br>  人机工程å¦åˆ¿UîCh机工效å¦
(Ergonomics)åQŒæ˜¯ä¸€é—¨è®©æŠ€æœ¯äh性化的科å¦ï¼Œä¸€é—¨å…³äºŽæŠ€æœ¯å’Œäººçš„å调关系的科å¦ã€‚å³å¦‚何让技术的å‘展围绕人的需求æ¥å±•å¼€åQŒæŠŠäºÞZ½œä¸ÞZñ”å“和环境è®?
计的出å‘点,使其性能ã€è‰²å½©ç‰æ›´å¥½åœ°é€‚应和满‘³äh¾cÈš„生ç†å’Œå¿ƒç†çš„需è¦ï¼Œä»Žè€Œä‹ÉäºÞZ»¬åœ¨å·¥ä½œä¸æ›´å®‰å…¨ã€ä¾¿æ·å’Œèˆ’é€‚ï¼Œå·¥ä½œæ•ˆçŽ‡æ›´é«˜ã€‚å…¶ç ”ç©¶æ–ÒŽ³•和评ä»äh‰‹ŒD‰|¶‰å?
心ç†å¦ã€ç”Ÿç†å¦ã€åŒ»å¦ã€äh体测é‡å¦ã€ç¾Žå¦å’Œå·¥ç¨‹æŠ€æœ¯ç‰å¤šä¸ªé¢†åŸŸã€?br>  人机工程å¦å·²æ¸—é€è‡³æˆ‘们生活的æ¯ä¸€ä¸ªéƒ¨åˆ†ï¼Œä¾‹å¦‚åQšå–æ°´çš„æ¯ååQŒæ´—å£çš„牙è†åQŒä‹É
用的电脑…½{‰å„æ–šw¢åQŒäh机工½E‹å¦æ›´æ˜¯åˆ©äºŽäº§å“销售的优化剂,那么我们从专业网站ç–划看åQŒæ›´éœ€è¦äh机工½E‹å¦å¸®åŠ©æˆ‘ä»¬ä½¿ç½‘ç«™åã^å°æ›´å®ÒŽ˜“推销¾l™ç›®æ ‡å®¢æˆ—÷€‚在未æ¥
人机工程å¦å°†ä½¿ç½‘站在以下斚w¢å¾—到质的æå‡åQ?br>人性化åQšé€šè¿‡å¼•导性文å—è¯a€ã€å›¾å½¢è¯a€ã€ä¸ªæ€§äº’åŠ¨ç‰æ–¹å¼åQŒä‹É¾|‘ç«™òq›_°æ›´åˆ©äºŽå®¢æˆähµè§ˆï¼Œä»¥å¸å¼•åÆˆç•™ä½å®¢æˆ·ã€?br>  方便性:¾|‘ç«™æ“作½Ž€ä¾Ñ€æ˜“用,内容分布åˆç†åQŒç¬¦åˆå®¢æˆïLš„è¡ŒäØ“ä¹ æƒ¯ã€?br>  逻辑性:整体¾|‘ç«™½{–划‹¹ç¨‹½W¦åˆå®¢æˆ·å¿ƒç†åQŒä¸”在充分分æžå®¢æˆ¯‚¡Œä¸šç‰¹å¾çš„基础上,建立¾|‘站内部功能之间的逻辑转æ¢åQŒè®©å®¢æˆ·äº«å—整个讉K—®˜q‡ç¨‹ã€?br>  ¿U‘妿€§ï¼š¾|‘ç«™æ ç›®½{–划ã€å®šä½å…·å¤‡ç§‘妿€§ï¼Œå…¶æ—¢å……分代表了网站的æ„图åQŒåˆèƒ½å……分调动访客ç‘ô¾l点击,引导客户è´ä¹°äº§å“ã€?br>  控制性:¾|‘站在å¾ç«‹å®¢æˆ¯‚¡Œä¸ºæƒé™æŽ§åˆ¶æ–¹é¢ï¼Œå¿…é¡»½W¦åˆå…¬å¸ä¸šåŠ¡è§„åˆ™åQŒæ ¹æ®ä¸åŒçš„客户¾cÕdž‹äº§ç”Ÿä¸åŒçš„æƒé™ã€?br>ã€€ã€€äº¤äº’æ€§ï¼šå»ºç«‹å¼‚æ¥æ²Ÿé€šç³»¾lŸï¼ˆå¸®åŠ©ä¸å¿ƒã€ç•™a€æÑ€æ“作指å?#8230;åQ‰æ–¹ä¾¿å®¢æˆ·ä¸Ž¾|‘ç«™ä¹‹é—´æ²Ÿé€šï¼›å»ºç«‹åŒæ¥æ²Ÿé€šç³»¾lŸï¼ˆåÏx—¶èŠå¤©ã€ç”µè¯åé¦?#8230;åQ‰è¾¾åˆ°å³æ—¶åŒå‘æ²Ÿé€šç›®æ ‡ã€?br>  界é¢å‹å¥½æ€§ï¼šå¿ƒç†å¦è¡¨æ˜Žï¼Œé€‚åˆçš„界é¢å¯¹äºŽå®¢æˆïL‚¹å‡ÀL¬²æœ›çš„æå‡å’Œå°è±¡æŒ‡æ•°çš„æå‡æ•ˆæžœæ˜Žæ˜¾åQŒç½‘ç«™ç•Œé¢æ˜¯å®¢æˆ·ä¸Žç½‘站交‹¹çš„é‡è¦è½½ä½“åQŒåœ¨˜q™ç‚¹ä¸Šç½‘ç«™ç–划师需è¦ä¸Ž¾|‘站设计师åä½œå®žçŽ°ã€‚ä½†æ€æƒ³æ–ÒŽ³•¼‹®ä¿ä»¥ä¸‹å†…容您åšåˆîCº†åQ?br>  aã€åŒæ ïLš„界é¢å¯¹è±¡æ˜¯å¦å…ähœ‰ä¸€è‡´æ€§ã€è¿ž¾læ€§çš„è¡ŒäØ“åQ?br>  bã€å„¿Uæ½CÞZ¿¡æ¯æ˜¯å¦ç®€å•ã€æ¸…晎ͼŸ
  cã€è‰²å½©æ˜¯å¦ç»Ÿä¸€ã€å调?是å¦é¿å…äº†åŒæ—¶ä‹É用太多的颜色åQ?br>  dã€æ–‡å—内å®ÒŽ˜¯å¦ç®€‹zã€é‡ç‚¹çªå‡ºï¼Ÿå—体ã€å—å—÷€å—型是å¦åˆé€‚?
  eã€ç•Œé¢å¯¹è±¡çš„动é™å¤„ç†æ˜¯å¦å¾—当åQ?br>  fã€å¸ƒå±€æ˜¯å¦åˆç†ã€ç®€‹zã€åè°ƒã€ç¾Žè§‚ï¼Œç”»é¢æ˜¯å¦å‡è¡¡½{‰ç‰åQ?br>  3åQŽæ–‡åŒ–ç†å¿µå…¨é¢æ¸—é€ç½‘ç«™ç–划实æˆ?br>  ¾|‘站竞争从技术竞争ã€åã^å°ç«žäº‰ï¼Œä»¥åŠçŽ°åœ¨çš„å¸‚åœºç«žäº‰ï¼Œ¾lè¿‡å‡ å¹´çš„å‘展,未楞®†ä¸Šå‡è‡³“文化竞争”的高度,例如åQšæ–°‹¹ªç½‘¾lœåª’体ã€ç½‘易虚拟社区ã€é˜¿é‡Œå•†äººæ–‡åŒ?#8230;..
  从历å²çš„角度æ¥çœ‹åQŒç»‹¹Žå¯ä»¥æŽ¨åŠ¨æ–‡åŒ–çš„å‘展åQŒæ–‡åŒ–å´èƒ½å¤Ÿå†›_®š¾læµŽã€æ”¿æ²Èš„走势åQ?br>
从网站ç»è¥çš„角度æ¥çœ‹åQŒå¥½çš„网站ç»è¥èƒ½å¤Ÿä¿ƒä½¿ç½‘ç«™çš„å®¢æˆ·ä¸æ–çš„èšé›†ã€äº¤‹¹ï¼Œé€æ¥å»ºç«‹ä»¥ç½‘站或¾|‘ç«™è¡Œä¸šæˆ–ç½‘ç«™æ€§è´¨ä¸ºæ ¸å¿ƒçš„æ–‡åŒ–åQ›ä½†¾|‘站或网¾lœæ–‡åŒ–的建立å?
能够带动¾|‘站从é‡å˜è‡³è´¨å˜çš„è{æ¢ï¼Œòq¶ä¸”能够形戓马太效应”åQŒå¯¹¾|‘站资本˜q作ã€å¸‚åœø™¿ä½œã€æŠ€æœ¯è¿ä½œã€äh力资æºè¿ä½œç‰¾l¼åˆæ–šw¢äº§ç”Ÿå‚¬åŒ–作用åQŒä‹É¾|‘ç«™¾lè¥çœŸæ£
èµ°å‘æˆåŠŸã€?br>ã€€ã€€ä»ŽçŽ°æœ‰å·²å½¢æˆæ–‡åŒ–的网站案例æ¥çœ‹ï¼Œæ–°æµªå·²æˆä¸ÞZ¸å›½ç”šè‡›_ŽäºÞZ¸–界最å…ähƒå¨æ€§è´¨çš„网¾lœåª’体,它åÅžæˆäº†ä¸Žç”µè§†åª’ä½“ã€æ‚å¿—åª’ä½“ã€æŠ¥åˆŠåª’ä½“ã€?
òq¿æ’媒体òq¶åˆ—的第五大媒体åQŒå…¶æ–‡åŒ–力é‡å¯è§ä¸€æ–‘ï¼›ä»¥ç½‘æ˜“äØ“ä»£è¡¨çš„ç¤¾åŒÞZº¤‹¹åž‹¾|‘站更是如æ¤åQŒç½‘¾lœæ¸¸æˆæ–‡åŒ–ã€ç½‘¾lœäº¤å‹æ–‡åŒ–更是深入äh心,òq¶å¯¹ä¸å›½äº’蔾|‘æ™®åŠè¿›
½E‹äñ”生决定性的推动作用åQ›ä»¥é˜‰K‡Œã€å½“å½“ã€æ˜“‘£ã€æ·˜å®äؓ代表的商人文化,对ä¸å›½èµ°å‘世界,世界了解ä¸å›½åQŒå•†äºÞZ¸Š¾|‘åšç”Ÿæ„的普åŠçš„贡献有目å…Þq¹åQ›ä»¥å‰ç¨‹æ— å¿§ã€?
CJOLã€å“åšã€ä¸åŽè‹±æ‰äؓ代表的网上ähåŠ›èµ„æºæ–‡åŒ–æ›´æ˜¯åŠ é€Ÿäº†å…¨å›½äººåŠ›èµ„æºé«˜æ•ˆäº’动ã€?br>ã€€ã€€å› æ¤åQŒé«˜å±‚é¢çš„网站竞争是文化的竞争,而åÅžæˆæ–‡åŒ–网站å“牌,专业¾|‘ç«™½{–划必ä¸å¯ä»¥åQŒå¦‚何有效整åˆå…¬å¸èµ„æºã€å®¢æˆ¯‚µ„æºï¼Œè¡Œä¸šèµ„æºåQŒåÅžæˆæ–‡åŒ–,是网站ç–划ähå‘˜éœ€è¦æ€è€ƒã€å®žè·ëŠš„éš„¡‚¹ã€?br>  4åQŽç³»¾lŸç½‘ç«™ç–划ç†è®ºåœ¨äº”年内äñ”ç”?br>
¾|‘ç«™½{–划是一门有‘£çš„å¦é—®åQŒå®ƒæ¶‰åŠå¿ƒç†å¦ã€ç¾Žå¦ã€äh机工½E‹å¦ã€å·¥½E‹æŠ€æœ¯ã€ç½‘¾lœçŸ¥è¯?#8230;…½{‰å¤š™å¹å¦¿U‘ï¼Œåœ¨å›½å¤–ï¼Œå·²é€æ¸æœ‰è¿™æ–šw¢çš„专业ç†è®ºï¼›åœ¨å›½å†…则没有åQŒä½†
éšç€ä¸å›½é«˜è´¨é‡çš„¾|‘ç«™ç«žäº‰æ„ˆå‘‹È€çƒˆï¼Œä»Žè€ŒåŠ å‰§äº†¾|‘ç«™½{–划的专业化˜q›ç¨‹åQŒåœ¨æœªæ¥5òq´å†…åQŒä¸“业网站ç–划的ç†è®ºä¹¦ç±ä¼šå‡ºçŽŽÍ¼Œä½†æˆ‘们更期待在具备丰富网站ç–划ç»éª?
的这¾Ÿ¤é˜Ÿä¼ï¼Œž®†è‡ªå·Þqš„实战¾l验æå‡è‡³ç†è®ºçŸ¥è¯†ï¼Œä½¿ç½‘ç«™ç–划ç†è®ºæ›´è´´è¿‘市场åQŒæŽ¨åЍä¸å›½ç½‘ç«™ç»è¥ä¸“业化ã€?br>  5åQŽç½‘ç«™ç–åˆ’çš„ä¸“ä¸šåŒ–å¯¼è‡´ç½‘ç«™è®¾è®¡é£Žæ ¼æ•´åˆï¼š½Ž€¾U¦ä¸Žä¸ªæ€§æˆä¸ÀLµåQ?br>
在国内许多谈åŠç½‘ç«™ç–划与¾|‘ç«™è®¾è®¡çš„åŒºåˆ«ï¼Œè®¸å¤šäºø™®²ä¸å‡ºåQŒä¸»è¦æ˜¯å› äØ“ä¸¤è€…ä¹‹é—´é‡å 的区域很多åQŒç½‘ç«™ç–划需è¦è€ƒè™‘åˆ°æ€æƒ³å¦‚何通过设计ã€ç¨‹åºåŽ»ä½“çŽ°åQŒç½‘站设
计需è¦åœ¨å……分ç†è§£¾|‘ç«™½{–划æ€èµ\的基¼‹€ä¹‹ä¸Šæ‰èƒ½ç‰|´»è®¾è®¡ã€‚éšç€¾|‘ç«™½{–划的专业化˜q›ç¨‹åŠ é€Ÿï¼Œž®†ä‹É整体¾|‘ç«™½{–划åQŒç½‘站设计,¾|‘站开å‘å˜å¾—夿‚,我们需è¦è€ƒè™‘到许
多技术以外的市场ã€å®¢æˆ·å› ç´ ï¼Œå› æ¤åQŒæœªæ¥å¤§åž‹ç½‘ç«™è®¾è®¡è¡¨çŽ°é£Žæ ¼åº”è¯¥ä¼šæœ‰æ‰€æ•´åˆåQŒåƈ走å‘åQšæžè‡³ç®€¾U¦ã€ä¸ªæ€§å‘³ä¸¤ä¸ªæ–¹é¢ã€?br>  æžè‡³½Ž€¾U¦é£Žæ û|¼šæŒ‡ä»¥æœ€½Ž€¾U¦çš„æ–¹å¼åQŒåˆ†é…ã€è¡¨çް页é¢å†…容,以引导客æˆïL›´æŠëŠ›®æ ‡å†…容,é¿å…äº†å› å†…å®¹˜q‡å¤šè€Œäñ”生的焦点分散问题åQŒå®ƒå¯¹äºŽ¾|‘ç«™½{–划和设计内容的分布åˆç†æ€§è¦æ±‚éžå¸”R«˜åQŒåœ¨å›½å†…åšå¾—最好的当属阉K‡Œã€æ–°‹¹ªã€CJOLã€å“åšähæ‰ç½‘……ã€?br>
个性味风æ û|¼šæŒ‡ä»¥å¤šæ ·åŒ–的表现方å¼åQŒè®¾è®¡ç½‘站。它主è¦é’ˆå¯¹ä¸€äº›ä»¥å¨×ƒ¹æ€§è´¨ä¸ÞZ¸»çš„大型网站或ä¼ä¸š¾|‘ç«™åQŒå®ƒå…·å¤‡é«˜å¼ºåº¦çš„眼çƒå¸å¼•力ã€ä¸°å¯Œçš„囄¡‰‡æˆ–æ–‡å—表çŽ?
å½¢å¼åQŒä‹É客户能够愉悦åœîCínå—ç½‘ç«™å†…å®¹åŠæœåŠ¡åQŒä»¥˜q™ç§é£Žæ ¼ä¸ÞZ»£è¡¨çš„大型¾|‘站暂时没有å‘现åQŒä½†ä¼ä¸š¾|‘站当属å¯å£å¯ä¹åQŒSONYå¨×ƒ¹ç«?#8230;
转自åQšhttp://tb.blog.csdn.net/TrackBack.aspx?PostId=1683119
æœ¬ç« æˆ‘ä»¬ž®†ä¼šè®¨è®º5¿U基äº?/span>Struts2代ç 的特å¾ã€‚从2002òq´ä»¥æ¥ï¼Œ˜q™äº›æž¶æž„å…ƒç´ éšç€ä»£ç çš„å‘展ä»ç„¶å˜åœ?/span>--从开始的WebWorkåQŒç»˜q?/span>WebWork分解ä¸?/span>WebWork2å’?/span>XWorkåQŒä¸€ç›´åˆ°æœ€åŽè{å˜äØ“Struts2.
4�/span>1 概念的分�/span>
ä½œäØ“ä¸€ä¸?/span>web应用开å‘äh员,有多¿Uçñ”别的功能需è¦è¿›è¡Œé˜˜qŽÍ¼š
åQ?/span>1åQ‰åœ¨request/response周期期间åQŒéœ€è¦å¯¹ä½œäØ“å…¶æ ¸å¿ƒç›®æ ‡çš„æ¯ä¸ªaction的逻辑˜q›è¡Œè¯´æ˜ŽåQ?/span>
åQ?/span>2åQ‰è®¿é—®æˆ–拥有å¯ä»¥ç”¨æ¥æ‰§è¡Œaction逻辑或访问资æºçš„业务对象åQ?/span>
åQ?/span>3åQ‰ç¼–è¯‘ã€æ˜ ž®„和转æ¢åQŒä»¥ä¾¿æŠŠHTMLä¸åŸºäºŽå—½W¦çš„倯D{åŒ–äØ“åŽŸå§‹¾cÕdž‹åQŒä»¥åŠæŠŠè§†å›¾å¯¹è±¡è½¬æ¢ä¸ÞZ¸šåŠ¡å¯¹è±¡æˆ–æ•°æ®è¡¨æ¥˜q›è¡Œè¡¨ç¤ºåQ?/span>
åQ?/span>4åQ‰äؓ应用ä¸åˆ†¾l„çš„action或所有的actionæä¾›åŠŸèƒ½çš„æ¨ªåˆ‡å…³æ³¨ç‚¹ã€?/span>
åœ?/span>Struts2æž¶æž„ä¸ï¼Œæ¯ä¸€ä¸ªæ¦‚念都是独立的。功能和逻辑ä¸éœ€è¦æ”¾¾|®åœ¨ä¸“é—¨çš?/span>action里。我们æ¥çœ‹çœ‹ä¸Šé¢æ‰€æåˆ°çš„æ¦‚念以åŠå®ƒä»¬æ˜¯å¦‚何处ç†çš„:
åQ?/span>1åQ‰æ¯ä¸?/span>Action逻辑--˜q™æ˜¯æœ€½Ž€å•的概念。æ¯ä¸?/span>actionè´Ÿè´£å®ƒéœ€è¦æä¾›çš„é€»è¾‘æˆ–åŠŸèƒ½ï¼›
åQ?/span>2åQ‰ç¼–è¯‘ã€æ˜ ž®„和转æ¢--3者是å„自有所ä¸åŒçš„æ¦‚念,但是有一个相åŒç‚¹ž®±æ˜¯å®ƒä»¬éƒ½æ˜¯ä½œäØ“æ ¸å¿ƒaction逻辑的补充。编译和¾cÕdž‹è½¬æ¢ç”±æ¡†æž¶æœ¬íw«è¿›è¡Œå¤„ç†ã€‚æ¥è‡ªäºŽHTML的嗽W¦å€¼åœ¨action开始处ç†ä¹‹å‰è¢«è½¬æ¢ä¸ºåŸºæœ¬ç±»åž‹æˆ–被注入到actionä¸?/span>--所有需è¦çš„都在æ¤å¤„ã€‚æ˜ ž®„由一个特定的拦截器进行处ç†ã€‚通过对一ä¸?/span>action˜q›è¡Œé…ç½®åQŒè¯´æ˜Žå…¶æ‰€æ‹¥æœ‰çš„域模型åQŒåƈ准确指明其在HTML䏿‰€å¯¹åº”的域åQŒæ¡†æž¶å°†ä¼šæŠŠUIæ˜ å°„åˆ°è¯¥åŸŸæ¨¡åž‹ä¸Šã€‚å®ƒç”šè‡³ä¼šç”Ÿæˆå¯¹è±¡å›¾ã€?/span>
åQ?/span>3åQ‰æ¨ªåˆ‡å…³æ³¨ç‚¹--拦截器是æä¾›æ¨ªåˆ‡åŠŸèƒ½çš„ä¸»è¦è§’艌Ӏ‚å¼€å‘者å¯ä»¥å®žçŽ°æ‹¦æˆªå™¨åQŒç„¶åŽæŠŠå®ƒä»¬åº”ç”¨åˆ°æ‰€æœ?/span>actionã€æŸä¸ªç‰¹å®šåŒ…ä¸çš„æ‰€æœ?/span>action或者选择æŸäº›æŒ‡å®šçš?/span>actionä¸åŽ»ã€‚å¦ä¸€ä¸ªæ¨ªåˆ‡å…³æ³¨ç‚¹æ˜¯ç”¨æˆähŽ¥å£å±‚ã€?/span>Struts2å¯ä»¥ä½¿ç”¨å…¶æ‰€æä¾›çš„ç§°ä¸?#8220;主题åQ?/span>themesåQ?#8221;çš„æ ‡½{¾æ¥ä¸ºæ¤æä¾›å¸®åŠ©ã€‚ä¸åŒçš„主题å¯ä»¥è¢«å¼€å‘æ¥æä¾›ä¸åŒçš„层选项åQŒåƈ被应用到å•ä¸ªæ ‡ç¾æˆ–æ•´ä¸ªåº”ç”¨ï¼ˆé€šè¿‡æŠŠå®ƒè®¾äØ“é»˜è®¤å€û|¼‰ã€?/span>
4ã€?/span>2 æ¾è€¦åˆ
WebWorkçš„æ—©æœŸç›®æ ‡ä¹‹ä¸€ž®±æ˜¯æä¾›ä¸€ä¸ªæ¾è€¦åˆçš„æ¡†æž¶ã€‚å…¶2.0ç‰ˆæ›´åŠ å¼ºè°ƒäº†˜q™ç‚¹åQšæŠŠä»£ç 分æˆäº†ä¸¤ä¸ªé¡¹ç›®ï¼Œä¸€ä¸ªæ˜¯XWork--æä¾›æ™®é€šçš„命ä×o模å¼(generic command-pattern)框架åQŒå¦ä¸€ä¸ªæ˜¯WebWork--ä¸?/span>XWorkæä¾›æ˜Žç¡®çš?/span>web接å£ã€‚è¿™ä¸?/span>WebWork架构基础上的å˜åŒ–创å¾äº†äºŒè€…çš„å…Þq”Ÿå…³ç³»ã€‚原æ¥èµ–以æˆåçš„“WebWork”现在实际上是WebWorkå’?/span>XWork的结åˆä½“ã€?/span>
ä½œäØ“ä¸€ä¸ªç‹¬ç«‹çš„™å¹ç›®åQ?/span>XWork现在å¯ä»¥è¢«ç”¨äºŽå…¶å®ƒé¡¹ç›®çš„一部分äº?/span>--实际上也¼‹®å®žæ˜¯è¿™æ —÷€?/span>Swingworkž®±æ˜¯ä¸€ä¸ªè¿™æ ïLš„™å¹ç›®--它是一个基äº?/span>Swingçš„ã€åº•层ä‹Éç”?/span>XWorkçš?/span>MVC框架。å¦å¤–一个例åå°±æ˜?/span>JMSå‰ç«¯--执行或共享与web UI相关çš?/span>XWork action。这些例åæä¾›äº†é«˜æ°´òqÏx¾è€¦åˆçš„典型案例ã€?/span>Struts2是åˆä¸€ä¸ªé‡‡ç”?/span>XWork的项目ã€?/span>
æ¾è€¦åˆæ€æƒ³å·²ç»æ›´è¿‘一æ¥ï¼Œé›†æˆåˆ°æ•´ä¸ªæ¡†æž?/span>--从处ç?/span>action的第一æ¥ç›´åˆ°æœ€åŽä¸€æ¥ã€‚实际上åQŒåœ¨Struts2é‡Œå‡ ä¹Žæ²¡æœ‰ä»€ä¹ˆä¸å¯é…¾|®çš„--个ähè®¤äØ“˜q™ä¸ªç‰¹ç‚¹æ—¢æ˜¯Struts2å‘展的æžå¤§åŽŸåŠ¨åŠ›ä¹‹ä¸€åQŒä½†åŒæ—¶ä¹Ÿæ˜¯å…‰™‡å¤§ç¼ºé™·ä¹‹ä¸€ã€?/span>
æ¾è€¦åˆé…置的一般案例包括:
åQ?/span>1åQ‰æŠŠURLæ˜ å°„åˆ?/span>actionåQ?/span>
åQ?/span>2åQ‰æŠŠä¸€ä¸?/span>actionçš„ä¸åŒç»“æžœæ˜ ž®„到æäº¤çš„页é¢ï¼›
åQ?/span>3åQ‰æŠŠå¤„ç†æœŸé—´äº§ç”Ÿçš„å¼‚å¸¸æ˜ ž®„到æäº¤çš„异帔R¡µé¢ï¼›
ä¸å¸¸ä½¿ç”¨å?/span>Struts2特定的案例包括:
åQ?/span>1åQ‰å¦‚æžœä½ ä¸æƒ³ä½¿ç”¨Sping框架åQŒå°±å¾—é…¾|®ä¸šåŠ¡å¯¹è±¡å·¥åŽ‚ï¼›
åQ?/span>2åQ‰æ”¹å?/span>URLæ˜ å°„åˆîC¸€ä¸?/span>action¾cÈš„æ–¹å¼åQ?/span>
åQ?/span>3åQ‰äØ“action¾l“æžœå¢žåŠ æ–°çš„¾l“æžœ¾cÕdž‹åQ?/span>
åQ?/span>4åQ‰äØ“æ–°çš„æ¡†æž¶åŠŸèƒ½å¢žåŠ æ’äšgåQ?/span>
åQ?/span>5åQ‰é€šè¿‡æ‹¦æˆªå™¨é…¾|®æ¡†æž¶çñ”功能åQ?/span>
æ¾è€¦åˆ¾pÈ»Ÿçš„好处是众所周知çš?/span>--增强了寋¹‹è¯•æ€§ã€æ˜“于扩展框架特å¾ç‰ã€‚ä½†æœ‰ä¸€ä¸ªç¼ºé™øP¼Œç”׃ºŽå¯ç½®é…çš„ç‰|´»æ€§ï¼ˆž®¤å…¶æ˜¯ä¸Žæ‹¦æˆªå™¨ç›¸å…³çš„åQ‰ï¼Œå¯ÆD‡´ä¸€ä¸ªç‰¹å®?/span>action的处ç†èµ\径䏿˜“被开å‘者所ç†è§£ã€‚这一点在˜q›è¡Œè°ƒè¯•的时候比较明显。由于ä¸ç†è§£å‘生了什么事åQŒä¸€ä¸ªä¸äº†è§£¾pÈ»Ÿçš„å¼€å‘äh员将ä¸èƒ½å¿«é€Ÿé«˜æ•ˆçš„˜q›è¡Œè°ƒè¯•。问题本íw«å¯èƒ½æ¯”较简å•,比如ç”׃¸€ä¸ªæ²¡æœ‰è¿›è¡Œæ£¼‹®é…¾|®çš„æ‹¦æˆªå™¨å¼•èµïLš„åQŒæˆ–者甚臛_ªæ˜¯å› 为拦截器的顺åºä¸å¯¹å¼•èµïLš„。åªè¦ç†è§£å¤„ç†èµ\径上的æ¯ä¸€ä¸ªç»†èŠ‚ï¼Œå¾ˆå¿«ž®×ƒ¼šæ‰‘Öˆ°é—®é¢˜çš„解军_Šžæ³•ã€?/span>
4ã€?/span>3 易测试性(TestabilityåQ?/span>
在过åŽÕd‡ òq´ä¸åQŒå•元测试已¾læˆä¸ø™ÊYä»¶å¼€å‘过½E‹ä¸äº‹å®žä¸Šçš„æ ‡å‡†ã€‚它ä¸ä»…ä¿è¯äº†ç±»é€»è¾‘的一致性,而且通过在类开å‘过½E‹ä¸ç”šè‡³å¼€å‘之å‰å®žçްå•元测试,ž®†ä¼šå‡å°‘è®¾è®¡çš„å¤æ‚性,òq¶ä¸”会ä‹Éè®¾è®¡æ›´äØ“å¥å£®ã€?/span>
Struts2çš„å‰íw«ï¼ŒWebWorkž®±æ˜¯å»ºç«‹åœ¨è¿™¿UçŽ¯å¢ƒä¹‹ä¸Šçš„ã€‚ç”±äºŽæ¡†æž¶å…ƒç´ çš„æ¾æ•£è€¦åˆåQŒæµ‹è¯•很å®ÒŽ˜“˜q›è¡Œã€‚在web应用开å‘过½E‹ä¸åQ?/span>actionã€æ‹¦æˆªå™¨ã€ç»“æžœã€å¯¹è±¡å·¥åŽ‚åŠå…¶å®ƒè¢«å¼€å‘çš„¾l„äšg能够独立地进行测试。由äº?/span>action和拦截器最为常用,我们ž®±å¯¹˜q™ä¸¤¿U组件进行详¾l†çš„æŽ¢è®¨ã€?/span>
Actions
é€šå¸¸åœ¨æ¡†æž¶ä¸æ˜¯é€šè¿‡æ‰§è¡Œ“execute()”æ–ÒŽ³•æ¥è°ƒç”?/span>action的,或者在é…置时调用ä“Q何一个返回å€égØ“å—符å€û|¼ˆStringåQ‰çš„æ–ÒŽ³•æ¥è¿›è¡Œè°ƒç”¨çš„。从易测性的角度æ¥çœ‹åQŒè¿™å†ç®€å•丘q‡äº†ã€?/span>
我们æ¥çœ‹ä¸€ä¸ªä¾‹åã€‚ä¸‹é¢æ˜¯ä¸€ä¸ªæ•°å—ç¯åŠ çš„action¾c»ï¼š
public class MyAction {
private int number;
public int getnumber() { return number; }
public void setNumber( int n ) { number = n; }
public String execute() {
number += 10;
return “success”;
}
}
ç”׃ºŽè¯?/span>actionæ˜?/span>POJOåQŒå•元测试åªéœ€æŠ?/span>action实例化ã€è°ƒç”¨æ–¹æ³•,òq¶åœ¨æ–点出得到预期的¾l“æžœž®±å¯ä»¥äº†ã€‚æ‰€æœ‰æœæ•°æ®å’Œèµ„æºéƒ½é€šè¿‡setteræ–ÒŽ³•æä¾›¾l?/span>actionã€‚å› æ?/span>action需è¦çš„ä»ÖM½•æ•°æ®éƒ½èƒ½å¤Ÿç›´æŽ¥åœ¨action里进行设¾|®ã€?/span>
åœ¨æœ¬ä¾‹ä¸æˆ‘们需è¦ä¸¤ä¸ªæ–ç‚?/span>--ä¸€ä¸ªäØ““execute”æ–ÒŽ³•çš„è¾“å‡ø™¿›è¡Œè®¾¾|®ï¼Œå¦ä¸€ä¸ªåˆ™æ˜¯äؓ验è¯actionçš„çŠ¶æ€æ˜¯å¦æ˜¯æˆ‘们预期的。å•元测试如下所½Cºï¼š
public class myActionTest extends TestCase {
…
public void testExecute() {
MyAction action = new MyAction();
Action.setNumber(5);
assertEquals("success", action.execute());
assertEquals(15,action.getNumber());
}
}
对于资溽E微有点éºÈƒ¦åQŒç±»ä¼?/span>jMock˜q™æ ·çš„库å¯ä»¥è¢«ç”¨æ¥æä¾›èµ„æºçš„æ¨¡æ‹Ÿå®žçްåQŒæµ‹è¯•在action和资æºä¹‹é—´çš„äº¤äº’æ˜¯å¦æ£ç¡®ã€?/span>
ž®½ç®¡æœ¬ä¾‹æ˜¯ç”¨JUnit写æˆçš„,但是TestNG或其它ä“Q何框枉™ƒ½å¯ä»¥ä½¿ç”¨ã€?/span>
拦截�/span>(Interceptors)
å½“ä½ ¾~–译拦截器的时候,‹¹‹è¯•会ç¨å¾®æœ‰ç‚¹å¤æ‚。丘q‡ä¹Ÿæœ‰ä¸€äº›é¢å¤–的帮助å¯ä»¥åˆ©ç”¨ã€‚ä‹É用拦截器˜q›è¡Œå·¥ä½œæœ‰ä¸¤¿U情景ã€?/span>
½W¬ä¸€¿U情景是使用在调用时ä¸?/span>ActionInvocation对象˜q›è¡Œäº¤äº’的拦截器。在执行åŽï¼Œä½ 能够通过在æ–点出得到拦截器本íw«çš„çŠ¶æ€æ¥éªŒè¯é€»è¾‘的棼‹®æ€§ã€‚在˜q™ç§æƒ…æ™¯ä¸‹ï¼Œä½ èƒ½å¤Ÿåˆ©ç”¨ä¸Ž‹¹‹è¯•actionåŒæ ·çš„æ–¹æ³•楋¹‹è¯•拦截器。实例化拦截器ã€åˆ›å»ÞZ¸€ä¸?/span>ActionInvocation对象的模拟实çŽ?/span>(该对象带有在‹¹‹è¯•拦截器时ž®†ä¼šç”¨åˆ°çš„å€?/span>)ã€è°ƒç”?/span>interceptæ–ÒŽ³•ã€åœ¨æ–点处得到预期的¾l“果。这些å¯èƒ½å‘生在拦截器本íw«ã€è¢«è°ƒç”¨æ–ÒŽ³•的返回结果或是由¾pÈ»ŸæŠ›å‡ºçš„异常ã€?/span>
½W¬äºŒ¿Uæƒ…æ™¯æ˜¯ä½¿ç”¨ä¸Žå…¶çŽ¯å¢ƒæˆ–æ‹¦æˆªå™¨å †æ ˆä¸çš„其它拦截器å‘生交互的拦截器。在˜q™ç§æƒ…况下,‹¹‹è¯•需è¦é€šè¿‡ActionProxy¾cÖM¸Žaction˜q›è¡Œäº¤äº’åQŒè¿˜ž®†ä¼šéœ€è¦è®¿é—®æ‹¦æˆªå™¨æœ¬èínä¸èƒ½è®‰K—®çš„其它环境对象ã€?/span>
XWork库通过æä¾›XWorkTestCase¾cÀL¥ä¸?/span>JUnit‹¹‹è¯•æä¾›å¸®åŠ©ã€é€šè¿‡æä¾›TestNGStrutsTestCase å’?/span>TestNGXWorkTestCase¾cÀL¥ä¸?/span>TestNG‹¹‹è¯•æä¾›å¸®åŠ©ã€‚è¿™äº›äØ“ConfigurationManager,Configuration, Container å’?/span> ActionProxyFactory¾cÈš„实例æä¾›äº†æµ‹è¯•实现。涉åŠåˆ°çš„ç±»˜q˜æœ‰XWorkTestCaseHelper å’?/span> MockConfiguration.½{‰ã€?/span>
现在我们已ç»å…·å¤‡äº†å®‰è£…环境的基础åQŒæµ‹è¯•本íw«å˜å¾—容易了--éµåó@在第一¿U情景里所æè¿°çš„æ¥éª¤å³å¯ã€‚唯一的ä¸åŒç‚¹åœ¨äºŽåQŒä¸æ˜¯è°ƒç”¨æ‹¦æˆªå™¨çš?/span>intercept()æ–ÒŽ³•åQŒè€Œæ˜¯éœ€è¦è°ƒç”?/span>ActionProxy¾cÈš„execute()æ–ÒŽ³•ã€‚å¦‚ä¸‹è¿°ä»£ç æ‰€½Cºï¼š
ActionProxy proxy =
actionProxyFactory.createActionProxy(NAMESPACE,NAME,null);
assertEquals("success", proxy.execute());
在这¿U情况下åQŒæµ‹è¯•将会设¾|®æ–ç‚ÒŽ¥èŽ·å–预期çš?/span>action¾l“果倹{€?/span>actionå€¼æˆ–å€¼å †æ ˆçš„å€¹{€‚被执行çš?/span>actionèƒ½å¤Ÿåœ¨æ‰§è¡Œå‰æˆ–执行åŽé€šè¿‡ä¸‹é¢çš„调用进行访问:
MyAction action=(MyAction)proxy.getInvocation().getAction();
è€Œå€¼å †æ ˆåˆ™å¯ä»¥é€šè¿‡ä¸‹é¢çš„调用进行访问:
proxy.getInvocation().getStack();
4ã€?/span>4 模å—åŒ?/span>(Modularization)
éšç€åº”用¾pÈ»Ÿ‘Šæ¥‘Šåºžå¤§ï¼ŒæŠ?/span>webåº”ç”¨åˆ†ç¦»ä¸ø™®¸å¤šæ¨¡å—å°±å˜å¾—‘Šæ¥‘Šé‡è¦ã€‚模å—化å…许在一个项目ä¸å¼€å‘的功能或新的框架特å¾èƒ½å¤Ÿç‹¬ç«‹æ‰“包,òq¶å¯ä»¥åœ¨å…¶å®ƒ™å¹ç›®ä¸è¿›è¡Œé‡ç”¨ã€?/span>Struts2å·²ç»æŠŠæ¨¡å—åŒ–ä½œäØ“å…¶æž¶æž„çš„åŸºç¡€éƒ¨åˆ†åQŒå…许开å‘者独立工作和¾~–译彼æ¤çš„项目ã€?/span>
䏋颿˜¯ä¸€äº›å¯¹åº”用˜q›è¡Œæ¨¡å—化的æ–ÒŽ³•åQ?/span>
(1)é…置信æ¯èƒ½å¤Ÿè¢«åˆ†ä¸ºå¤šä¸ªæ–‡ä»?/span>--˜q™åƈä¸åª„å“应用的打包åQŒç”±äºŽé…¾|®ä¿¡æ¯æ ¹æ®åŠŸèƒ½ç•Œé™è¿›è¡Œé€»è¾‘分离而易于查找,从而简化的开å‘äh员的工作ã€?/span>
(2)独立的应用模å—å¯ä»¥ä»¥æ’äšgçš„åÅžå¼è¿›è¡Œåˆ›å»?/span>--ä¸ÞZº†æä¾›æ‘怸ªç‰¹å®šç‰¹å¾æ‰€éœ€çš„一切都å¯ä»¥æ‰“åŒ…åœ¨ä¸€èµ·åÆˆä½œäØ“æ’äšg独立å‘布。这包括actionã€æ‹¦æˆªå™¨ã€æ‹¦æˆªå™¨å †æ ˆã€è§†å›¾æ¨¡æ¿ï¼ˆJSP除外åQ‰ç‰ã€‚æµè§ˆå™¨æ’äšg的酾|®å°±æ˜¯ä¸€ä¸ªä¾‹å,该æ’ä»¶æä¾›äº†ä¸€ä¸ªå®Œæ•´çš„æ¨¡å—åQŒå½“ä½ æŠŠè¯¥æ¨¡å—æ·»åŠ åˆ°ä½ çš„åº”ç”¨ä¸æ—¶åQŒå…¶æä¾›äº†ä¸€ä¸?/span>webæŽ¥å£æ¥æŸ¥çœ‹é…¾|®ä¿¡æ¯ã€?/span>
(3)å¯ä»¥åˆ›å¾æ–°çš„æ¡†æž¶åŠŸèƒ½æ’äšg-éžç‰¹å®šåº”用的新功能å¯ä»¥ä»¥æ’äšg形弿†ç»‘òq¶åœ¨ä¸åŒçš„应用ä¸ä½¿ç”¨ã€?/span>
从技术角度æ¥è¯ß_¼Œæ‰€æœ‰è¿™äº›å¯¹åº”用˜q›è¡Œæ¨¡å—化的方å¼éƒ½æ˜¯ä¸€æ ïLš„--éƒ½å…·æœ‰åŒæ ïLš„é…ç½®å…ƒç´ åQˆé™¤äº†å¿UîC¸åŒä¹‹å¤–,“struts-plugin.xml”是系¾lŸè‡ªåŠ¨åŠ è½½æ’件时的酾|®æ–‡ä»Óž¼‰ã€å…·æœ‰ç›¸åŒçš„目录¾l“æž„åQŒåƈ且它们也包å«åŒæ ·çš„æ¡†æž¶å’Œåº”ç”¨å…ƒç´ ã€?/span>
æ’äšg的两¿U类型之间的唯一ä¸åŒž®±æ˜¯ä½ 在概念上如何看待它们,以åŠå“ªäº›å…ƒç´ 和酾|®è¢«æ”‘Ö…¥åˆ†å‘包ä¸ã€?/span>
ç”׃ºŽæ’äšgä¸ºæ ¸å¿ƒæ¡†æž¶åŠŸèƒ½æä¾›äº†å¯é€‰å®žçŽŽÍ¼Œæ‰€ä»¥æœ‰ä¸€äº›é¢å¤–çš„é…ç½®å…ƒç´ ã€‚å°½½Ž¡åœ¨“struts.xml”å’?#8220;struts-default.xml”é…置文äšgä¸å¯ä»¥ä‹Éç”¨è¿™äº›å…ƒç´ ï¼Œä½†æ˜¯é€šå¸¸æƒ…å†µä¸‹å®ƒä»¬è¿˜æ˜¯åœ¨æ’äšgé…置文äšgä¸è¿›è¡Œé…¾|®ã€?/span>
对于æ’äšgæ¥è¯´åQŒå¯é€‰å®žçŽ°çš„é…ç½®åˆ†äØ“ä¸¤æ¥åQ?/span>
1ã€ä‹Éç”?/span><bean .../>æ ‡ç¾ä¸æ¥æä¾›å¯é€‰æŽ¥å£çš„实现åQŒä‹É用一个唯一的键æ¥è¯†åˆ«å®ƒã€?/span>
2ã€ä‹Éç”?/span><constant … />æ ‡ç¾åœ¨å·²é…置的接å£å®žçŽîC¸é€‰æ‹©ä¸€ä¸ªã€?/span>
æˆ‘ä»¬æ¥æ›´è¯¦ç»†åœ°çœ‹ä¸€ä¸‹è¿™ä¸¤ä¸ªæ¥éª¤ã€?/span>
<bean .../>æ ‡ç¾å…许æ’äšgæä¾›æ‰©å±•点的实现信æ¯ã€‚下é¢çš„例垮±æ˜¯ä¸€ä¸ªå±•½Cºåœ¨"struts-default.xml"æ–‡äšgä¸äؓ一个对象工厂进行酾|®çš„æƒ…况åQ?/span>
<bean name="struts"
type="com.opensymphony.xwork2.ObjectFactory"
class="org.apache.struts2.impl.StrutsObjectFactory" />
属性æä¾›äº†åœ?/span>Struts2ä¸åˆ›å»ºå’Œä½¿ç”¨ä¸€ä¸ªå¯é€‰å¯¹è±¡å®žçŽ°çš„æ‰€æœ‰ä¿¡æ¯ã€‚å¯ä»¥ä‹É用的属性如下所½Cºï¼š
class--æä¾›¾cÈš„å…¨ååQ?/span>
type--指明¾c»éœ€è¦å®žçŽ°çš„æŽ¥å£åQ?/span>
name--å¯ÒŽ¯ä¸ªç±»˜q›è¡Œå”¯ä¸€è¯†åˆ«çš„简¿UŽÍ¼›
static--æŒ‡æ˜Žæ˜¯å¦æŠŠé™æ€ç±»æ–ÒŽ³•注入到类的实例;
scope--指明所用实例的范围åQŒå…¶å€¼å¯èƒ½äØ“åQ?/span>"default"ã€?/span>"request"ã€?/span>"session"ã€?/span> "singleton"æˆ?/span>"thread"ã€?/span>
optional--如果å€égØ““true”åQŒæ—¢æ˜¯åœ¨åˆ›å¾¾cÕd®žä¾‹æ—¶å‡ºçŽ°é”™è¯¯åQŒå°†ä»ç„¶¾l§ç®‹åŠ è²ã€?/span>
接下æ¥ï¼Œ<constant … />æ ‡ç¾å…许开å‘äh员选择使用哪个é…ç½®ã€‚åªæœ‰ä¸¤ä¸ªå±žæ€?/span>--一个属æ€?#8220;name”æä¾›äº†ä½ 的新实现所改å˜çš„æ‰©å±•点的å¿UŽÍ¼Œå¦ä¸€ä¸ªå±žæ€?#8220;value”ž®±æ˜¯åœ?/span><bean … />æ ‡ç¾ä¸é…¾|®çš„“name”åç§°ã€?/span>
<constant name="struts.objectFactory" value="plexus" />
<constant … />æ ‡ç¾æ˜¯æŠŠä¸€ä¸ªæ–°å€ÆDµ‹¾l™ä¸€ä¸ªå·²çŸ¥å±žæ€§çš„一¿Uæ–¹å¼ã€‚该å€ég¹Ÿå¯ä»¥åœ?/span>"web.xml"é…置文äšgä¸ä‹Éç”?#8220;init-param”˜q›è¡Œä¿®æ”¹åQŒæˆ–者在““struts.properties”é…置文äšgä¸ä½œä¸ÞZ¸€ä¸ªå值对åQ?/span>name-value pairåQ‰è¿›è¡Œä¿®æ”V€?/span>
å¦‚æžœä½ æ²¡åœ¨å¼€å‘一个æ’ä»Óž¼Œè€Œåªæ˜¯ä‹É用常è§?/span>"struts-xml"é…置文äšgä¸çš„˜q™äº›æŠ€å·§ï¼Œ˜q™é‡Œ˜q˜æœ‰ä¸€ä¸ªæ·å¾„。在<constant ... />æ ‡ç¾é‡Œï¼Œä½¿ç”¨ä½ 通常攑֜¨<bean ... />æ ‡ç¾é‡Œçš„¾cÕd€?/span>---˜q™æ ·åšå¯ä»¥é¿å…对<bean ... />æ ‡ç¾çš„需求ã€?/span>
下题q™å¼ 表列å‡ÞZº†å¯é…¾|®æ‰©å±•点的接å£å’Œå±žæ€§å¿UŽÍ¼šåQˆè¡¨çœç•¥åQ?/span>
惯例优先é…置的原则是Rails带给ä¸ÀLµåº”用开å‘的一个概å¿üc€‚䏿˜¯æä¾›åœ¨å¾ˆå¤šåº”用ä¸éƒ½å¾ˆç±»ä¼¼çš„é…置文äšgåQŒè€Œæ˜¯å‡å®šåœ¨å¤šæ•°æƒ…况下开å‘äh员将会éµä»Žä¸€ä¸ªç‰¹å®šçš„æ¨¡å¼ã€‚这个模å¼éžå¸¸æ™®é以至于å¯ä»¥è¢«è®¤ä¸ºæ˜¯ä¸€ä¸ªæƒ¯ä¾‹ï¼Œ˜q™æ ·ž®±å¯ä»¥åœ¨æ¡†æž¶ä¸æä¾›ä¸€ä¸ªé»˜è®¤çš„é…ç½®è€Œä¸æ˜¯äØ“æ¯ä¸ªæ–°çš„应用æä¾›ä¸€ä¸ªé…¾|®ã€‚默认情况下åQŒå¼€å‘äh员ä¸éœ€è¦æä¾›é…¾|®ä¿¡æ¯ã€‚但是如果有与惯例酾|®ä¿¡æ¯ä¸åŒçš„需è¦ï¼Œž®±å¾—æä¾›ç›¸åº”的酾|®ä¿¡æ¯æ¥ä»£æ›¿é»˜è®¤é…置信æ¯ã€?/span>
Struts2å·²ç»é‡‡ç”¨äº†è¿™¿Uç†å¿üc€‚æ¾è€¦åˆ¾l?/span>Struts2æä¾›å¤§çš„å¼ÒŽ€§ï¼Œä½†æ˜¯åŒæ—¶˜q™ä¹Ÿæ„味ç€è¯¥æ¡†æž¶å¾ˆéš¾è¿›è¡Œé…¾|®ã€‚è€?/span>惯例优先é…ç½®åŽŸåˆ™åˆ™äØ“˜q™ä¸¤¿Uå¯¹ç«‹çš„åŠ›é‡æä¾›äº†åã^衡,使开å‘äh员的开å‘å¯ä»¥æ›´åŠ ç®€å•和高效ã€?/span>
åœ?/span>Struts2ä¸ï¼Œæƒ¯ä¾‹ä¼˜å…ˆé…置的例å包括:
åQ?åQ?span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">
éšå¼é…置文äšgåŠ è²â€?/span>é…置文äšg“Struts-default.xml”å’?#8220;struts-plugin.xml”æ˜¯è‡ªåŠ¨åŠ è½½è€Œä¸æ˜¯æ˜¾å¼åŠ è½½çš„ã€?/span>
åQ?åQ?span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">
æ’äšgä¸çš„代ç â€?/span>当利用æ’ä»¶ä¸çš„ä»£ç æ—¶åQŒä‹Éç”?/span>actionå称和结果嗽W¦äºŒè€…çš„¾l“åˆæ¥è‡ªåЍæœç´¢ç»“果模æ¿ï¼Œæ‰€ä»¥å¯¹äº?#8220;/user/add.action”æ¥è¯´åQŒå°†ä¼šäؓ一ä¸?#8220;success”的结果返å›?#8220;/user/add-success.jsp”模æ¿åQŒè€Œäؓ一ä¸?#8220;error”的结果返å›?#8220;/user/add-error.jsp”模æ¿ã€?/span>
åQ?åQ?span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">
默认¾l“æžœåŠç»“果类åž?/span>â€?/span>当对action˜q›è¡Œé…ç½®æ—Óž¼Œå½“ä‹É用默认的“success”å’?/span>JSPæ—Óž¼Œä¸å¿…指明¾l“果和类型ã€?/span>
åQ?åQ?span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">
¾l‘定Spring业务æœåŠ¡â€?/span>当安装了Spring框架æ’äšgåŽï¼Œä¸å¿…为æ¯ä¸?/span>actioné…置其所需的基äº?/span>Springæä¾›çš„ä¸šåŠ¡ï¼Œå› äØ“˜q™äº›ä¸šåŠ¡ä¼šè‡ªåŠ¨ä¸Žaction˜q›è¡Œ¾l‘定ã€?/span>
在å‰é¢çš„ç« èŠ‚ä¸ï¼Œæˆ‘们已ç»çœ‹åˆ°äº†å‡ 个默认酾|®ï¼Œä»¥åŠå¦‚何通过é…置使用新值æ¥ä»£æ›¿é»˜è®¤å€¹{€?/span>更多的酾|®é€‰é¡¹,ä»¥åŠæ›´å¤šçš„æƒ¯ä¾‹å°†ä¼šåœ¨æŽ¥ä¸‹æ¥çš„ç« èŠ‚ä¸è¿›è¡ŒæŽ¢è®¨ã€?/span>
一个åä¸?#8220;default.properties”的属性文件包å«åœ¨“Struts2-Core”JARæ–‡äšgä¸ã€‚ä½ å¯ä»¥åœ¨ä½ ™å¹ç›®æºæ–‡ä»¶èµ\å¾„çš„æ ¹ç›®å½•ä¸‹åˆ›å¾ä¸€ä¸ªåä¸?#8220;struts.properties”的文ä»Óž¼Œæ¥å¯¹æŸä¸ªå±žæ€§è¿›è¡Œä¿®æ”V€‚è¿™æ ·ä½ ž®±å¯ä»¥å¢žåŠ ä½ æƒŒ™¦ä¿®æ”¹çš„属性。新的属性值将会覆盖默认倹{€?/p>
在开å‘环境下åQŒä½ å¯èƒ½ä¼šè€ƒè™‘修改下é¢ä¸€äº›å±žæ€§ï¼š
(1) struts.i18n.reload = true åQï¼å…许国际化文仉™‡è½½ï¼›
(2) struts.devMode = true åQï¼å…è®¸å¼€å‘æ¨¡å¼ä»¥æä¾›æ›´æ–¹ä¾¿çš„调试功能åQ?br> (3) struts.configuration.xml.reload = true åQï¼å…许XMLé…置文äšgé‡è²åŠŸèƒ½åQŒä»¥ä¾¿åœ¨æœ‰å˜åŒ–æ—¶å¯ä»¥é‡è²è€Œä¸éœ€é‡è²servlet容器ä¸çš„æ•´ä¸ªweb应用åQ?br> (4) struts.url.http.port = 8080 åQï¼è®„¡½®æœåС噍å…许端å£ï¼Œä»¥ä¾¿æ£ç¡®åˆ›å¾ç”Ÿæˆçš„URLã€?/p>
二ã€struts.xmlæ–‡äšg说明
struts.xmlæ–‡äšg包å«äº†å½“ä½ å¼€å‘actionæ—‰™œ€è¦ä¿®æ”¹çš„é…置信æ¯ã€‚䏋颿ˆ‘们æ¥çœ‹ä¸€ä¸‹è¯¥æ–‡äšg的固定结构ã€?br> æ ÒŽ®ä½ 所开å‘应用的功能ä¸åŒåQŒæœ‰å¯èƒ½åœ¨ä½ 的应用ä¸å®Œå…¨ç”¨ä¸ç€“struts.xml”é…置文äšg。我们这里所说的é…ç½®èƒ½å¤Ÿè¢«åŒ…å«æ³¨é‡Šçš„æ›¿ä»£æ–ÒŽ³•ã€?#8220;web.xml”ä¸çš„åˆå§‹åŒ–傿•°åŠå¯æ›¿æ¢URLæ˜ å°„é…ç½®˜q›è¡Œå¤„ç†ã€‚需è¦?#8220;struts.xml”æ–‡äšg˜q›è¡Œé…置的属性有全局¾l“æžœã€å¼‚常处ç†åŠè‡ªå®šä¹‰æ‹¦æˆªå™¨å †æ ˆã€?/p>
˜q™æ˜¯ä¸€ä¸ªXMLæ–‡äšgåQŒæ‰€ä»¥ç¬¬ä¸€ä¸ªå…ƒç´ 是XML版本和解ç ä¿¡æ¯ã€‚æŽ¥ä¸‹æ¥æ˜¯è¯¥XML的文档类型定义(DTDåQ‰ï¼Œæä¾›è¯¥æ–‡æ¡£æ‰€åŒ…å«å…ƒç´ 的结构信æ¯ï¼Œä»¥ä¾¿è¢«XMLè§£æžå™¨å’Œ¾~–辑器ä‹É用ã€?/p>