锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
鏇村璇︽儏璇峰弬瑙侊細鎴戠殑鍗氬 鎴戠殑鐢熸椿
璇存槑錛?/strong>鍏蜂綋妗堜緥鐨勫垎鏋愶紝璇︾粏鐨勫垎鏋愬湪璁茶В鐨勮繃紼嬩腑鍐嶉槓榪幫紙榪欎喚妗堜緥澶х害鍦?4騫村凡緇忓畬鎴愶紝鎵浠ョ幇鍦ㄧ湅璧鋒潵闅懼厤鏈変簺涓嶇鍚堟椂浠f疆嫻侊紝棰嗕細綺劇鍗沖彲錛?/p>
姒傝
涓昏閽堝琛╠epartment鎿嶄綔錛屽垱寤恒佹洿鏂般佸垹闄ゃ侀夋嫨
灞傛緇撴瀯璇存槑
鍏卞垎涓哄洓灞?mid銆乵idimpl銆乤pplication銆乸resentation 涓鑸紑鍙戝熀浜嶮VC緇撴瀯鐨勫簲鐢ㄦ潵璇達紝灞傛鐨勫垝鍒嗘槸寰堥噸瑕佺殑錛屼笁灞傜粨鏋勩佷簬鑷充簬澶氬眰緇撴瀯鐨勬紨鍙樻湁鍏朵竴瀹氱殑閬撶悊銆侻VC鏈韓灝辨槸妯″瀷銆佽鍥俱佹帶鍒剁殑灞傛鍒掑垎錛岃繖鏍鋒湁鍔╀簬鑱岃兘鐨勬槑紜紝鍔犲揩寮鍙戞晥鐜囷紝鏈閲嶈鐨勬槸緋葷粺鐨勬妸鎻″害鍜屽彲鎵╁睍鐨勮兘鍔涖?/p>
褰撶劧榪欓噷鐨勫洓灞傚垝鍒嗭紝涓嶆槸緇濆鐨勶紝鏍規嵁涓嶅悓鐨勯」鐩彲浠ユ湁涓嶅悓鐨勮皟鏁達紝鍙槸浣滀負涓涓弬鑰冿紝榪欐槸涓涓疄闄呴」鐩腑淇濈暀涓嬫潵鐨勶紝鏈夊叾涓瀹氱殑縐戝鎬с?/p>
mid錛氭帴鍙e拰鎶借薄綾婚儴鍒嗭紝鏄浉瀵圭郴緇熷簳灞傜殑鍔熻兘鐨勯泦涓綋鐜幫紝鐩稿鍏遍氭ч儴鍒?/p>
midimpl錛氭槸瀵筸id灞傜殑鍏蜂綋鐜板疄 application錛氬叿浣撲笟鍔¢昏緫銆佹ā鍨?/p>
presentation錛氳〃榪板眰錛宻truts鐨勫叿浣撳疄鐜伴儴鍒?/p>
鍏蜂綋涓轟綍濡傛鍒掑垎灞傛錛屼細鍏蜂綋璁茶В錛屼篃璇峰ぇ瀹惰冭檻涓涓嬨?/p>
涓嬮潰鍏蜂綋璁茶ВStrutsSample鐨勫悇涓粍鎴?/strong>
綾?/strong>
mid
DAOFactory錛氭槸閲囩敤浜嗗伐鍘傛ā寮忔潵瀹炵幇鐨勶紝鍏墮棿鍙堟湁DAO妯″紡銆?/p>
鍔熻兘錛氬緱鍒癉AOFactoryImpl錛圖AOFactory鐨勫叿浣撳疄鐜幫級瀹炰緥錛屽茍鎻愪緵浜嗕袱涓?strong>abstract
鏂規硶錛屽湪DAOFactoryImpl蹇呴』寰椾互瀹炵幇銆?/p>
DepartmentDAO錛氭搷浣滆〃department鐨勬帴鍙o紝瀹氫箟浜嗕竴浜涘琛ㄧ殑鍩烘湰鎿嶄綔
midimpl
DAOFactoryImpl: DAOFactory鐨勫叿浣撳疄鐜幫紝鍦―AOFactory涓殑涓や釜abstract鏂規硶涔熷緱浠ュ疄
鐜幫細init錛堬級鏂規硶錛屽彇寰楁暟鎹簮銆俫etDepartmentDAO錛堬級鏂規硶錛屽緱鍒版帴鍙epartmentDAO鐨勫叿浣撳疄渚婦epartmentDAOImpl銆傞櫎浜嗚蹇呴』瀹炵幇鐨勬柟娉曞錛岃繕瀹氫箟浜唃etConnection錛堬級鏂規硶錛屼互鍙栧緱瀵規暟鎹簮鐨勮繛鎺ャ?/p>
DepartmentDAOImpl錛氭帴鍙epartmentDAO鐨勫叿浣撳疄鐜幫紝琛ㄧ殑鎿嶄綔鍏蜂綋瀹炵幇銆?/p>
application
Department錛氬畾涔変簡涓涓暟鎹産ean錛屽彲浠ュ鐓ф暟鎹〃department錛屽彂鐜版槸瀵瑰簲瀹冪殑涓涓
璞$殑瀹炵幇銆?/p>
DepartmentBO錛氬畾涔変簡榪欎釜搴旂敤紼嬪簭涓墍闇瑕佺殑涓氬姟閫昏緫錛屾瘮濡俿electDepartment錛圫tring depid錛夋柟娉曪紝鏍規嵁涓涓儴闂ㄧ殑ID鏉ヨ幏寰楄閮ㄩ棬鐨勮緇嗘暟鎹乧reateDepartment錛堬級銆乽pdateDepartment錛堬級銆? deleteDepartment錛堬級鍒嗗埆瀵瑰簲鍒涘緩銆佹洿鏂般佸垹闄?/p>
presentation
DepartmentForm:Form Bean琛ㄥ崟錛屾敹闆咼SP欏甸潰涓婄殑鍏冪礌銆傚彲浠ュ彂鐜板畠鍜宎pplication灞傜殑Department綾繪槸綾諱技鐨勶紝鍥犱負Form琛ㄥ崟鎵鏀墮泦鐨勬暟鎹湡濂芥槸瀵? 搴旀暟鎹簱涓殑瀛楁鐨勩傦紙榪欏彧鏄釜姣旇緝鐗規畩鐨勪緥瀛愯屽凡錛屽紑鍙戜腑涓嶄竴瀹氶兘鏄繖鏍風殑錛岃繖閲屽悓鏃跺紩鐢沖嚭涓涓棶棰橈紝灞呯劧涓や釜綾繪槸綾諱技鐨勶紝涓轟粈涔堜笉鍚堝茍涓涓嬶紝灝辯敤鍏朵腑 鐨勪竴涓被鐨勶紝榪欐牱涓嶆槸榪樺彲浠ヨ妭鐪佷竴涓被鍚楋紵錛?/p>
CreateDepartmentAction錛氬垱寤洪儴闂ㄧ殑Action綾?/p>
DeleteDepartmentAction錛氬垹闄ら儴闂ㄧ殑Action綾?/p>
ListDepartmentAction錛氭墍鏈夐儴闂ㄧ殑涓涓垪琛?/p>
SelectDepartmentAction錛氶夋嫨涓涓儴闂?/p>
UpdateDepartmentAction錛氭洿鏂伴儴闂ㄧ殑Action綾?/p>
璧勬簮鏂囦歡
ApplicationResources.properties
JSP
index.jsp
Create
鈥搑egister.jsp
鈥搒uccess.jsp
鈥揻ailure.jsp
list
鈥揹epartmentList.jsp
鈥揻ailure.jsp
update
鈥搖pdate.jsp
鈥揻ailure.jsp
struts-config.xml
<?xml version=鈥?.0鈥?encoding=鈥滻SO-8859-1鈥??>
<!DOCTYPE struts-config PUBLIC
鈥?//Apache Software Foundation//DTD Struts Configuration 1.1//EN鈥?/p>
鈥渉ttp://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd鈥?gt;
<struts-config>
<!鈥?========== Form Bean Definitions =================================== 鈥?gt;
<form-beans>
<!鈥?Logon form bean 鈥?gt;
<form-bean聽聽 name=鈥漝epartmentForm鈥?/p>
type=鈥漜n.haose.struts.presentation.DepartmentForm鈥?gt;
</form-bean>
</form-beans>
<!鈥?========== Action Mapping Definitions ============================== 鈥?gt;
<action-mappings>
<action聽 path=鈥?create鈥?/p>
type=鈥漜n.haose.struts.presentation.CreateDepartmentAction鈥?/p>
name=鈥漝epartmentForm鈥?/p>
scope=鈥漴equest鈥?/p>
input=鈥?create/register.jsp鈥?gt;
<forward name=鈥漵uccess鈥澛犅?path=鈥?create/success.jsp鈥?>
<forward name=鈥漟ailure鈥澛犅?path=鈥?create/failure.jsp鈥?>
</action>
<action聽 path=鈥?list鈥?/p>
type=鈥漜n.haose.struts.presentation.ListDepartmentAction鈥?/p>
>
<forward name=鈥漵uccess鈥澛犅?path=鈥?list/departmentList.jsp鈥?>
<forward name=鈥漟ailure鈥澛犅?path=鈥?list/failure.jsp鈥?>
</action>
<action聽 path=鈥?select鈥?/p>
type=鈥漜n.haose.struts.presentation.SelectDepartmentAction鈥?/p>
>
<forward name=鈥漵uccess鈥澛犅?path=鈥?update/update.jsp鈥?>
<forward name=鈥漟ailure鈥澛犅?path=鈥?update/failure.jsp鈥?>
</action>
<action聽 path=鈥?delete鈥?/p>
type=鈥漜n.haose.struts.presentation.DeleteDepartmentAction鈥?/p>
>
<forward name=鈥漵uccess鈥澛犅?path=鈥?list.do鈥?>
<forward name=鈥漟ailure鈥澛犅?path=鈥?update/failure.jsp鈥?>
</action>
<action聽 path=鈥?update鈥?/p>
type=鈥漜n.haose.struts.presentation.UpdateDepartmentAction鈥?/p>
name=鈥漝epartmentForm鈥?/p>
scope=鈥漴equest鈥?/p>
input=鈥?update/update.jsp鈥?gt;
<forward name=鈥漵uccess鈥澛犅?path=鈥?list.do鈥?>
<forward name=鈥漟ailure鈥澛犅?path=鈥?update/failure.jsp鈥?>
</action>
</action-mappings>
<!鈥?========== Message Resources Definitions =========================== 鈥?gt;
<message-resources parameter=鈥滱pplicationResources鈥?strong>/>
</struts-config>
web.xml.
<?xml version=鈥?.0鈥?encoding=鈥漊TF-8鈥?>
<!DOCTYPE web-app PUBLIC 鈥?//Sun Microsystems, Inc.//DTD Web Application 2.3//EN鈥? 鈥渉ttp://java.sun.com/dtd/web-app_2_3.dtd鈥?gt;
<web-app id=鈥漌ebApp鈥?gt;
<display-name>sample</display-name>
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!鈥?Action Servlet Mapping 鈥?gt;
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!鈥?Struts Tag Library Descriptors 鈥?gt;
<taglib>
<taglib-uri>/WEB-INF/struts-bean.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/struts-html.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-html.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/struts-logic.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-logic.tld</taglib-location>
</taglib>
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/SAMPLE</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>
鏁版嵁婧?/strong>
Tomcat 涓殑 server.xml
<Context path=鈥?sample鈥?docBase=鈥漵ample鈥?debug=鈥?鈥?/strong>
reloadable=鈥漷rue鈥?crossContext=鈥漷rue鈥?gt;
<Resource name=鈥漥dbc/SAMPLE鈥?/strong>
auth=鈥滳ontainer鈥?/strong>
type=鈥漥avax.sql.DataSource鈥?>
<ResourceParams name=鈥漥dbc/SAMPLE鈥?gt;
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>oracle.jdbc.OracleDriver</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:oracle:thin:@hao-se:1521:haose</value>
</parameter>
<parameter>
<name>username</name>
<value>test1</value>
</parameter>
<parameter>
<name>password</name>
<value>test1</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>10</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>1</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>-1</value>
</parameter>
</ResourceParams>
</Context>
鏈鍚庨檮涓婅繍琛岀敾闈?/strong>
Index.jsp
Create聽聽 register.jsp
Create聽聽 success.jsp
Create聽聽 failure.jsp
list聽聽聽 departmentList.jsp
list聽聽聽 failure.jsp
update聽聽聽聽 update.jsp
涓銆伮犅犅?涓轟簡鏇村ソ鐨勭悊瑙truts錛岄鍏堣瑙rontController妯″紡
1銆伮犅犅?闃呰騫跺敖鍙兘鐨勭悊瑙rontController.doc榪欎喚鏂囨。
2銆伮犅犅?鎻愰棶鍏充簬鍓嶄竴闃舵鏈夊叧MVC鐨勫涔犳儏鍐?br />
3銆伮犅犅?緇撳悎MVC鐨勫涔狅紝璋堣皥FrontController鍦ㄨ繖閲岃搗鍒頒粈涔堟牱鐨勪綔鐢?br />
4銆伮犅犅?鏂囨。涓叧浜庤姹傜被鍨嬬殑閫氫俊錛屾槧灝勭殑鐞嗚В
5銆伮犅犅?鏂囨。涓叧浜庢槧灝勶紝鍙槸鍋氫簡涓涓畝鍗曠殑灝佽錛屽鏋滈噰鐢ㄦ槧灝勫閮ㄥ寲錛堝XML錛?閭d箞鍏蜂綋濡備綍鐜板疄錛岃璇村嚭澶т綋鏂規錛堜笉瑕佹眰鍏蜂綋浠g爜鐨勫疄鐜幫級
6銆伮犅犅?鏈夊叧鏂囨。涓彁鍙婄殑鍑犱釜闂錛屼綘鏄浣曠悊瑙g殑
浜屻伮犅犅?struts瀹炰緥璁茶В
1銆伮犅犅?鍦ㄩ泦鎴愬紑鍙戠幆澧冧腑錛屽垱寤烘柊鐨勫伐紼?br />
2銆伮犅犅?涓鑸簲鐢ㄧ殑灞傛緇撴瀯
3銆伮犅犅?閲嶇偣璇存槑鍦ㄨ繖涓疄渚嬩腑鎺ュ彛鍜屾娊璞$殑閲嶈鎬?br />
4銆伮犅犅?鎺ヤ笂涓璇濋錛宮id鍜宮idimpl灞傜殑鍏蜂綋瀹炵幇
5銆伮犅犅?鏈夊叧application鐨勪竴鑸蹇碉紝鍏蜂綋鍦ㄨ繖涓疄渚嬩腑鐨勫疄鐜?br />
6銆伮犅犅?presentation灞傦紙struts鐨勯泦涓疄鐜伴儴鍒嗭級鐨勮瑙?br />
7銆伮犅犅?鏈夊叧瀹炰緥涓敤鍒扮殑璧勬簮鏂囦歡鐨勮鏄?br />
8銆伮犅犅?struts-config.xml鏂囦歡鐨勯厤緗?br />
9銆伮犅犅?web.xml鏂囦歡鐨勯厤緗?br />
10銆乯sp鐨勫埗浣滐紝涓夌甯告爣絳懼簱鐨勫簲鐢?br />
11銆佹湁鍏蟲暟鎹簮鐨勪竴鑸粙緇?br />
12銆佸浣曞湪闆嗘垚寮鍙戠幆澧冧腑榪愯榪欎釜瀹炰緥錛堥渶鎺屾彙鍓嶄竴闃舵鏈夊叧IDE鐨勫涔狅級
涓夈佸彂甯冨疄渚嬪埌搴旂敤鏈嶅姟鍣ㄤ腑鍘伙紙Tomcat錛?br />
1銆伮犅犅?Tomcat鐩稿叧鍩虹
2銆伮犅犅?Tomcat瀹夎銆侀厤緗?br />
3銆伮犅犅?web.xml
4銆伮犅犅?server.xml
5銆伮犅犅?濡備綍鍙戝竷涓涓叿浣撶殑瀹炰緥
鏇村璇︽儏璇峰弬瑙侊細鎴戠殑鍗氬 鎴戠殑鐢熸椿
姒傝錛欶ront Controller錛堟ā寮忥級
璇存槑錛?br /> 璁茶Вstruts鍏蜂綋渚嬪瓙涔嬪墠錛屽厛璇存槑涓涓婩ront Controller妯″紡(鍓嶇鎺у埗鍣ㄦā寮?銆俿truts灝辨槸瀹冪殑鍏蜂綋瀹炵幇錛屽緱浠ユ墿灞曪紝騫朵笖鏄疢odel2緇撴瀯鐨勫畬鏁村疄鐜般?/p>
Model2緇撴瀯閫氳繃涓涓帶鍒剁粍浠舵潵鎺ュ彈璇鋒眰錛岃繖涓帶鍒剁粍浠舵湰韜彲浠ヤ負璇鋒眰鎻愪緵鏈嶅姟錛屼篃鍙互鎶婅繖欏逛換鍔″垎閰嶇粰鍏朵粬涓浜涚粍浠躲傜敓鎴愬搷搴斾俊鎭殑浠誨姟鎺ョ潃琚垎閰嶇粰閫傚綋鐨勮鍥劇粍浠躲傚疄鐜拌繖縐嶈姹傜殑鏂瑰紡寰堝錛孎ront Controller灝辨槸鍏朵腑涓縐嶃?br />
瀹炵幇鍓嶇鎺у埗鍣ㄥ彲浠ラ噰鍙栦笉鍚岀殑絳栫暐錛屼竴縐嶅吀鍨嬬殑絳栫暐鏄嬌鐢ㄤ竴涓猻ervlet
闂錛?/strong>濡傛灉鎶婃墍鏈夌殑鍔熻兘闆嗕腑璧鋒潵浼氬嚭鐜頒竴涓ぇ鑰岃噧鑲跨殑鎺у埗鍣ㄧ粍浠訛紝瀹冨皢璐熻矗鏁翠釜Web鐨?br />
鐩稿叧澶勭悊銆?br />瑙e喅錛?/strong>鍔炴硶涔嬩竴鏄嬌鐢ㄥ涓墠绔帶鍒跺櫒錛屽垎鍒礋璐f煇涓鏂歸潰鐨勫鐞嗕換鍔?br />
鍙︿竴縐嶈В鍐蟲柟妗堟槸浣跨敤Command and Controller錛堝懡浠や笌鎺у埗鍣級錛堢◢鍊欎粙緇嶏級
涓嬮潰鏄繖縐岶ront Controller妯″紡紺轟緥紼嬪簭妗嗘灦瀹炵幇錛?br />
public class FrontController extends HttpServlet {
protected void processRequest(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
RequestDispatcher dispatcher =
getServletContext().getRequestDispatcher(nextView);
dispatcher.forward(req, res);
}
protected void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
processRequest(req, res);
}
protected void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
processRequest(req, res);
}
}
鍦ㄨ繖閲岋紝瀹冨彧鏄疕ttpServlet涓涓畝鍗曠殑鎵╁厖錛岄粯璁ゅ疄鐜頒簡doGet()鍜宒oPost()鏂規硶錛岃繖涓や釜鏂規硶璐熻矗鎶婅姹傚垎閰嶇粰鍙︿竴涓彨processRequest()鐨勬柟娉曘傝繖鏄負浜嗕繚璇佷笉璁哄彂鍑轟粈涔堣姹傦紝鍓嶇鎺у埗鍣ㄩ兘鑳戒負涔嬫彁渚涙湇鍔°?br /> 鍦╬rocessRequest()鐨勬柟娉曚腑鎴戜滑鐪佸幓涓昏閮ㄥ垎錛屼絾瀹為檯涓婂墠绔帶鍒跺櫒灝嗗厛鎵ц涓庤姹傚叧鑱旂殑澶勭悊錛岀劧鍚庡啀鎶婂畠鍒嗛厤緇欎竴涓鍥劇粍浠舵潵鐢熸垚鐩稿叧鐨? 鍝嶅簲淇℃伅銆傝鍥劇粍浠朵竴鑸槸JSP欏甸潰銆傛帶鍒跺櫒瀹屾垚浜嗚嚜宸辯殑涓氬姟閫昏緫涔嬪悗錛屽畠灝卞彲浠ラ氳繃RequestDispatcher鎶婂鐞嗗垎閰嶇粰涓涓狫SP銆?br /> 鍒版浣犲彲鑳戒細鎻愬嚭涓涓棶棰樸傚鏋滄帶鍒跺櫒瑕佽礋璐e鐞嗘墍鏈夌殑璇鋒眰錛岄偅涔堝畠鎬庝箞鐭ラ亾鍚勮姹傞兘鏄粈涔堜互鍙婂浣曞鐞嗗憿錛燂紙Command and Controller錛屼笂闈㈤棶棰樻墍鎻愬埌鐨勶紝鐜板湪寮濮嬭瑙o級
Command and Controller絳栫暐
鍦–ommand and Controller絳栫暐涓紝澶勭悊姣忎釜鍏蜂綋璇鋒眰鐨勯昏緫琚漿縐誨埌浜嗕竴涓崟鐙殑緇勪歡涓?br />
榪欎簺棰濆緇勪歡鍚勮〃紺轟竴涓叿浣撶殑鍛戒護錛堟垨鎿嶄綔錛屾棦action錛夛紝騫朵笖緇勪歡涓皝瑁呯潃鎵ц鐩稿叧鎿嶄綔鐨勯昏緫銆?br />
鍓嶇鎺у埗鍣ㄦ妸瀵硅姹傜殑澶勭悊鍒嗛厤緇欓傚綋鐨勫懡浠ょ粍浠躲?br />鎿嶄綔綾?/strong>
涓轟簡瀹炵幇Command and Controller絳栫暐錛岄鍏堥渶瑕佸畾涔変綅浜庢帶鍒跺櫒鍜屾搷浣滅粍浠朵箣闂寸殑鎺ュ彛銆?br />
public abstract class Action {
public abstract String process(HttpServletRequest req, HttpServletResponse res);
}
鍏充簬璇鋒眰綾誨瀷鐨勯氫俊
榪欓噷鐨勫鐞嗗涓嬶細FrontController Servlet鍜孶RI/controller/*涔嬮棿瀹氫箟浜嗕竴涓槧灝?br />
<servlet>
<servlet-name>FrontController</servlet-name>
<servlet-class>com.wxhx.controller.FrontController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FrontController</servlet-name>
<url-pattern>/controller/*</url-pattern>
</servlet-mapping>
涓轟簡浠庨檮鍔犺礬寰勪俊鎭腑鑾峰緱鐨勫瓧絎︿覆鏄犲皠鍒頒竴涓壒瀹氱殑鎿嶄綔瀹炰緥涓婏紝褰撶劧錛屽悓鏍鋒湁寰堝絳栫暐鍙緵閫夋嫨錛屽叾涓渶鐏墊椿鐨勫氨鏄妸榪欑鏄犲皠澶栭儴鍖栵紝渚嬪鍙互閫氳繃涓涓猉ML鏂囦歡銆?br />
涓轟簡綆鍗曡搗瑙侊紝鎴戜滑鍦ㄨ繖閲屽緩绔嬩竴涓崟鐙殑緇勪歡錛岀敤浜庡皝瑁呰繖縐嶆槧灝勩?br />
public class ActionHelper {
private static HashMap actions = new HashMap();
static {
actions.put(鈥滾ogin鈥? 鈥渃om.sample.LoginAction鈥?;
}
public static Action getAction(String name) {
Action action = null;
try {
Class c = Class.forName((String) actions.get(name));
action = (Action) c.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return action;
}
}
濂戒簡錛屼互涓婂氨鏄瀹炵幇鐨勪竴涓畝鍗曠殑妗嗘灦綾籉rontController錛孉ction浠ュ強杈呭姪鐨凙ctionHelper綾?/p>
涓嬩竴姝ユ槸鎶婃墍鏈夎繖浜涘鐞嗘彃鍏ュ埌FrontController鐨刾rocessRequest鏂規硶涓紝榪欏皢鏄疻eb搴旂敤紼嬪簭涓墍鏈夎姹傜殑鍗曚竴鍏ュ彛錛?br />
public class FrontController extends HttpServlet {
protected void processRequest(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
String actionName =req.getPathInfo().substring(1);
Action action =ActionHelper.getAction(actionName);
String nextView =action.process(req, res);
RequestDispatcher dispatcher =
getServletContext().getRequestDispatcher(nextView);
dispatcher.forward(req, res);
}
protected void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
processRequest(req, res);
}
protected void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
processRequest(req, res);
}
}
鍏蜂綋鐩稿叧鍐呭鍙弬瑙佸疄渚嬶紒
婧愮爜涓嬭澆(index.rar)錛?/span> 璧勬簮涓嬭澆涓績
鏇村璇︽儏璇峰弬瑙?鎴戠殑鍗氬 鎴戠殑鐢熸椿
璇存槑錛氫唬鐮佺殑緇撴瀯鍜岄鏍煎歡緇笂涓綃囷紝鏇村ソ鐨勮鎳備唬鐮?/p>
action錛歋endMailAction 鍜孉ctiveMQ閭d喚浠g爜鍩烘湰鐩稿悓錛岀畝鍗曠殑鐢ㄤ簬鎺у埗閭歡鐨勫彂閫?/p>
util錛氳繕鏄疌onstants甯擱噺鏁版嵁
service錛歁ailService緇撳悎Spring鐨勯厤緗枃浠秏ail.xml錛屾敞鍏ヤ簡JavaMail鍜寁elocity妯℃澘寮曟搸錛屽湪鍐呴儴綾籑ailThread錛堢嚎紼嬬被錛変腑鏉ュ彂閫侀偖浠?/p>
灝變笁涓被錛屽叾瀹冪殑閰嶇疆淇℃伅mail.properties銆乵ailtemplate銆乤ction.xml銆乻truts-config.xml銆亀eb.xml鍜孉ctiveMQ鍙戦侀偖浠朵腑鐨勬槸綾諱技鐨勶紝鍙互鍙傝冧竴涓嬨?/p>
澶囨敞錛氳冭檻鍒板寘鐨勫ぇ灝忥紝鎶妉ib涓璼pring鐨勬灦鍖呭幓闄や簡錛岃嚜宸卞幓涓嬭澆涓浠?.5鐨勫嵆鍙?/p>
鏇村璇︽儏璇峰弬瑙侊細鎴戠殑鍗氬 鎴戠殑鐢熸椿
緙撳瓨錛圕ACHE錛?br />瀹氫箟錛氬湪鏈湴鏀劇疆銆侀殣钘忔垨瀛樺偍甯哥敤淇℃伅浠ヤ緵蹇熸绱?
A memory area where frequently accessed data can be stored for rapid access.
濂藉錛氭彁楂樼郴緇熷搷搴旈熷害銆佹敼鍠勭郴緇熻繍琛屾ц兘鐨勬妧鏈?/p>
闈復鐨勯棶棰?br />1銆佽澶勭悊鐨勫唴瀹圭煭鏃墮棿涓嶅彉錛屾墍浠ョ煭鏃墮棿鍐呭彲浠ヤ綔涓洪潤鎬佸唴瀹硅繘琛屽鐞?br />2銆佸湪涓涓笉澶暱鐨勬椂闂村唴錛岃澶勭悊鐨勫唴瀹瑰彲鑳芥垨鑰呭繀瀹氫駭鐢熷彉鍖栵紝鎵浠ュ繀欏誨皢浠栦滑浣滀負鍔ㄦ佸唴瀹硅繘琛屽鐞?br />3銆佸湪鍚堢悊鐨勬椂闂村尯孌靛唴鍙互蹇界暐琚鐞嗗唴瀹瑰彉鍖栧悗甯︽潵鐨勫獎鍝?br />4銆佸榪欎簺鍐呭鐨勫鐞嗗姩浣滄瘮杈冩秷鑰楃郴緇熸ц兘錛屽獎鍝嶇郴緇熷搷搴旀椂闂綽犲熀紜鏁版嵁鐨勫彉鏇撮棶棰?
渚嬪瓙錛氱郴緇熶腑闇瑕佸鐞嗙殑鍩虹鏁版嵁錛涚粺璁℃姤琛ㄣ?/p>
瑙e喅鏂規硶
1銆佺紦瀛樹俊鎭?br />褰撲笂榪扮殑鍩虹鏁版嵁鎴栬呯粺璁℃姤琛ㄧ涓嬈¤璁塊棶鏃訛紝琚鐞嗙殑鍐呭琚綋浣滃姩鎬佷俊鎭紝鍩虹鏁板簱浠庢暟鎹簱涓幏寰楋紝緇熻鎶ヨ〃涔熶細琚敓鎴愮鍚堣姹傜殑鍥懼艦銆佹枃浠訛紝鐒跺悗榪欎簺淇℃伅閮戒細琚斁鍏ョ紦瀛樹俊鎭腑
2銆佸搷搴斾俊鎭敱緙撳瓨鎻愪緵
褰撲笂榪扮殑鍩虹鏁版嵁鎴栬呯粺璁℃姤琛ㄧ戶緇璁塊棶鏃訛紝緋葷粺灝嗕細棣栧厛媯鏌ョ紦瀛樹俊鎭腑鏄惁鏈夊搴旂殑鍐呭鍜屾垜浠瀹氱殑緙撳瓨瑙勫垯錛屽鏋滅鍚堢紦瀛樹俊鎭瓨鍦ㄨ屼笖絎﹀悎緙撳瓨瑙勫垯錛岀粰鍑虹殑鍝嶅簲灝嗘潵鑷簬緙撳瓨淇℃伅錛屽鏋滄病鏈夋垨鑰呯紦瀛樹俊鎭凡緇忎笉絎﹀悎璁懼畾鐨勮姹傦紝緋葷粺灝嗛噸澶嶄笂涓姝ョ殑鍔ㄤ綔銆?/p>
鍦ㄦ楠?涓紝澶氭暟鎯呭喌涓嬶紝褰撶敤鎴瘋姹傚埌杈炬椂錛岃澶勭悊鐨勫唴瀹瑰皢鏉ヨ嚜浜庣紦瀛橈紝鎵浠ュぇ澶х殑鍑忓皯浜嗕笌鏁版嵁搴撶殑浜や簰錛屾垨鑰呬笉鍐嶉渶瑕佷負姣忎釜璇鋒眰閮界敓鎴愪竴嬈℃姤琛ㄥ浘褰㈡垨鑰呮枃浠訛紝榪欓儴鍒嗗伐浣滅殑鍑忓皯瀵逛簬闄嶄綆緋葷粺鎬ц兘娑堣椼佹彁楂樼郴緇熺ǔ瀹氭у拰騫跺彂澶勭悊鑳藉姏鏄潪甯告湁鐩婄殑
OSCACHE
OSCache鏄疧penSymphony緇勭粐鎻愪緵鐨勪竴涓狫2EE鏋舵瀯涓璚eb搴旂敤灞傜殑緙撳瓨鎶鏈疄鐜扮粍浠?
鐗圭偣
鍏煎澶氱鏀寔JSP鐨剋eb鏈嶅姟鍣細宸茬粡閫氳繃鍏煎嫻嬭瘯鐨剋eb鏈嶅姟鍣ㄥ寘鎷琌rionServer聽銆丮acromedia聽JRun聽銆丅EA聽Weblogic聽銆両BM聽Websphere聽銆丼ilverstream聽銆丆aucho聽Resin聽銆乀omcat聽(4.x鍙婁互涓婄増鏈?聽
鍙夌殑緙撳瓨鍖猴細浣犲彲浠ヤ嬌鐢ㄥ唴瀛樸佺‖鐩樼┖闂淬佸悓鏃朵嬌鐢ㄥ唴瀛樺拰紜洏鎴栬呮彁渚涜嚜宸辯殑鍏朵粬璧勬簮錛堥渶瑕佽嚜宸辨彁渚涢傞厤鍣級浣滀負緙撳瓨鍖恒?br />浣跨敤鍐呭瓨浣滀負緙撳瓨鍖哄皢鍙互鎻愪緵鏇村ソ鐨勬ц兘聽
浣跨敤紜洏浣滀負緙撳瓨鍖哄彲浠ュ湪鏈嶅姟鍣ㄩ噸璧峰悗榪呴熸仮澶嶇紦瀛樺唴瀹孤?
鍚屾椂浣跨敤鍐呭瓨鍜岀‖鐩樹綔涓虹紦瀛樺尯鍒欏彲浠ュ噺灝戝鍐呭瓨鐨勫崰鐢?
OSCache涓寜鐓х紦瀛樿寖鍥寸殑涓嶅悓鍒嗕負涓ょ涓嶅悓鐨勬柟寮忥細涓縐嶆槸緙撳瓨JSP欏甸潰涓儴鍒嗘垨鑰呭叏閮ㄥ唴瀹癸紝涓縐嶆槸鍩轟簬鏁翠釜欏甸潰鏂囦歡鐨勭紦瀛?
鍙﹀OSCHACHE榪樻敮鎸侊細POJO 緙撳瓨 銆丱/R Data Access 緙撳瓨 銆?/p>
JSP閮ㄥ垎鍐呭緙撳瓨
絎竴嬈¤姹傚埌杈炬椂錛屾爣絳句腑鐨勫唴瀹硅澶勭悊騫朵笖緙撳瓨璧鋒潵錛屽綋涓嬩竴涓姹傚埌杈炬椂錛岀紦瀛樼郴緇熶細媯鏌ヨ繖閮ㄥ垎鍐呭鐨勭紦瀛樻槸鍚﹀凡緇忓け鏁堬紝涓昏鏄互涓嬪嚑欏癸細
1.聽緙撳瓨鏃墮棿瓚呰繃浜哻ache鏍囩璁劇疆鐨則ime鎴栬卍uration灞炴ц瀹氱殑瓚呮椂鏃墮棿聽
2.聽cron灞炴ц瀹氱殑鏃墮棿姣旂紦瀛樹俊鎭殑寮濮嬫椂闂存洿鏅毬?
3.聽鏍囩涓紦瀛樼殑鍐呭鍦ㄧ紦瀛樺悗鍙堣閲嶆柊鍒鋒柊榪嚶?
4.聽鍏朵粬緙撳瓨瓚呮湡璁懼畾聽
JSP閮ㄥ垎鍐呭緙撳瓨錛嶄竴涓緥瀛?/font>
/*鍥犱負OSCache浣跨敤key鍊兼潵鏍囪瘑緙撳瓨鍐呭錛屼嬌鐢ㄧ浉鍚岀殑key鍊煎皢浼氳璁や負浣跨敤鐩稿悓鐨勭殑緙撳瓨鍐呭錛屾墍浠ヤ嬌鐢ㄥ姩鎬佺殑key鍊煎彲浠ヨ嚜鐢辯殑鏍規嵁涓嶅悓鐨勮鑹層佷笉鍚岀殑瑕佹眰鍐沖畾浣跨敤涓嶅悓鐨勭紦瀛樺唴瀹?*/
<cache:cache聽key="<%=聽product.getId()聽%>"聽time="1800"聽refresh="<%=聽needRefresh聽%>">
聽/* JSP浠g爜鍐呭 鎴杍sp tag*/
聽<% 浠g爜%>
</cache:cache>
CashFilter瀹炵幇欏甸潰綰х紦瀛?/font>
1銆佸湪OSCache緇勪歡涓彁渚涗簡涓涓狢acheFilter鐢ㄤ簬瀹炵幇欏甸潰綰х殑緙撳瓨錛屼富瑕佺敤浜庡web搴旂敤涓殑鏌愪簺鍔ㄦ侀〉闈㈣繘琛岀紦瀛橈紝灝ゅ叾鏄偅浜涢渶瑕佺敓鎴恜df鏍煎紡鏂囦歡/鎶ヨ〃銆佸浘鐗囨枃浠剁瓑鐨勯〉闈紝涓嶄粎鍑忓皯浜嗘暟鎹簱鐨勪氦浜掋佸噺灝戞暟鎹簱鏈嶅姟鍣ㄧ殑鍘嬪姏錛岃屼笖瀵逛簬鍑忓皯web鏈嶅姟鍣ㄧ殑鎬ц兘娑堣楁湁寰堟樉钁楃殑鏁堟灉銆?br />2銆佽繖縐嶅姛鑳界殑瀹炵幇鏄氳繃鍦╳eb.xml涓繘琛岄厤緗潵鍐沖畾緙撳瓨鍝竴涓垨鑰呬竴緇勯〉闈紝鑰屼笖榪樺彲浠ヨ緗紦瀛樼殑鐩稿叧灞炴э紝榪欑鍩轟簬閰嶇疆鏂囦歡鐨勫疄鐜版柟寮忓浜嶫2EE鏉ヨ搴旇鏄竴縐嶆爣鍑嗙殑瀹炵幇鏂瑰紡浜?br />3銆?br /><filter>
<filter-name>CacheFilter</filter-name>
<filter-class>com.opensymphony.oscache.web.filter.CacheFilter</filter-class>
<init-param>
<param-name>time</param-name>
<param-value>60</param-value></init-param>
<init-param>
<param-name>scope</param-name>
<param-value>session</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CacheFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>