<html>
<body>
<p>è¯ïL‚¹å‡Õd›¾åƒä¸Šçš„æ˜Ÿçƒï¼ŒæŠŠå®ƒä»¬æ”¾å¤§ã€?/span></p><imgsrc="http://www.w3school.com.cn/i/eg_planets.jpg"
border="0" usemap="#planetmap"
alt="Planets" />
<map name="planetmap" id="planetmap"><areashape="circle"
coords="180,139,14"
href ="http://www.w3school.com.cn/example/html/venus.html"
target ="_blank"
alt="Venus" />
<areashape="circle"
coords="129,161,10"
href ="http://www.w3school.com.cn/example/html/mercur.html"
target ="_blank"
alt="Mercury" />
<areashape="rect"
coords="0,0,110,260"
href ="http://www.w3school.com.cn/example/html/sun.html"
target ="_blank"
alt="Sun" />
</map><p><b>注释åQ?/span></b>img å…ƒç´ ä¸çš„ "usemap" 属性引ç”?/span> map å…ƒç´ ä¸çš„ "id" æˆ?/span> "name" 属性(æ ÒŽ®‹¹è§ˆå™¨ï¼‰åQŒæ‰€ä»¥æˆ‘ä»¬åŒæ—¶å‘ map å…ƒç´ æ·ÕdŠ äº?/span> "id" å’?/span> "name" 属性ã€?/span></p></body></html>1.½W¬ä¸€ä¸?/span>area是圆å½?/span>shape="circle" /*说明是圆å½?/span>*/coords="180,139,14" /*åœ†å¿ƒåæ ‡æ˜?/span>(180,139)åQŒåŠå¾?/span>14*/2.½W¬äºŒarea个是矩åÅžshape="rect" /*说明是矩å½?/span>*/coords="0,0,110,260" /*å·¦ä¸Šè§’åæ ‡æ˜¯(0,0)åQŒå³ä¸‹è§’åæ ‡æ˜?/span>(110,260)/注。å•使˜¯åƒç´ åQŒåæ ‡å¯ä»¥æ˜¯è´Ÿå€?/pre>
Filter是一个很有用的东西,使用filterå¯ä»¥ä¿®æ”¹request, response, session, applicationä¸çš„内容ã€?br />
1. javax.servlet.Filter有两个é‡è¦çš„æ–ÒŽ³•
public void init(FilterConfig config)
public void doFilter(ServletRequest request, ServletResponse response,
1 背景
  在网站å¾è®„¡š„˜q‡ç¨‹ä¸ï¼Œå¤šä¸ªåº”用¾pÈ»Ÿä¸€èˆ¬æ˜¯åœ¨ä¸åŒçš„æ—¶æœŸå¼€å‘完æˆçš„。å„应用¾pÈ»Ÿç”׃ºŽåŠŸèƒ½ä¾§é‡ã€è®¾è®¡æ–¹æ³•å’Œå¼€å‘æŠ€æœ¯æœ‰æ‰€ä¸åŒåQŒä¹Ÿž®±åÅžæˆäº†å„自独立çš?用户库和用户认è¯ä½“系。éšç€¾|‘站的å‘展,会出现这æ ïLš„用户¾Ÿ¤ä½“åQšä»¥å…¶ä¸çš„ä¸€ä¸ªç”¨æˆ·äØ“ä¾‹ï¼Œä»–ï¼ˆå¥¹ï¼‰ä½¿ç”¨¾|‘站的多个应用系¾lŸï¼Œä½†åœ¨æ¯ä¸ªåº”用¾pÈ»Ÿä¸æœ‰ç‹¬ç«‹çš„èÌŽ åøP¼Œæ²¡æœ‰ä¸€ä¸ªæ•´ä½“上的网站用戯‚ÌŽåïLš„æ¦‚念åQŒè¿›å…¥æ¯ä¸€ä¸ªåº”用系¾lŸå‰éƒ½éœ€è¦ä»¥è¯¥åº”用系¾lŸçš„è´¦å·æ¥ç™»å½•ã€‚è¿™å¸¦ç»™ç”¨æˆ·ä¸æ–¹ä¾¿çš„使用感å—åQŒç”¨æˆ·ä¼šæƒ»I¼šæ—¢ç„¶æˆ‘ä‹É用的æ˜?åŒä¸€ä¸ªç½‘站上的应用,ä¸ÞZ»€ä¹ˆä¸èƒ½åœ¨ä¸€‹Æ¡åœ¨¾|‘站上登录之åŽä¸å¿…冾l过应用¾pÈ»Ÿè®¤è¯ç›´æŽ¥˜q›å…¥åº”用¾pÈ»Ÿå‘¢ï¼Ÿç”¨æˆ·çš„è¦æ±‚æˆ‘ä»¬ç§°ä¹‹äØ“ "å•点ç™Õd½•"ã€?/p>
å›?1.1 ¾|‘ç«™ç”¨æˆ·è¦æ±‚å•点ç™Õd½• |
2 分æž
  在多个拥有å„自独立的用户体系的应用系¾lŸé—´å®žçްå•点ç™Õd½•åQŒæˆ‘们è¦è€ƒè™‘以下的问题:
3 设计
  以下是系¾lŸçš„æ•´ä½“设计¾l“æž„åQ?/p>
å›?3.1 ¾pÈ»Ÿ¾l“æž„å›?/strong> |
3.1 å•点ç™Õd½•½Ž¡ç†åº”用
  我们首先设计å•点ç™Õd½•½Ž¡ç†åº”用åQ?/p>
å›?3.2 å•点ç™Õd½•½Ž¡ç†åº”用 |
ã€€ã€€ç”¨æˆ·åœ¨å…¶ä¸æ³¨å†Œä¸€ä¸ªå•点登录èÌŽåøP¼Œç„¶åŽé’ˆå¯¹æ¯ä¸ªåº”用¾pÈ»Ÿ¾l‘定一个该应用¾pÈ»Ÿä¸åŽŸæœ‰çš„è´¦å·åQŒåƈ¾l´æŠ¤˜q™äº›æ³¨å†Œå’Œç»‘定信æ¯ã€‚绑定的˜q‡ç¨‹éœ€è¦å•点登录管ç†åº”用æœåŠ¡å™¨åˆ°åº”ç”¨ç³»¾lŸæœåŠ¡å™¨ä¸ŠéªŒè¯ç”¨æˆäh供的该应用系¾lŸä¸åŽŸæœ‰è´¦å·å’Œå¯†ç ,应用æœåС噍å‡ä»¥ç›¸åŒçš„Web ServiceæŽ¥å£æä¾›è¯¥åŠŸèƒ½æ”¯æŒã€?/p>
3.2 用户å•点ç™Õd½•‹¹ç¨‹
   之åŽä»¥ç”¨æˆ·å•点登录管ç†åº”ç”¨å’Œä»¤ç‰Œä¼ è¾“è¯†åˆ«çš„æ ‡å‡†æ¥å®žçŽ°ç”¨æˆ·å•点ç™Õd½•‹¹ç¨‹ã€?/p>
1ã€ç”¨æˆ¯‚®¿é—®åº”用系¾lŸã€?/p>
å›?3.3 用户å•点ç™Õd½•‹¹ç¨‹ - æ¥éª¤ä¸€
2ã€åº”用系¾lŸå¦‚果检查到用户没有在自å·Þqš„æœåŠ¡å™¨ç™»å½•ï¼Œåˆ™å°†ç”¨æˆ·è¯äh±‚é‡å®šå‘到å•点ç™Õd½•æœåŠ¡å™¨ä¸Šã€‚ï¼ˆä½¿ç”¨é‡å®šå‘å°±å¯ä»¥å¤„ç†å„æœåŠ¡å™¨è·¨åŸŸçš„æƒ…å†µï¼‰
å›?3.4 用户å•点ç™Õd½•‹¹ç¨‹ - æ¥éª¤äº?/strong>
3ã€å•点登录æœåС噍‹‚€æŸ¥åˆ°ç”¨æˆ·å·²ç»å•点ç™Õd½•åQˆå¦‚果用æˆäh²¡æœ‰å•ç‚¹ç™»å½•åˆ™è¦æ±‚用户ç™Õd½•åQŒç™»å½•æ ‡å¿—å˜å‚¨äؓ客户端æµè§ˆå™¨çš„CookieåQ‰ï¼Œæ‰‘Öˆ°è¯¥ç”¨æˆ·åœ¨ç›¸åº”应用¾pÈ»Ÿä¸Šç»‘定的账å·ã€?/p>
å›?3.5 用户å•点ç™Õd½•‹¹ç¨‹ - æ¥éª¤ä¸?/strong> 4ã€å•点登录æœåС噍æ ÒŽ®½W¬ä¸‰æ¥çš„¾l“果生æˆç”¨æˆ·ä»¤ç‰ŒåQŒé‡å®šå‘回应用系¾lŸã€?/p>
å›?3.6 用户å•点ç™Õd½•‹¹ç¨‹ - æ¥éª¤å›?/strong> 5ã€åº”用系¾lŸæŽ¥æ”¶ç»Ÿä¸€æ ¼å¼çš„用户ä×o牌,å–得用户在本¾pÈ»Ÿä¸Šçš„ç™Õd½•è´¦å·åQŒå°†ç”¨æˆ·åœ¨æœ¬¾pÈ»Ÿä¸Šçжæ€ç½®ä¸ºç™»å½•,˜q”回用户è¯äh±‚讉K—®çš„页é¢ã€?/p>
å›?3.7 用户å•点ç™Õd½•‹¹ç¨‹ - æ¥éª¤äº?/strong>
  如果用户在访问应用系¾lŸä¹‹å‰å·²¾l在å•点ç™Õd½•æœåŠ¡å™¨ä¸Šç™Õd½•˜q‡ï¼Œ½W¬äºŒæ¥åˆ°½W¬å››å¸ƒå¯¹ç”¨æˆ·æ¥è¯´ž®±æ˜¯é€æ˜Žçš„ï¼Œç”¨æˆ·æ„Ÿè§‰åªæ˜¯å‘应用系¾lŸå‘å‡ÞZº†è®‰K—®è¯äh±‚åQŒç„¶åŽå¾—åˆîCº†™åµé¢å馈ã€?/p>
4 实现
(ç•?
5 æ€È»“
  本方案设计的用户å•点ç™Õd½•¾pÈ»Ÿåšåˆ°äº†ï¼š
应用¾~–ç 规范对于软äšg本èínå’ŒèÊYä»¶å¼€å‘äh员而言ž®¤äØ“é‡è¦åQŒæœ‰ä»¥ä¸‹å‡ ä¸ªåŽŸå› åQ?/p>
1ã€å¥½çš„ç¼–ç 规范å¯ä»¥å°½å¯èƒ½çš„凞®‘一个èÊYä»¶çš„¾l´æŠ¤æˆæœ¬ , òq¶ä¸”å‡ ä¹Žæ²¡æœ‰ä»ÖM½•一个èÊYä»Óž¼Œåœ¨å…¶æ•´ä¸ªç”Ÿå‘½å‘¨æœŸä¸ï¼Œå‡ç”±æœ€åˆçš„å¼€å‘äh员楾l´æŠ¤åQ?/p>
2ã€å¥½çš„ç¼–ç 规范å¯ä»¥æ”¹å–„èÊYä»¶çš„å¯è¯»æ€§ï¼Œå¯ä»¥è®©å¼€å‘äh员尽快而彻底地ç†è§£æ–°çš„代ç åQ?/p>
3ã€å¥½çš„ç¼–ç 规范å¯ä»¥æœ€å¤§é™åº¦çš„æé«˜å›¢é˜Ÿå¼€å‘çš„åˆä½œæ•ˆçއåQ?/p>
4ã€é•¿æœŸçš„规范性编ç 还å¯ä»¥è®©å¼€å‘äh员养æˆå¥½çš„ç¼–ç ä¹ æƒ¯ï¼Œç”šè‡³é”È‚¼å‡ºæ›´åŠ ä¸¥è°¨çš„æ€ç»´åQ?/p>
二ã€å‘½åè§„èŒ?/p>
1ã€ä¸€èˆ¬æ¦‚å¿?/p>
1ã€å°½é‡ä‹É用完整的英文æè¿°½W?/p>
2ã€é‡‡ç”¨é€‚用于相关领域的术è¯
3ã€é‡‡ç”¨å¤§ž®å†™æ··åˆä½¿åå—å¯è¯?/p>
4ã€å°½é‡å°‘用羃写,但如果用了,必须½W¦åˆæ•´ä¸ªå·¥ç¨‹ä¸çš„¾lŸä¸€å®šä¹‰
5ã€é¿å…ä‹É用长的åå—(ž®äºŽ 15 ä¸ªå—æ¯äØ“æ£å¸¸é€‰æ‹©åQ?/p>
6ã€é¿å…ä‹É用类似的åå—åQŒæˆ–者仅仅是大å°å†™ä¸åŒçš„åå—
7ã€é¿å…ä‹É用下划线åQˆé™¤é™æ€å¸¸é‡ç‰åQ?/p>
2ã€æ ‡è¯†ç¬¦¾cÕdž‹è¯´æ˜Ž
1ã€åŒ…åQ?Package åQ‰çš„命å
Package çš„åå—应该采用完整的英文æè¿°½W¦ï¼Œéƒ½æ˜¯ç”׃¸€ä¸ªå°å†™å•è¯ç»„æˆã€‚åÆˆä¸”åŒ…åçš„å‰ç¼€æ€ÀL˜¯ä¸€ä¸ªé¡¶¾U§åŸŸå,
通常æ˜?comã€eduã€govã€milã€netã€org ½{‰ï¼›
如: com.yjhmily.test
2ã€ç±»åQ?Class åQ‰çš„命å
¾cÕd应该是个一åè¯åQŒé‡‡ç”¨å¤§ž®å†™æ··åˆçš„æ–¹å¼ï¼Œæ¯ä¸ªå•è¯çš„首嗿¯å¤§å†™ã€‚å°½é‡ä¿è¯ç±»å简‹z而富于æ˜q°ã€?/p>
使用完整å•è¯åQŒé¿å…ç¾ƒå†™è¯ ( 除éžå·¥ç¨‹å†…有¾lŸä¸€¾~©å†™è§„范或该¾~©å†™è¯è¢«æ›´å¹¿æ³›ä‹É用,åƒ?URL åQ?HTML)
如: FileDescription
3ã€æŽ¥å£ï¼ˆ Interface åQ‰çš„命å
基本ä¸?Class 的命å规范类伹{€‚在满èƒö Classd 命å规则的基¼‹€ä¹‹ä¸ŠåQŒä¿è¯å¼€å¤´ç¬¬ä¸€ä¸ªå—æ¯äØ“ â€Iâ€ï¼Œ
便于与普通的 Class区别开。其实现¾cÕd¿U°å–接å£åçš„½W¬äºŒä¸ªå—æ¯åˆ°æœ€åŽï¼Œä¸”满‘³ç±»å的命å规范åQ?/p>
如: IMenuEngine
4ã€æžšä¸¾ï¼ˆ Enum åQ‰çš„命å
基本ä¸?Class 的命å规范类伹{€‚在满èƒö Classd 命å规则的基¼‹€ä¹‹ä¸ŠåQŒä¿è¯å¼€å¤´ç¬¬ä¸€ä¸ªå—æ¯äØ“ â€Eâ€?åQ?/p>
便于与普通的 Class区别开�br />如: EUserRole
5ã€å¼‚常( Exception åQ‰çš„命å
异常åQ?Exception åQ?é€šå¸¸é‡‡ç”¨å—æ¯ e 表示异常åQŒå¯¹äºŽè‡ªå®šä¹‰çš„异常类åQŒå…¶åŽç¼€å¿…é¡»ä¸?Exception
如: BusinessException
6ã€æ–¹æ³•( Method åQ‰çš„命å
æ–ÒŽ³•åæ˜¯ä¸€ä¸ªåЍè¯ï¼Œé‡‡ç”¨å¤§å°å†™æØœåˆçš„æ–¹å¼åQŒç¬¬ä¸€ä¸ªå•è¯çš„首嗿¯å°å†™ï¼Œå…¶åŽå•è¯çš„首嗿¯å¤§å†™ã€?/p>
æ–ÒŽ³•åå°½å¯èƒ½çš„æ˜q°å‡ºè¯¥æ–¹æ³•çš„åŠ¨ä½œè¡ŒäØ“ã€‚è¿”å›žç±»åž‹äØ“ Boolean 值的æ–ÒŽ³•一般由â€?is â€æˆ–â€?has â€æ¥å¼€å¤?/p>
如: getCurrentUser() �addUser() �hasAuthority()
7ã€å‚敎ͼˆ Param åQ‰çš„命å
½W¬ä¸€ä¸ªå•è¯çš„首嗿¯å°å†™ï¼Œå…¶åŽå•è¯çš„首嗿¯å¤§å†™ã€‚傿•°é‡åä¸å…许以下划线或美元符å·å¼€å¤ß_¼Œ
虽然˜q™åœ¨è¯æ³•上是å…è®¸çš„ã€‚å‚æ•°å应简çŸä¸”富于æè¿°ã€?/p>
如: public UserContext getLoginUser(String loginName);
8ã€å¸¸é‡å—ŒD?åQ?Constants åQ‰çš„命å
陿€å¸¸é‡å—ŒDµï¼ˆ static final åQ?å…¨éƒ¨é‡‡ç”¨å¤§å†™å—æ¯åQŒå•è¯ä¹‹é—´ç”¨ä¸‹åˆ’¾U¿åˆ†éš”ï¼›
如: public static final Long FEEDBACK;
public static Long USER_STATUS;
ä¸‰ã€æ³¨é‡Šè§„èŒ?/p>
一个很好的å¯éµå¾ªçš„æœ‰å…³æ³¨é‡Šçš„ç»éªŒæ³•则是åQ?/p>
é—®é—®ä½ è‡ªå·±ï¼Œä½ å¦‚æžœä»Žæœªè§˜q‡è¿™ŒDµä»£ç ,è¦åœ¨åˆç†çš„æ—¶é—´å†…有效地明白这ŒDµä»£ç ï¼Œä½ éœ€è¦ä¸€äº›ä»€ä¹ˆä¿¡æ¯ï¼ŸåQŸï¼Ÿ
1ã€ä¸€èˆ¬æ¦‚å¿?/p>
1ã€æ³¨é‡Šåº”è¯¥å¢žåŠ ä»£ç 的清晰åº?/p>
2ã€ä¿æŒæ³¨é‡Šçš„½Ž€‹z?/p>
3ã€åœ¨å†™ä»£ç 之剿ˆ–åŒæ—¶å†™æ³¨é‡?/p>
4ã€æ³¨é‡Šå‡ºä¸ÞZ»€ä¹ˆåšäº†ä¸€äº›äº‹åQŒè€Œä¸ä»…仅是åšäº†ä»€ä¹?/p>
2ã€æ³¨é‡Šå“ªäº›éƒ¨åˆ?/p>
1ã€Java æ–‡äšgåQšå¿…™åÕd†™æ˜Žç‰ˆæƒä¿¡æ¯ä»¥åŠè¯¥æ–‡äšg的创建时间和作者;
2ã€ç±»åQšç±»çš„目的ã€å³¾cÀL‰€å®Œæˆçš„功能,以åŠè¯¥ç±»åˆ›å¾çš„æ—¶é—´å’Œä½œè€…å¿UŽÍ¼›å¤šäh一‹Æ¡ç¼–辑或修改åŒä¸€ä¸ªç±»æ—Óž¼Œ
应在作者å¿U°å¤„出现多ähçš„å¿UŽÍ¼›
3ã€æŽ¥å£ï¼š 在满‘³ç±»æ³¨é‡Šçš„基¼‹€ä¹‹ä¸ŠåQŒæŽ¥å£æ³¨é‡Šåº”该包å«è®¾¾|®æŽ¥å£çš„目的ã€å®ƒåº”如何被使用以åŠå¦‚何ä¸è¢«ä½¿ç”¨ã€?/p>
åœ¨æŽ¥å£æ³¨é‡Šæ¸…æ¥šçš„å‰æä¸‹å¯¹åº”çš„å®žçŽ°¾cÕd¯ä»¥ä¸åŠ æ³¨é‡Šï¼›
4ã€æ–¹æ³•注释: 对于讄¡½® (Set æ–ÒŽ³• ) 与获å?(Get æ–ÒŽ³• ) æˆå‘˜çš„æ–¹æ³•,在æˆå‘˜å˜é‡å·²æœ‰è¯´æ˜Žçš„æƒ…况下,
å¯ä»¥ä¸åŠ æ³¨é‡ŠåQ›æ™®é€šæˆå‘˜æ–¹æ³•è¦æ±‚说明完æˆä»€ä¹ˆåŠŸèƒ½ï¼Œå‚æ•°å«ä¹‰æ˜¯ä»€ä¹ˆä¸”˜q”回å€ég»€ä¹ˆï¼›å¦å¤–æ–ÒŽ³•的创å»?/p>
æ—‰™—´å¿…须注释清楚åQŒäØ“ž®†æ¥çš„维护和阅读æä¾›å®è´µ¾U¿çƒ¦åQ?/p>
5ã€æ–¹æ³•内部注释: 控制¾l“æž„åQŒä»£ç åšäº†äº›ä»€ä¹ˆä»¥åŠäØ“ä»€ä¹ˆè¿™æ ·åšåQŒå¤„ç†é¡ºåºç‰åQŒç‰¹åˆ«æ˜¯å¤æ‚的逻辑处ç†éƒ¨åˆ†åQ?/p>
è¦å°½å¯èƒ½çš„ç»™å‡ø™¯¦¾l†çš„æ³¨é‡ŠåQ?/p>
6ã€å‚敎ͼš 傿•°å«ä¹‰ã€åŠå…¶å®ƒä»ÖM½•¾U¦æŸæˆ–剿æ¡ä»Óž¼›
7ã€å±žæ€§ï¼š å—æ®µæè¿°åQ?/p>
8ã€å±€éƒ?( ä¸é—´ ) å˜é‡åQ?æ— ç‰¹åˆ«æ„义的情况下ä¸åŠ æ³¨é‡Šï¼›
3ã€æ³¨é‡Šæ ¼å¼?/p>
éµåó@å·¥ç¨‹è§„å®šçš„ç»Ÿä¸€æ³¨é‡Šæ ¼å¼åQŒä¸€èˆ¬æƒ…况下会以 codetemplates.xml æ ¼å¼çš„æ–‡ä»¶å¯¼å…?IDE(Eclipse)
或者用Eclipse默认的;
å››ã€ä»£ç æ ¼å¼è§„èŒ?/p>
éµåó@å·¥ç¨‹è§„å®šçš„ç»Ÿä¸€ä»£ç æ ¼å¼åQŒä¸€èˆ¬æƒ…况下直接使用 IDE(Eclipse) è‡ªå¸¦çš„é»˜è®¤ä»£ç æ ¼å¼å¯¹ä»£ç ˜q›è¡Œæ ¼å¼åŒ–ï¼›
五ã€å…¶ä»–è§„èŒ?/p>
JSP æ–‡äšg命å
采用完整的英文æ˜q°è¯´æ˜?JSP 所完æˆçš„功能,ž®½å¯èƒ½åŒ…括一个生动的动è¯åQŒç¬¬ä¸€ä¸ªå—æ¯å°å†™ï¼Œ
如: viewMessage.jsp ã€editUser.jsp ½{‰ã€?/p>
å…ã€å·¥½E‹ç‰¹æœ‰å‘½åè§„èŒ?/p>
1ã€æŒä¹…层
1ã€?Hibernate æ˜ å°„æ–‡äšgåŠå®žä½?/p>
与数æ®åº“表å¿U°å®Œå…¨å¯¹åº”ï¼›
如: Advertisement.hbm.xml �Advertisement.java
2ã€æ•°æ®è®¿é—?DAO
DAO 接å£å’Œå®žçŽ°ç±»å称必须完全½W¦åˆæ£å¸¸æŽ¥å£å’Œå®žçŽ°ç±»çš„å‘½å规则,且最åŽä»¥ â€DAOâ€?¾l“å°¾
DAO 内的数æ®è®‰K—®æ–ÒŽ³•å¿…é¡»‘›_¤ŸæŠ½è±¡çš„æ˜q°å‡ºå¯ÒŽ•°æ®åº“的基æœ?CRUD æ“作åQ?br />如: ICrossAdDAO( æŽ¥å£ ) ã€?CrossAdDAO( 实现¾c?)
3ã€å„¿Uæ“作数æ®åº“çš?HQL é…置文äšg
HQL æ–‡äšg的个数原则上与系¾lŸçš„ Services 层的æœåŠ¡ä¸ªæ•°ç›¸ç‰åQŒä¸”以æœåŠ¡å¿U°å‘½å?HQL æ–‡äšgåQ?/p>
如: resource.hbm.xml
2ã€æœåС层
1ã€æœåŠ¡æŽ¥å£å’Œå®žçް
æœåŠ¡æŽ¥å£å’Œå®žçŽ°ç±»å¿…é¡»å®Œå…¨½W¦åˆæ£å¸¸æŽ¥å£å’Œå®žçŽ°ç±»çš„å‘½å规则;以工½E‹å®šä¹‰çš„æœåŠ¡å䨓ä¸ÖM½“åQ?/p>
òq¶ç»Ÿä¸€ä»?â€Servâ€?¾l“å°¾
如: IResourceServ( æœåŠ¡æŽ¥å£ ) ã€?ResourceServ( 接å£å®žçް¾c?)
2ã€æœåŠ¡æŽ¥å£æ–¹æ³?/p>
æ–ÒŽ³•åæ˜¯ä¸€ä¸ªåЍè¯ï¼Œé‡‡ç”¨å¤§å°å†™æØœåˆçš„æ–¹å¼åQŒç¬¬ä¸€ä¸ªå•è¯çš„首嗿¯å°å†™ï¼Œå…¶åŽå•è¯çš„首嗿¯å¤§å†™ã€?/p>
æ–ÒŽ³•åå°½å¯èƒ½çš„æ˜q°å‡ºè¯¥æ–¹æ³•çš„åŠ¨ä½œè¡ŒäØ“ã€?/p>
˜q”回¾cÕdž‹ä¸?Boolean å€û|¼šç”¨â€?is â€æˆ–â€?has â€æ¥å¼€å¤?br />å¾—åˆ°æŸæ•°æ®ï¼š get+ æ•°æ®æè¿°åè¯å¤æ•° + 数殾cÕdž‹åQ?br />得到所有数æ®ï¼š get+All+ æ•°æ®æè¿°åè¯å¤æ•° + 数殾cÕdž‹åQ?br />通过 XXX 得到 / æŸ¥è¯¢æŸæ•°æ®ï¼š get/query+ æ•°æ®æè¿°åè¯å¤æ•° + 数殾cÕdž‹ +By+ æ¡äšgåQ?br />æ·ÕdŠ æŸæ•°æ®ï¼š save/add+ æ•°æ®æè¿°åè¯ ()
æ›´æ–°æŸæ•°æ®ï¼š save/update+ æ•°æ®æè¿°åè¯åQ?br />åˆ é™¤æŸæ•°æ®ï¼š delete/remove+ æ•°æ®æè¿°åè¯åQ?/p>
3ã€ä¸šåС坹è±?/p>
业务åç§° +BO
4ã€æŸ¥è¯¢å‚数对è±?/p>
凡是¾l§æ‰¿ Abst***QuerySpec çš„æŸ¥è¯¢å‚æ•°ç±»å…¨éƒ¨æ»¡èƒö以下规则åQ?br />Query+ æ‰€è¦æŸ¥è¯¢çš„æ•°æ®æè¿°åè¯ +Spec
ä½œäØ“å‚æ•°ä¼ å…¥æ—Óž¼Œå‚æ•°åå¿…™åÖMØ“åQšæ‰€è¦æŸ¥è¯¢çš„æ•°æ®æè¿°åè¯ +Spec
如: QueryProgramSpec
3ã€MVC å±?
1ã€Action 控制å±?/p>
Action ¾cÕdåQšåŠŸèƒ½æ¨¡å—å¿U?+Action åQ?br />Actoin æ–ÒŽ³•åç§°ž®½å¯èƒ½çš„æè¿°å‡ºé¡µé¢è¿¿UÈš„åŽÕd‘
如: LoginAction( ç™Õd½•ç”?action) åQ?toWelcome( 转呋Ƣ迎™å늚„ action æ–ÒŽ³• )
2ã€èµ„æºæ–‡ä»?/p>
¾pÈ»Ÿå…¨å±€èµ„æºæ–‡äšgåQ?globalMessages_+ å—符¾~–ç ¾cÕdž‹ +.properties
功能模å—å†…éƒ¨çš„èµ„æºæ–‡ä»Óž¼š package.properties
4ã€Spring é…置文äšg
1ã€Action 相关é…置文äšg
æ–‡äšg目录åQ?WebRoot/WEB-INF/spring/action/ 功能模å—åç§° +_ApplicationContext.xml
2ã€Services 相关é…置文äšg
æ–‡äšg目录åQ?WebRoot/WEB-INF/spring/services/Services_ApplicationContext.xml
3ã€å…¨å±€æ€§é…¾|®æ–‡ä»?/p>
æ–‡äšg目录åQ?WebRoot/WEB-INF/spring/工程å?_ApplicationContext.xml
5ã€JSP æ–‡äšg
采用完整的英文æ˜q°è¯´æ˜?JSP 所完æˆçš„功能,ž®½å¯èƒ½åŒ…括一个生动的动è¯åQŒç¬¬ä¸€ä¸ªå—æ¯å°å†™ï¼Œ
如: viewMessage.jsp ã€editUser.jsp ½{‰ã€?/p>
本文æ¥è‡ªCSDNåšå®¢åQŒè{è½½è¯·æ ‡æ˜Žå‡ºå¤„åQ?a >http://blog.csdn.net/lyjia2001/archive/2007/11/02/1863402.aspx