锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 榪欐鏃墮棿鍦ㄧ爺絀禨truts2錛屽涔犺祫鏂欐槸鏂頒笂甯傜殑鏉庡垰钁楃殑銆奡truts2鏉冨▉鎸囧崡銆嬶紝寰堜笉閿欑殑涓鏈功錛岀湅浜嗚寰楁敹鑾峰緢澶с傚垰鐮旂┒瀹孲truts2涓殑Ajax杈撳叆鏍¢獙錛屽茍鍋氫簡涓浜涗緥瀛愶紝鐜版葷粨濡備笅錛?/p>
浜? 璁劇疆欏甸潰鐨凙jax涓婚 涓? 璁劇疆鏍¢獙瑙勫垯 鍦ㄧ敤struts2.0鏍囩寮鍙戜腑,緇忓父瑕佷嬌鐢╢orm鎻愪氦. 閫氬父: 1)鍐欎竴涓猘ction綾?br />
姝ction綾誨畬鎴愭彁浜ゅ悗鐨勪繚瀛樺姩浣? 2)鍐欎竴涓潤鎬乯sp欏甸潰 闂: 鍦ㄧ偣鍑?鎻愪氦"鍚?鎴戜滑閫氬父浼氬脊鍑轟竴涓彁紺轟俊鎭殑欏甸潰,鐢ㄦ埛姝ゆ椂鏈夊彲鑳戒細鎸塮5鍒鋒柊褰撳墠鎻愪氦鐨刟ction,浠庤屽皢澶氫釜鐩稿悓鐨勬暟鎹繚瀛樺埌浜嗗悗鍙版暟鎹簱,騫朵笖閫犳垚浜嗘綔鍦ㄧ殑瀹夊叏鍗遍櫓! 1) 鐢?lt;s:token>! <form name="myname" action="myaction.do" method="post"> <input type="text" name="stuName" value="" .../> ... ... <s:token/> <input type="button" onclick="mymethod(this.form);" .../> </form> 2) 鍦╯truts****.xml鏂囦歡閲岄厤緗嫤鎴櫒: <!-- 淇濆瓨 --> 3)鍐欎竴涓悕縐頒負NoBack.jsp鐨勬彁紺烘枃浠?褰撻噸澶峟5鍒鋒柊鏃?灝嗘樉紺烘湰欏靛唴瀹?鎻愮ず"涓嶅彲閲嶅鎻愪氦,鎴栬呴〉闈㈠凡緇忚繃鏈? <s:token/>鍦ㄦ渶緇堢敓鎴愰〉闈㈡椂,鑷姩鐢熸垚涓涓猽nique id,閫氳繃瀹冩嫤鎴櫒鎵嶈兘鐭ラ亾欏甸潰鏄惁鏄悓涓嬈℃彁浜? 鏈榪戞垜浠叕鍙哥殑緗戠珯鍦ㄨ繘琛屼紭鍖栧姩浣滐紝瑕佹兂閲囩敤涓縐嶅ソ鐐圭殑鎶鏈紝浣垮緱鍘熸潵鐨凱HP鍔ㄦ佸艦寮忕殑緗戦〉鏂囦歡鑳藉琚獹OOGLE絳夋悳绱㈠紩鎿庢洿鍔犲鏄撳湴鏀跺叆鍏朵腑錛岀洰鍓嶆垜浠凡緇忛噰鐢ㄤ簡涓浜涙敼榪涘姙娉曪細姣斿鍦ㄥ悗鍙扮敤PHP紼嬪簭灝嗗師鏉ョ殑鏂囦歡鏀規(guī)垚HTM鍐呭錛涢噰鐢ˋpache鐨凱ath_Info鎶鏈紝浣嗚寰楄繕鏄笉澶熷己澶э紝鍥犳鍐沖畾閲囩敤Apache涓殑URL Rewrite鎶鏈潵璇曠敤涓涓嬨?/p>
寰堟棭灝辨敞鎰忓埌瀹冧簡錛屼絾涓鐩翠笉鐭ラ亾鎬庝箞瀹炵幇錛屼粖澶╁挰鍜墮錛岀炕浜哊綃囨湁鍏崇殑鏂囩珷錛岀粓浜庡疄鐜頒簡涓浜涘熀鏈殑鍔熻兘錛?/p>
1銆佷慨鏀筯ttp.conf 鍦ㄤ綘瑕佷慨鏀圭綉绔欑殑鏍圭洰褰曚笅錛?/p>
2銆佸厛淇敼http.conf 鐒跺悗鍐嶅湪姝ょ洰褰曚笅寤虹珛涓涓?htacess鏂囦歡錛屽畠鐨勫唴瀹瑰涓嬶細 榪欐牱灝卞疄鐜頒簡灝唄ttp://localhost/news/1000.html 瑙f瀽涓?http://localhost/news.php?id=1000鐨勫姛鑳?/p>
闄勫綍錛?涓涓綉绔欑殑.htacess鏂囦歡) ------------------------------------------------------------------------------- ErrorDocument 401 /error.php #show category #show brands #show products 1) R[=code](force redirect) 寮哄埗澶栭儴閲嶅畾鍚?br />
寮哄埗鍦ㄦ浛浠e瓧絎︿覆鍔犱笂http://thishost[:thisport]/鍓嶇紑閲嶅畾鍚戝埌澶栭儴鐨刄RL.濡傛灉code涓嶆寚瀹氾紝灝嗙敤緙虹渷鐨?02 HTTP鐘舵佺爜銆?br />
2) F(force URL to be forbidden)紱佺敤URL,榪斿洖403HTTP鐘舵佺爜銆?br />
3) G(force URL to be gone) 寮哄埗URL涓篏ONE錛岃繑鍥?10HTTP鐘舵佺爜銆?br />
4) P(force proxy) 寮哄埗浣跨敤浠g悊杞彂銆?br />
5) L(last rule) 琛ㄦ槑褰撳墠瑙勫垯鏄渶鍚庝竴鏉¤鍒欙紝鍋滄鍒嗘瀽浠ュ悗瑙勫垯鐨勯噸鍐欍?br />
6) N(next round) 閲嶆柊浠庣涓鏉¤鍒欏紑濮嬭繍琛岄噸鍐欒繃紼嬨?br />
7) C(chained with next rule) 涓庝笅涓鏉¤鍒欏叧鑱?br />
濡傛灉瑙勫垯鍖歸厤鍒欐甯稿鐞嗭紝璇ユ爣蹇楁棤鏁堬紝濡傛灉涓嶅尮閰嶏紝閭d箞涓嬮潰鎵鏈夊叧鑱旂殑瑙勫垯閮借煩榪囥?br />
8) T=MIME-type(force MIME type) 寮哄埗MIME綾誨瀷 鍏充簬UrlRewrite闈欐佸寲鐨勮鏄庯細 (1)apache鐢ㄦ埛,棣栧厛紜鎮(zhèn)ㄧ殑鏈嶅姟鍣ㄦ槸apache鏋惰鐨剋eb鏈嶅姟鍣紙姝ゆ彃浠跺彧浣跨敤浜巃pache鏋惰鐨勬湇鍔″櫒錛?br />
Apache Web Server錛堢嫭绔嬩富鏈虹敤鎴鳳級 The requested URL thread-11955.html was not found on this server 鍥版儜浜嗕竴澶╋紝淇敼浜嗗緢澶氭瑙勫垯閮戒笉琛屻傚悗鏉ュ皾璇曠潃緇撳悎铏氭嫙涓繪満鐢ㄦ埛鏂規(guī)硶銆傞鍏堟妸httpd.conf涓殑瑙勫垯 閰嶇疆鍘繪帀錛岀劧鍚?/font>鍦ㄨ鍧涙牴鐩綍鍒涘緩.htaccess 鏂囦歡錛岀劧鍚庢妸瑙勫垯鍐欒繘鍘伙紝閲嶅惎apache錛屼竴鍒嘜K鍟︺?/font> 瑙勫垯濡備笅錛?/font> <IfModule mod_rewrite.c>
</IfModule>
2銆佸鏋滀嬌鐢║rlrewrite錛岃鎸囧畾filter-mapping鐨刣ispatcher鏂瑰紡錛屽涓? 3銆佸湪鍋氫笂浼犳枃浠剁殑鏃跺欙紝瑕佸湪web.xml涓鍔燗ctionContextCleanUp榪欎釜filter錛屽鏋滀笉澧炲姞錛屼細鍙戠敓絎竴嬈′笂浼犲彇涓嶅埌鏂囦歡鐨勬儏鍐? 4銆佸湪Apache+Resin鐨勬儏鍐典笅錛岃鍦╓EB-INF涓嬪鍔爎esin-web.xml錛岃鏂囦歡鍙拡瀵筊esin鏈夋晥錛屼綔鐢ㄦ槸鎸囧畾鍚庣紑涓?Resin鐨凷ervlet寮曟搸鍖歸厤錛岃涓嶇劧浠嶢pache杞彂榪囧幓鐨勮姹傚埌Resin鍚庝細鍑虹幇404鐨勬儏鍐碉紝resin-web.xml涓句緥濡備笅錛? 5銆佸湪浣跨敤<s:url/>鏍囩鐨勬椂鍊欙紝浼氬嚭鐜板皢get鎴杙ost鏁板煎甫鍏rl鍙傛暟鐨勬儏鍐碉紝濡傛灉涓嶉渶瑕佽繖浜涘弬鏁幫紝鍙互鍦╯truts.properties鏂囦歡涓緗? 6銆佷笌webwork鍩烘湰鐩稿悓錛孲truts2鎻愪緵浜嗗嚑縐島i.theme錛屾湁xhtml銆乧ss_xhtml銆乻imple絳夌瓑錛屽湪 struts.properties涓彲浠ヨ緗嬌鐢ㄤ綍縐峵heme錛岃繖涓鐐瑰緢鍏抽敭錛屼笉鍚岀殑theme錛宻truts鐨則ag浼氱敓鎴愪笉鍚岀殑html浠g爜錛岃?涓斿湪鏌愪簺鎯呭喌涓嬭繖浜泃heme涓嶈兘婊¤凍欏甸潰瑕佹眰錛屽垯闇瑕佽嚜宸辮繘琛屾墿灞曚簡錛岃繖浜泃heme閮芥槸鐢眆reemarker鍐欑殑錛屼豢鐓ц繖鍐欏氨鍙互銆?/p>
7銆佸崟涓猚heckbox鐨勬爣璁板簱濂藉儚鍙兘榪斿洖boolean鐨勫鹼紝濡傛灉鍦ㄦ暟鎹簱涓璁′負int鍨嬶紝鍒欓渶瑕佸仛涓浜涜漿鎹紝榪欎竴鐐規(guī)垜瑙夊緱涓嶅Struts1.x鐨勬柟渚褲?/p>
8銆佹諱綋鏉ヨStruts2鐨勬爣璁板簱浣跨敤涓婃瘮Struts1.x鐨勬柟渚匡紝欏甸潰鏁翠綋涔熸瘮杈冪畝媧侊紝Struts2閲囩敤stack鐨勬柟寮忓瓨鍙栨暟鎹紝涓嶴truts1鐩告瘮鍚勬湁鍗冪鍚с?/p>
Struts2涓昏寤剁畫鑷獁ebwork錛屼互鍓嶄嬌鐢╳ebwork鐨勬湅鍙嬭漿榪囨潵騫朵笉鍥伴毦錛孲truts2鐨勫嚑涓牳蹇冪殑閮ㄥ垎錛屾瘮濡傛嫤鎴櫒銆丷esult Configuration銆丱GNL stack絳夌瓑榪樻槸闇瑕佷粩緇嗙殑浣撲細錛屾繁鍏ヤ簡瑙o紝鎵嶈兘鍋氬嚭浼樼鐨勭郴緇熴?/p>
棣栧厛浣跨敤dojo鐨勫伐鍏穝hrinksafe(http://shrinksafe.dojotoolkit.org/)鍘嬬緝涓涓?dojo鐨勮繖涓伐鍏蜂細鍘繪帀娉ㄩ噴錛屼粬鐨勫帇緙╀笉鏄畝鍗曠殑鏇挎崲鍙橀噺錛岃屾槸鍒╃敤浜唌ozilla鐨勪竴涓伐鍏?瀵筳s瑙f瀽鍚庢墠鍘嬬緝錛岀‘淇濆帇緙╁悗鐨勪唬鐮佷笉浼氬嚭閿欍?/p>
dojo鍘嬬緝鍚庯紝騫朵笉浼氬噺灝戝お澶氾紝涓嬩竴姝ュ彲浠ヤ嬌鐢╤ttp://javascriptcompressor.com/榪欎釜绔欑偣榪涜鏇撮珮灞傛鐨勫帇緙?鍙儨鍙兘鐧婚檰榪欎釜绔欑偣鍐嶅帇緙╋紝鍙兘灝嗕綘鐨刯s浠g爜澶嶅埗鐨勪粬鐨勬枃鏈錛岀劧鍚庣瓑浠栫殑鍘嬬緝杈撳嚭 緇忚繃榪?姝ワ紝浣犵殑js浼氬彉寰楁棦瀹夊叏,鏂囦歡鍙堝皬
鍏徃緗戠珯錛?a >http://www.bejate.com
]]>
Ajax鐨勮緭鍏ユ牎楠屼笉鏄鎴風鏍¢獙錛岃屾槸鏈嶅姟鍣ㄧ鏍¢獙錛屼絾榪欑鏈嶅姟鍣ㄧ鏍¢獙鏄互寮傛鏂瑰紡榪涜鐨勶紝嫻忚鑰呮棤闇鏄劇ず鎻愪氦璇鋒眰錛屽綋嫻忚鑰呰緭鍏ュ畬鎴愬悗錛岀郴緇熻嚜鍔ㄥ畬鎴愭牎楠屻係truts2鐨凙jax鏍¢獙寤虹珛鍦―WR鍜孌ojo涓や釜妗嗘灦涔嬩笂錛屽叾涓璂WR璐熻矗瀹炵幇鍦↗avaScript涓皟鐢ㄨ繙紼婮ava鏂規(guī)硶錛岃孌ojo鍒欒礋璐e疄鐜伴〉闈㈡晥鏋滅殑瀹炵幇銆?br />
涓. 閰嶇疆DWR鐨勬牳蹇僑ervlet
DWR鏄疛ava棰嗗煙鐨凙jax妗嗘灦錛屽畠鍏佽瀹㈡埛绔疛avaScript浠g爜鐩存帴璋冪敤鏈嶅姟鍣ㄧ鐨凧ava鏂規(guī)硶錛岃岃繖涓繃紼嬫槸閫氳繃涓涓牳蹇僑ervlet鐨勮漿鎹㈡潵瀹炵幇鐨勩備負浜嗚DWR鐨勬牳蹇僑ervlet璧蜂綔鐢紝蹇呴』鍦╳eb.xml鏂囦歡涓厤緗鏍稿績Servlet銆傞厤緗瓺WR鐨勬牳蹇僑ervlet鐨勯厤緗墖孌靛涓嬶細
<!-- 閰嶇疆Struts2鐨勬牳蹇僑ervlet -->
<servlet>
<servlet-name>dwr</servlet-name>
<!-- 鎸囧畾Servlet鐨勫疄鐜扮被 -->
<servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
<!-- 鎸囧畾澶勪簬寮鍙戦樁孌?-->
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<!-- 鎸囧畾DWR鐨勬牳蹇僑ervlet鎷︽埅鐨刄RL -->
<servlet-mapping>
<servlet-name>dwr</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
鍦ㄤ笂闈㈤厤緗枃浠朵腑澧炲姞浜咲WR鐨勬牳蹇僑ervlet鍚庯紝璇ervlet璐熻矗灝嗘湇鍔″櫒绔殑Java鏂規(guī)硶鏆撮湶鍑烘潵銆傚埌搴曢偅浜汮ava鏂規(guī)硶闇瑕佽鏆撮湶鍑烘潵錛岄氳繃鍦╠wr.xml閰嶇疆鏂囦歡涓寚瀹氬嵆鍙紝鍥犳闇瑕佸湪鏈簲鐢ㄤ腑澧炲姞涓涓猟wr.xml鏂囦歡銆?br />
鎻愮ず錛氭澶勫茍涓嶈闇瑕佸紑鍙戣呰嚜宸卞紑鍙慉jax搴旂敤錛屽茍涓嶉渶瑕佸紑鍙戣呭埄鐢―WR妗嗘灦錛屾垜浠彧闇鍒╃敤Struts2瀵笵WR鐨勫皝瑁呭嵆鍙傚洜姝わ紝鍙渶鍦╓eb搴旂敤鐨刉EB-INF璺緞涓嬪鍔燿wr.xml鏂囦歡鍗沖彲錛岃屼笖dwr.xml鏂囦歡鐨勪唬鐮佷篃鏄浐瀹氱殑錛?br />
<!DOCTYPE dwr PUBLIC
"-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN"
"
<dwr>
<!-- 瀹氫箟鎵鏈夐渶瑕佽鏆撮湶鐨凧ava鏂規(guī)硶 -->
<allow>
<!-- 瀹氫箟灝唎rg.apache.struts2.validators.DWRValidator鍒涘緩鎴愪竴涓獀alidator瀵硅薄 -->
<create creator="new" javascript="validator">
<param name="class" value="org.apache.struts2.validators.DWRValidator"/>
</create>
<!-- 瀹氫箟涓涓漿鎹㈠櫒 -->
<convert converter="bean" match="com.opensymphony.xwork2.ValidationAwareSupport"/>
</allow>
<signatures>
<![CDATA[
import java.util.Map;
import org.apache.struts2.validators.DWRValidator;
DWRValidator.doPost(String, String, Map<String, String>);
]]>
</signatures>
</dwr>
鍦ㄤ笂闈㈤厤緗枃浠朵腑錛屽皢org.apache.struts2.validators.DWRValidator綾誨垱寤烘垚涓涓狫avaScript瀵硅薄錛岃繖涓璞″悕涓簐alidator銆傚綋鐒訛紝榪欓噷鎵璇寸殑鍒涘緩鏄亣鍒涘緩錛屽洜涓篔ava綾繪槸鏃犳硶鍒涘緩JavaScript瀵硅薄錛屼絾DWR鎻愪緵涓縐嶆柟寮忥紝鍏佽褰撴垜浠湪瀹㈡埛绔皟鐢╲alidator鐨勬柟娉曟椂錛岃漿鎹㈡垚璋冪敤DWRValidator瀹炰緥鐨勬柟娉曘?br />
鎻愮ず錛氬叧浜嶥WR鐨勮繍琛屽師鐞嗗拰浣跨敤緇嗚妭錛岃璇昏呭弬鑰冪瑪鑰呮墍钁楃殑銆婂熀浜嶫2EE鐨凙jax瀹濆吀銆嬩竴涔︺傛澶勭敱浜庣瘒騫呯鐞嗭紝鏃犳硶璇﹁堪DWR鐨勭敤娉曞拰緇嗚妭銆?br />
瀹為檯涓婏紝瀵逛簬涓涓猄truts2鐨勫紑鍙戣呰岃█錛屾棤闇鐞嗕細榪欎簺瀹炵幇緇嗚妭錛屽洜涓篠truts2宸茬粡涓烘垜浠彁渚涗簡榪欎簺灝佽錛屾垜浠彧闇瑕佸湪Struts2灝佽鐨勫熀紜涓婅繘琛屽紑鍙戝嵆鍙?br />
鍊煎緱鎸囧嚭鐨勬槸錛屼負浜嗚Web搴旂敤澧炲姞DWR鏀寔錛屾樉鐒惰繕闇瑕佸皢DWR鐨勪簩榪涘埗鍖呭鍒跺埌Web搴旂敤涓傚嵆浣垮浜嶴truts2.0.6姝e紡鐗堬紝渚濈劧涓嶆敮鎸丏WR鐨勭殑鏈鏂扮増鏈紙DWR鐨勬渶鏂扮増鏈槸2.0.1錛夛紝鍥犳鍙兘浣跨敤DWR鐨勫墠涓涓寮忕増1.1.3錛屽皢dwr-1.1.3.jar鏂囦歡澶嶅埗鍒癢eb搴旂敤涓嵆鍙?br />
鎻愮ず錛氱敱浜嶴truts2鍙戣鐗堜腑騫舵湭鍖呭惈DWR浜岃繘鍒舵枃浠躲傚洜姝わ紝dwr-1.1.3.jar鏂囦歡蹇呴』鍒癉WR鐨勫畼鏂圭珯鐐癸紙http://getahead.ltd.uk/dwr/錛夎嚜琛屼笅杞姐?/p>
姝e鍓嶉潰宸茬粡鎻愬埌鐨勶紝瀹炵幇Ajax浜や簰蹇呴』鍦ㄩ〉闈腑瀵煎叆Ajax椋庢牸鐨刢ontrolheader.ftl錛岃繖涓帶浠惰礋璐e綋姣忎釜杈撳叆緇勪歡澶卞幓鐒︾偣鏃訛紝灝嗚緭鍏ョ粨鏋滃彂閫佸埌鏈嶅姟鍣ㄧ榪涜鏍¢獙銆?br />
涓轟簡瀹炵幇Ajax鏍¢獙錛岃繕闇瑕佸皢琛ㄥ崟璁劇疆鎴怉jax涓婚錛屽茍涓旇緗畍alidate="true"銆備笅闈㈡槸鏈ず渚嬪簲鐢ㄤ腑regist.jsp欏甸潰鐨勪唬鐮侊細
<%@ page language="java" contentType="text/html; charset=GBK"%>
<!-- 瀵煎叆Struts2鏍囩搴?-->
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title>璇瘋緭鍏ユ?zhèn)ㄧ殑娉ㄥ唽淇℃?lt;/title>
<!-- 瀵煎叆Ajax涓婚鐨刢ontrolheader.ftl -->
<s:head theme="ajax"/>
</head>
<body>
<H1>璇瘋緭鍏ユ?zhèn)ㄧ殑娉ㄥ唽淇℃?lt;/H1>
<!-- 璁劇疆琛ㄥ崟浣跨敤Ajax涓婚錛屽茍涓旇緗畍alidate="true" -->
<s:form action="regist" theme="ajax" validate="true">
<s:textfield name="name" label="浣滆呭悕"/><br>
<s:textfield name="pass" label="瀵嗙爜"/>
<s:textfield name="age" label="騫撮緞"/>
<s:textfield name="birth" label="鐢熸棩"/>
<s:submit value="娉ㄥ唽"/>
</s:form>
</body>
</html>
鍦ㄤ笂闈㈢殑琛ㄥ崟琚緗垚Ajax涓婚錛堣繖灝嗘剰鍛崇潃璇ヨ〃鍗曟槸涓涓繙紼嬭〃鍗曪級錛屽茍涓旇緗簡validate="true"灞炴с備竴鏃﹀畬鎴愪簡涓婇潰璁劇疆鍚庯紝褰撴煇涓緭鍏ョ粍浠跺け鍘葷劍鐐規(guī)椂錛岀郴緇熶細璐熻矗灝嗚緭鍏ュ唴瀹瑰彂閫佸埌鏈嶅姟鍣ㄧ榪涜鏍¢獙銆?/p>
瀵逛簬浣跨敤Ajax鏍¢獙鐨凙ction綾伙紝涓庡熀鏈牎楠岀殑Action綾誨茍娌℃湁澶ぇ鐨勪笉鍚屼箣澶勩備絾蹇呴』鎸囧嚭錛氬敖閲忎笉瑕侀噸鍐橝ction綾葷殑validate鏂規(guī)硶錛岄噸鍐欒鏂規(guī)硶鏉ュ畬鎴怉jax鏍¢獙鍙兘鍑虹幇涓浜涙湭鐭ュ紓甯革紙榪欏彲鑳芥槸Struts2榪橀渶瑕佸畬鍠勭殑鍦版柟錛夈?br />
娉ㄦ剰錛氫笉鍚岄氳繃閲嶅啓validate鏂規(guī)硶鏉ュ畬鎴怉jax鏍¢獙銆?br />
涓轟簡瀹屾垚杈撳叆鏍¢獙錛屾垜浠氳繃瀹氫箟鑷繁鐨勬牎楠岃鍒欐枃浠舵潵瀹屾垚杈撳叆鏍¢獙錛屾湰杈撳叆鏍¢獙鏂囦歡浣跨敤瀛楁鏍¢獙鍣ㄩ鏍兼潵閰嶇疆鏍¢獙瑙勫垯銆備笅闈㈡槸鏍¢獙鏂囦歡鐨勪唬鐮侊細
鏂囦歡錛岃鏂囦歡鎸囧畾浜咥ction鐨勫睘鎬у繀欏繪弧瓚蟲庢牱鐨勮鍒欙紝涓嬮潰鏄搴旂敤涓瑼ction鐨勬牎楠屾枃浠剁殑浠g爜銆?br />
<?xml version="1.0" encoding="GBK"?>
<!-- 鎸囧畾鏍¢獙閰嶇疆鏂囦歡鐨凞TD淇℃伅 -->
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"
<!-- 鏍¢獙鏂囦歡鐨勬牴鍏冪礌 -->
<validators>
<!-- 鏍¢獙Action鐨刵ame灞炴?-->
<field name="name">
<!-- 鎸囧畾name灞炴у繀欏繪弧瓚沖繀濉鍒?-->
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>蹇呴』杈撳叆鍚嶅瓧</message>
</field-validator>
<!-- 鎸囧畾name灞炴у繀欏誨尮閰嶆鍒欒〃杈懼紡 -->
<field-validator type="regex">
<param name="expression"><![CDATA[(\w{4,25})]]></param>
<message>鎮(zhèn)ㄨ緭鍏ョ殑鐢ㄦ埛鍚嶅彧鑳芥槸瀛楁瘝鍜屾暟緇勶紝涓旈暱搴﹀繀欏誨湪4鍒?5涔嬮棿</message>
</field-validator>
</field>
<!-- 鏍¢獙Action鐨刾ass灞炴?-->
<field name="pass">
<!-- 鎸囧畾pass灞炴у繀欏繪弧瓚沖繀濉鍒?-->
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>蹇呴』杈撳叆瀵嗙爜</message>
</field-validator>
<!-- 鎸囧畾pass灞炴у繀欏繪弧瓚沖尮閰嶆寚瀹氱殑姝e垯琛ㄨ揪寮?-->
<field-validator type="regex">
<param name="expression"><![CDATA[(\w{4,25})]]></param>
<message>鎮(zhèn)ㄨ緭鍏ョ殑瀵嗙爜鍙兘鏄瓧姣嶅拰鏁扮粍錛屼笖闀垮害蹇呴』鍦?鍒?5涔嬮棿</message>
</field-validator>
</field>
<!-- 鎸囧畾age灞炴у繀欏誨湪鎸囧畾鑼冨洿鍐?->
<field name="age">
<field-validator type="int">
<param name="min">1</param>
<param name="max">150</param>
<message>騫寸邯蹇呴』鍦?鍒?50涔嬮棿</message>
</field-validator>
</field>
<!-- 鎸囧畾birth灞炴у繀欏誨湪鎸囧畾鑼冨洿鍐?->
<field name="birth">
<field-validator type="date">
<!-- 涓嬮潰鎸囧畾鏃ユ湡瀛楃涓叉椂錛屽繀欏諱嬌鐢ㄦ湰Locale鐨勬棩鏈熸牸寮?-->
<param name="min">1900-01-01</param>
<param name="max">2050-02-21</param>
<message>騫寸邯蹇呴』鍦?{min}鍒?{max}涔嬮棿</message>
</field-validator>
</field>
</validators>
瀹為檯涓婏紝榪欎喚鏍¢獙鏂囦歡涓庝箣鍓嶈繘琛屽熀鏈牎楠岀殑鏍¢獙鏂囦歡騫舵病鏈夊お澶х殑鍖哄埆銆傝繖涔熻瘉鏄庝簡Struts2妗嗘灦鐨勭畝鍗曘佹槗鐢ㄣ?br />
瀹屾垚涓婇潰瀹氫箟鍚庯紝濡傛灉嫻忚鑰呭湪杈撳叆欏甸潰涓緭鍏ョ敤鎴峰悕錛屽皢鐒︾偣縐誨埌瀵嗙爜杈撳叆妗嗘椂錛屽皢鐪嬪埌Ajax鏍¢獙鏁堟灉銆?/p>
]]>
鍐檉orm,浠ュ強杈撳叆input,鍜屾彁浜utton.
3)璁劇疆struts*****.xml鏂囦歡
閰嶇疆action鍚嶇О浠ュ強鏄犲皠鐨勭被鍜岃繑鍥炵粨鏋滃悕縐扮瓑.
濡備綍閬垮厤閲嶅鎻愪氦鍛?
濡傚湪杈撳叆鐣岄潰鐨刯sp閲?璁劇疆token鏍囧織:
<action name="Save"
class="com.yourcom.app.Action.Dataform.saveAction"
method="Save">
<interceptor-ref name="defaultStack" />
<interceptor-ref name="token" />
<result name="invalid.token">/Info/NoBack.jsp</result>
</action>
]]>
DefaultType application/x-httpd-php
rewriteengine on #蹇呴』
options followsymlinks #蹇呴』
RewriteRule /news/(\d+)\.html /news\.php\?id=$1 [N,L] #瑙勫垯
AllowOverride All
DefaultType application/x-httpd-php
options followsymlinks
AllowOverride All
rewriteengine on
rewritebase /websamples/urlrewrite/
RewriteRule news/(\d+)\.html news\.php\?id=$1 [N,L]
rewriteengine on
rewritebase /websamples/urlrewrite/power-for-less.com/
#
RewriteRule ^((laptop([^/]*))|(camcorder([^/]*))|(((digital)?).?camera([^/]*))|(power([^/]*))|(pda([^/]*))|(mobile([^/]*))|(two-way([^/]*))|(scanner([^/]*))|(mp3([^/]*)))\.htm(l?)$ babrand\.php\?fclassname=$1 [NC]
#
RewriteRule ^(laptop([^/]*))/([^/]+)\.htm(l?)$ series\.php\?fclassname=$1&fb_babrand=$3 [NC]
RewriteRule ^(camcorder([^/]*))/([^/]+)\.htm(l?)$ series\.php\?fclassname=$1&fb_babrand=$3 [NC]
RewriteRule ^(((digital)?).?camera([^/]*))/([^/]+)\.htm(l?)$ series\.php\?fclassname=$1&fb_babrand=$5 [NC]
RewriteRule ^(power([^/]*))/([^/]+)\.htm(l?)$ series\.php\?fclassname=$1&fb_babrand=$3 [NC]
RewriteRule ^(pda([^/]*))/([^/]+)\.htm(l?)$ series\.php\?fclassname=$1&fb_babrand=$3 [NC]
RewriteRule ^(mobile([^/]*))/([^/]+)\.htm(l?)$ series\.php\?fclassname=$1&fb_babrand=$3 [NC]
RewriteRule ^(two-way([^/]*))/([^/]+)\.htm(l?)$ series\.php\?fclassname=$1&fb_babrand=$3 [NC]
RewriteRule ^(scanner([^/]*))/([^/]+)\.htm(l?)$ series\.php\?fclassname=$1&fb_babrand=$3 [NC]
RewriteRule ^(mp3([^/]*))/([^/]+)\.htm(l?)$ series\.php\?fclassname=$1&fb_babrand=$3 [NC]
#
RewriteRule ^(laptop([^/]*))/([^/]+)/(.+)\.htm(l?)$ product\.php\?fclassname=$1&fb_babrand=$3&code=$4 [NC]
RewriteRule ^(camcorder([^/]*))/([^/]+)/(.+)\.htm(l?)$ product\.php\?fclassname=$1&fb_babrand=$3&code=$4 [NC]
RewriteRule ^(((digital)?).?camera([^/]*))/([^/]+)/(.+)\.htm(l?)$ product\.php\?fclassname=$1&fb_babrand=$3&code=$6 [NC]
RewriteRule ^(power([^/]*))/([^/]+)/(.+)\.htm(l?)$ product\.php\?fclassname=$1&fb_babrand=$3&code=$4 [NC]
RewriteRule ^(pda([^/]*))/([^/]+)/(.+)\.htm(l?)$ product\.php\?fclassname=$1&fb_babrand=$3&code=$4 [NC]
RewriteRule ^(mobile([^/]*))/([^/]+)/(.+)\.htm(l?)$ product\.php\?fclassname=$1&fb_babrand=$3&code=$4 [NC]
RewriteRule ^(two-way([^/]*))/([^/]+)/(.+)\.htm(l?)$ product\.php\?fclassname=$1&fb_babrand=$3&code=$4 [NC]
RewriteRule ^(scanner([^/]*))/([^/]+)/(.+)\.htm(l?)$ product\.php\?fclassname=$1&fb_babrand=$3&code=$4 [NC]
RewriteRule ^(mp3([^/]*))/([^/]+)/(.+)\.htm(l?)$ product\.php\?fclassname=$1&fb_babrand=$3&code=$4 [NC]
]]>
9) NS (used only if no internal sub-request) 鍙敤浜庝笉鏄唴閮ㄥ瓙璇鋒眰
10錛?NC(no case) 涓嶅尯鍒嗗ぇ灝忓啓
11) QSA(query string append) 榪藉姞璇鋒眰瀛楃涓?br />
12) NE(no URI escaping of output) 涓嶅湪杈撳嚭杞箟鐗規(guī)畩瀛楃
渚嬪錛歊ewriteRule /foo/(.*) /bar?arg=P1\%3d$1 [R,NE] 灝嗚兘姝g‘鐨勫皢/foo/zoo杞崲鎴?bar?arg=P1=zed
13) PT(pass through to next handler) 浼犻掔粰涓嬩竴涓鐞?br />
渚嬪錛?br />
RewriteRule ^/abc(.*) /def$1 [PT] # 灝嗕細浜ょ粰/def瑙勫垯澶勭悊
Alias /def /ghi
14) S=num(skip next rule(s)) 璺寵繃num鏉¤鍒?br />
15) E=VAR:VAL(set environment variable) 璁劇疆鐜鍙橀噺
]]>
棣栧厛紜畾鎮(zhèn)ㄤ嬌鐢ㄧ殑 Apache 鐗堟湰錛屽強鏄惁鍔犺澆浜?mod_rewrite 妯″潡銆?br />
Apache 1.x 鐨勭敤鎴瘋媯鏌?conf/httpd.conf 涓槸鍚﹀瓨鍦ㄥ涓嬩袱孌典唬鐮侊細
LoadModule rewrite_module libexec/mod_rewrite.so
AddModule mod_rewrite.c
Apache 2.x 鐨勭敤鎴瘋媯鏌?conf/httpd.conf 涓槸鍚﹀瓨鍦ㄥ涓嬩竴孌典唬鐮侊細
LoadModule rewrite_module modules/mod_rewrite.so
濡傛灉瀛樺湪錛岄偅涔堝湪閰嶇疆鏂囦歡錛堥氬父灝辨槸 conf/httpd.conf錛変腑鍔犲叆濡備笅浠g爜銆傛鏃惰鍔″繀娉ㄦ剰錛屽鏋滅綉绔?br />
浣跨敤閫氳繃铏氭嫙涓繪満鏉ュ畾涔夛紝璇峰姟蹇呭姞鍒拌櫄鎷熶富鏈洪厤緗紝鍗?<VirtualHost> 涓幓錛屽鏋滃姞鍦ㄨ櫄鎷熶富鏈洪厤緗
閮ㄥ皢鍙兘鏃犳硶浣跨敤銆傛敼濂藉悗鐒跺悗灝?Apache 閲嶅惎銆?/p>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)/forum-([0-9]+)-([0-9]+)-([0-9]+).html[?]{0,1}(.*)$ $1/forumdisplay.php
?f=$2&st=$4&pp=$3&$5
RewriteRule ^(.*)/forum-([0-9]+)-([0-9]+).html[?]{0,1}(.*)$ $1/forumdisplay.php?f=$2&pp=$3&$4
RewriteRule ^(.*)/forum-([0-9]+)-(q?)-([0-9]+).html[?]{0,1}(.*)$ $1/forumdisplay.php
?f=$2&filter=quintessence&pp=$3&$4
RewriteRule ^(.*)/forum-([0-9]+)-(q?).html[?]{0,1}(.*)$ $1/forumdisplay.php
?f=$2&filter=quintessence&$4
RewriteRule ^(.*)/forum-([0-9]+).html[?]{0,1}(.*)$ $1/forumdisplay.php?f=$2&$3
RewriteRule ^(.*)/thread-([0-9]+)-([0-9]+).html[?]{0,1}(.*)$ $1/showthread.php?t=$2&pp=$3&$4
RewriteRule ^(.*)/thread-([0-9]+).html[?]{0,1}(.*)$ $1/showthread.php?t=$2&$3
RewriteRule ^(.*)/user-([0-9]+).html $1/profile.php?u=$2[L]
RewriteRule ^(.*)/archive/f-([0-9]+)-([0-9]+).html $1/index.php?f$2-$3.html[L]
RewriteRule ^(.*)/archive/t-([0-9]+)-([0-9]+).html $1/index.php?t$2-$3.html[L]
</IfModule>
濡傛灉娌℃湁瀹夎 mod_rewrite錛屾?zhèn)ㄥ彲浠ラ噸鏂熬~栬瘧 Apache錛屽茍鍦ㄥ師鏈?configure 鐨勫唴瀹逛腑鍔犲叆
--enable-rewrite=shared錛岀劧鍚庡啀鍦?Apache 閰嶇疆鏂囦歡涓姞鍏ヤ笂榪頒唬鐮佸嵆鍙?
Apache Web Server錛堣櫄鎷熶富鏈虹敤鎴鳳級
鍦ㄥ紑濮嬩互涓嬭緗箣鍓嶏紝璇烽鍏堝挩璇㈡?zhèn)ㄧ殑绌洪棿鏈嶅姟鍟嗗Q岀┖闂存槸鍚︽敮鎸?Rewrite 浠ュ強鏄惁鏀寔瀵圭珯鐐?
鐩綍涓?.htaccess 鐨勬枃浠惰В鏋愶紝鍚﹀垯鍗充究鎸夌収涓嬮潰鐨勬柟娉曡緗ソ浜嗭紝涔熸棤娉曚嬌鐢ㄣ?
媯鏌ヨ鍧涙墍鍦ㄧ洰褰曚腑鏄惁瀛樺湪 .htaccess 鏂囦歡錛屽鏋滀笉瀛樺湪錛岃鎵嬪伐寤虹珛姝ゆ枃浠躲俉in32 緋葷粺涓?
錛屾棤娉曠洿鎺ュ緩绔?.htaccess 鏂囦歡錛屾?zhèn)ㄥ彲浠ヤ粠鍏朵粬绯痪l熶腑鎷瘋礉涓浠斤紝鎴栬呭湪 欖斿姏璁哄潧鎶鏈敮鎸佹爮鐩?
涓笅杞芥鏂囦歡銆傜紪杈戝茍淇敼 .htaccess 鏂囦歡錛屾坊鍔犱互涓嬪唴瀹?:
# 灝?RewriteEngine 妯″紡鎵撳紑
RewriteEngine On
# 淇敼浠ヤ笅璇彞涓殑 /molyx_board 涓轟綘鐨勮鍧涚洰褰曞湴鍧錛屽鏋滅▼搴忔斁鍦ㄦ牴鐩綍涓紝璇峰皢
/molyx_board 淇敼涓?/
RewriteBase /molyx_board/
# Rewrite 緋葷粺瑙勫垯璇峰嬁淇敼
RewriteRule forum-([0-9]+)-([0-9]+)-([0-9]+).html forumdisplay.php?f=$1&st=$3&pp=$2&$4
RewriteRule forum-([0-9]+)-([0-9]+).html forumdisplay.php?f=$1&pp=$2&$3
RewriteRule forum-([0-9]+)-(q?)-([0-9]+).html forumdisplay.php?f=$1&filter=quintessence&pp=$3
RewriteRule forum-([0-9]+)-(q?).html forumdisplay.php?f=$1&filter=quintessence
RewriteRule forum-([0-9]+).html forumdisplay.php?f=$1
RewriteRule thread-([0-9]+)-([0-9]+).html showthread.php?t=$1&pp=$2&$3
RewriteRule thread-([0-9]+).html showthread.php?t=$1&$2
RewriteRule user-([0-9]+).html profile.php?u=$1
RewriteRule archive/f-([0-9]+)-([0-9]+).html archive/index.php?f$1-$2.html
RewriteRule archive/t-([0-9]+)-([0-9]+).html archive/index.php?t$1-$2.html
浠ヤ笂涓哄紑鍚疷RL闈欐佸寲鐨勬暣涓鏄庛?/pre>
鏈漢鏄嫭绔嬩富鏈猴紝鎸夌収涓婇潰鍋氾紝涓鐩存病鏈夋垚鍔熴傚紑鍚潤鎬佸寲鍚庯紝鎻愮ず
# 灝?RewriteEngine 妯″紡鎵撳紑
RewriteEngine On
# 淇敼浠ヤ笅璇彞涓殑 /molyx_board 涓轟綘鐨勮鍧涚洰褰曞湴鍧錛屽鏋滅▼搴忔斁鍦ㄦ牴鐩綍涓紝璇峰皢
/molyx_board 淇敼涓?/
RewriteBase /molyx_board/
# Rewrite 緋葷粺瑙勫垯璇峰嬁淇敼
RewriteRule forum-([0-9]+)-([0-9]+)-([0-9]+).html forumdisplay.php?f=$1&st=$3&pp=$2&$4
RewriteRule forum-([0-9]+)-([0-9]+).html forumdisplay.php?f=$1&pp=$2&$3
RewriteRule forum-([0-9]+)-(q?)-([0-9]+).html forumdisplay.php?f=$1&filter=quintessence&pp=$3
RewriteRule forum-([0-9]+)-(q?).html forumdisplay.php?f=$1&filter=quintessence
RewriteRule forum-([0-9]+).html forumdisplay.php?f=$1
RewriteRule thread-([0-9]+)-([0-9]+).html showthread.php?t=$1&pp=$2&$3
RewriteRule thread-([0-9]+).html showthread.php?t=$1&$2
RewriteRule user-([0-9]+).html profile.php?u=$1
RewriteRule archive/f-([0-9]+)-([0-9]+).html archive/index.php?f$1-$2.html
RewriteRule archive/t-([0-9]+)-([0-9]+).html archive/index.php?t$1-$2.html
]]>
娉細鍚庢潵鐮旂┒鍙戠幇鏄痳esin鎻愪緵鐨剆ession id reuse鐗規(guī)э紝鍙槸姝ゆ枃絎竴嬈″彂甯冩椂鎴戣繕涓嶇煡閬撴湁姝ょ壒鎬э紝鎯劎銆?br />
鍦╯ervlet瑙勮寖涓紝HttpServletSession鐨勮幏鍙栨椂閫氳繃璋冪敤request.getSession(boolean createnew)鏂規(guī)硶鏉ュ疄鐜幫紝鍏跺疄鐜版満鍒跺彲浠ョ畝鍗曠殑鐞嗚В涓? 瀛樺湪涓涓ぇ鐨刪ashMap緇撴瀯錛宬ey灝辨槸jsessionid錛岃寁alule鏄疕ttpservletSession瀵硅薄銆俽equest.getSession(boolean createnew)鏂規(guī)硶閫氳繃jsessionid鏉ヨ幏鍙栧搴旂殑HttpservletSession錛屽鏋滀笉瀛樺湪騫朵笖鍙傛暟createnew=true錛屽垯鍒涘緩涓涓柊鐨凥ttpservletSession瀵硅薄錛屽茍璁劇疆jsessionid=session.getId() 錛屼繚瀛樺埌hashMap緇撴瀯涓備互鍚庡啀浼犻掕繖涓猨sessionid. 錛堣緇嗙殑榪囩▼姣旇緝澶嶆潅錛屽悇瀹剁殑瀹炵幇涔熶笉灝界浉鍚岋紝浣嗗ぇ浣撶殑瀹炵幇鍘熺悊鏄姝ゃ傦級
鍏蟲敞浠ヤ笅鍑犵偣錛?br />
涓). 鑾峰彇jsessionid
jsessionid鐨勪紶閫掑彲浠ユ槸浠ヤ笅閫斿緞
1. 鏀懼湪cookie涓?br />
Cookie: JSESSIONID=abcrmF3Gx-5Z-hhkgHfzr
2. 浠ュ弬鏁板艦寮忔斁鍦╱rl
http://10.3.2.35:11280/wmail/welcome.action?jsessionid=abcQNqiT4C01rg-necLBr
3. 鐢╢orm琛ㄥ崟浼犻掞紝閫氬父鏄敤闅愯棌鍩?br />
<input type="hidden" name="jsessionid" value="abcQNqiT4C01rg-necLBr"/>
4. url閲嶅啓
http://10.3.2.35:11280/jid=abcQNqiT4C01rg-necLBr/wmail/welcome.action
鎴栬?br />
http://10.3.2.35:11280/wmail/welcome.action;jsessionid=abcQNqiT4C01rg-necLBr
濡傛灉褰撳墠榪樻病鏈塲sessionid鍒欏綋鐒跺氨鏃犳硶鑾峰彇錛岄氬父鐢ㄦ埛絎竴嬈¤闂垨鑰呯櫥褰曞墠灝辨槸榪欑鎯呭喌.
鍙互閫氳繃request.getRequestedSessionId() 鏂規(guī)硶鏉ヨ幏鍙栨湰嬈ttp 璇鋒眰鐨刯sessonid鍊箋?br />
浜岋級鑾峰彇鍒扮殑HttpServletSession瀵硅薄
濡傛灉HttpServletSession瀵硅薄鏄凡緇忓瓨鍦ㄧ殑錛屽垯
1. session.isNew()=false
2. request.getRequestedSessionId() == jsessionid == session.getId()
濡傛灉HttpServletSession瀵硅薄鏄皟鐢╮equest.getSession(true) (綆鍐欑殑request.getSession()鏂規(guī)硶絳夊悓浜巖equest.getSession(true) )鏃舵柊鍒涘緩鐨勶紝鍒欐湁浠ヤ笅鐗瑰緛錛?br />
1. session.isNew()=true
2. 浠ュ悗浼犻掔殑jsessionid=session.getId()
娉ㄦ剰榪欓噷錛屽鏋渞equest.getRequestedSessionId() 鏄┖鍊鹼紝鎯呭喌姣旇緝綆鍗曪紝浠ュ悗浼犻抝sessionid=session.getId()灝辨槸浜嗐?br />
浣嗘槸濡傛灉request.getRequestedSessionId() 涓嶆槸絀哄鹼紝閫氳繃榪欎釜鍊兼病鏈夎幏鍙栧埌宸茬粡瀛樺湪鐨剆ession瀵硅薄錛岃屾槸榪斿洖浜嗕竴涓柊鐨剆ession瀵硅薄錛岃繖涓椂鍊欐柊鐨剆ession.getId()鍜屽師鏈夌殑request.getRequestedSessionId() 鍏崇郴濡備綍鍛紵涓嬮潰璇︾粏闃愯堪榪欑鎯呭喌銆?br />
涓? request.getRequestedSessionId() 涓嶆槸絀哄兼椂錛屾柊鐨剆ession.getId() = ?
1). 嫻嬭瘯浠g爜濡備笅:
HttpServletRequest request = ServletActionContext.getRequest();
String jid1 = request.getRequestedSessionId();
HttpSession session = request.getSession(true);
String jid2 = request.getRequestedSessionId();
logger.info("get HttpSession , isNew()=" + session.isNew()
+ " getId()=" + session.getId()
+ " and jid1=" + jid1
+ " and jid2=" + jid2);
鍏朵腑jid1鍜宩id2鍒嗗埆鏄皟鐢╮equest.getSession(true)鏂規(guī)硶鍓嶅悗鐨剅equest.getRequestedSessionId()鍊箋?br />
鍦╮esin涓繍琛屼互涓婁唬鐮侊紝嫻嬭瘯request.getRequestedSessionId() 涓嶆槸絀哄艱屽搴攋sessionid鐨剆ession涓嶅瓨鍦ㄧ殑鎯呭喌銆?br />
2). 閫氳繃cookie鏉ヤ紶閫抝sessionid鐨勬儏鍐碉紝嫻嬭瘯緇撴灉濡備笅錛?br />
get HttpSession, isNew()=true getId()=abcqIgQroQ2Ov9lGYcYAr and jid1=abcqIgQroQ2Ov9lGYcYAr and jid2=abcqIgQroQ2Ov9lGYcYAr
get HttpSession, isNew()=true getId()=abcPQ3mpxKz8H-4UMdYAr and jid1=abcPQ3mpxKz8H-4UMdYAr and jid2=abcPQ3mpxKz8H-4UMdYAr
get HttpSession, isNew()=true getId()=abcdeE3iDy_bI536tLYAr and jid1=abcdeE3iDy_bI536tLYAr and jid2=abcdeE3iDy_bI536tLYAr
鍙互鍙戠幇浠ヤ笅瑙勫緥錛?br />
1. isNew()=true
2. session.getId() == jid1 == jid2
鍗蟲柊鍒涘緩鐨剆ession浼氫嬌鐢ㄤ紶閫掕繃鏉ョ殑jsessionid鍊鹼紝鍗充嬌榪欎釜jsessionid鍊兼牴鏈病鏈夊搴旂殑session瀛樺湪
3) 閫氳繃url閲嶅啓錛屽皢jsessionid鏀緐rl涓紶閫? 嫻嬭瘯緇撴灉濡備笅錛?br />
get HttpSession, isNew()=true getId()=abccw1zEC_RcN43qHMYAr and jid1=abcdUdTfKuLbge8h_LYAr and jid2=abcdUdTfKuLbge8h_LYAr
http://10.3.2.35:11280/jid=abccw1zEC_RcN43qHMYAr/uab/contactList.action
get HttpSession, isNew()=true getId()=abcFK7yOB1irgaYqgNYAr and jid1=abci-HpMPJU3egCB7MYAr and jid2=abci-HpMPJU3egCB7MYAr
http://10.3.2.35:11280/jid=abcFK7yOB1irgaYqgNYAr/uab/contactList.action
(鍚庨潰鐨刪ttp鍦板潃涓洪〉闈㈣煩杞畬鎴愬悗鏄劇ず鍦ㄦ祻瑙堝櫒鍦板潃妗嗕腑鐨勯〉闈rl)
鍙互鍙戠幇浠ヤ笅瑙勫緥錛?br />
1. isNew()=true
2. jid1 == jid2
request.getRequestedSessionId()鍊煎湪request.getSession(true)鏂規(guī)硶璋冪敤鍓嶅悗鏃犲彉鍖?br />
3. session.getId() != jid1
鍗蟲柊鍒涘緩鐨剆ession涓嶄嬌鐢ㄤ紶閫掕繃鏉ョ殑jsessionid鍊?鑰屾槸閲囩敤鏂板?br />
4. 璺寵漿瀹屾垚鍚庣殑http鍦板潃涓?浣跨敤鐨勬槸session.getId(), 鑰屼笉鏄師鏉ラ氳繃url閲嶅啓浼犻掕繃鏉ョ殑jsessionid
姝ゆ椂鏂扮殑jsessionid瑕嗙洊浜嗘棫鏈夌殑jsessionid.
4) 鎬葷粨
鍦╮esin鐨勫疄鐜頒腑, 閫氳繃cookie鏉ヤ紶閫抝sessionid鐨勬儏鍐靛拰閫氳繃url閲嶅啓灝唈sessionid鏀緐rl涓紶閫? 浼氭湁緇嗗井鐨勫樊寮?
浠ヤ笂嫻嬭瘯鐨剅esin鐗堟湰涓?.0.26, 紼嶅悗鏈夋椂闂磋冭檻嫻嬭瘯鍏朵粬鐗堟湰鍜宼omcat.
榪欎釜宸紓鐩存帴褰卞搷鍒拌法webapp鐨勫涓獁ebapp鐩存帴鐩鎬簰浼犻抝sessionid鐨勬柟寮? 閫氳繃cookie浼犻抝sessionid鍙互鍋氬埌澶氫釜webapp涔嬮棿鍦ㄩ〉闈㈣煩杞椂濮嬬粓鏄竴涓浉鍚岀殑jsessionid,榪欑鍚勪釜搴旂敤閮藉彲浠ユ柟渚跨殑鑾峰彇鍒拌嚜宸辯殑HttpServletSession瀵硅薄. 浣嗘槸濡傛灉鏄氳繃url閲嶅啓,鍒欑牬鍧忎簡jsessonid鐨勪竴鑷存? 閫艱揩鍚勪釜webapp涔嬮棿璺寵漿鏃跺繀欏葷敤鍏朵粬棰濆鐨勬柟娉曟潵淇濊瘉浼犻掔粰瀵規(guī)柟鐨刯sessionid鐨勫噯紜?鍥犱負姝ゆ椂姣忎釜webapp鐨刯sessionid閮戒笉涓鏍蜂簡,蹇呴』璁頒綇鍏朵粬姣忎釜webapp鐨刯sessionid錛岄犳垚璺╳ebapp鐨勯〉闈㈣煩杞瀬鍏跺鏉傦紝闅句簬鎺ュ彈.
]]>
<filter-mapping>
<filter-name>Struts2</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
<filter>
<filter-name>struts-cleanup</filter-name>
<filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>
</filter>
<filter-mapping>
<filter-name>struts-cleanup</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
鎸夌収Struts2鐨凙PI錛宖ilter鐨勯『搴忔槸
struts-cleanup filter
SiteMesh filter
FilterDispatcher
<web-app xmlns="http://caucho.com/ns/resin">
<servlet-mapping url-pattern='*.bbscs' servlet-name='plugin_match'/>
</web-app>
struts.url.includeParams=none
鎴栨槸鍦?lt;s:url/>鏍囪涓皢includeParams灞炴ц涓簄one
鍙﹀榪樻湁涓や釜鍊?
all,鏄妸get鍜宲ost涓殑鍙傛暟鍔犲叆鍒皍rl鍙傛暟涓?
get,鏄彧鎶奼et涓殑鍙傛暟鍔犲叆鍒皍rl鍙傛暟涓?
]]>
Java浠g爜
<?xml version="1.0" encoding="UTF-8"?>
<datasources>
<local-tx-datasource>
<jndi-name>MySqlDS</jndi-name> //jndi鍚嶅瓧
<use-java-context>false</use-java-context>
<connection-url>jdbc:mysql://10.16.175.137:3306/test</connection-url> //URL鍦板潃
<driver-class>com.mysql.jdbc.Driver</driver-class> //椹卞姩
<user-name>root</user-name> //鐢ㄦ埛鍚?nbsp;
<password>123456</password> //瀵嗙爜
<exception-sorter-class-name>
org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter
</exception-sorter-class-name>
<metadata>
<type-mapping>mySQL</type-mapping>
</metadata>
</local-tx-datasource>
</datasources>
<?xml version="1.0" encoding="UTF-8"?>
<datasources>
<local-tx-datasource>
<jndi-name>MySqlDS</jndi-name> //jndi鍚嶅瓧
<use-java-context>false</use-java-context>
<connection-url>jdbc:mysql://10.16.175.137:3306/test</connection-url> //URL鍦板潃
<driver-class>com.mysql.jdbc.Driver</driver-class> //椹卞姩
<user-name>root</user-name> //鐢ㄦ埛鍚?nbsp;
<password>123456</password> //瀵嗙爜
<exception-sorter-class-name>
org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter
</exception-sorter-class-name>
<metadata>
<type-mapping>mySQL</type-mapping>
</metadata>
</local-tx-datasource>
</datasources>
鐪嬩竴涓嬭繖涓枃浠?閲岄潰鐢ㄦ埛鍚嶄笌瀵嗙爜閮芥槸浠ユ槑鏂囨柟寮忓瓨鍌ㄧ殑,榪欐牱瀛愬緋葷粺鐨勫畨鍏ㄨ岃█甯︽潵浜嗘瀬澶х殑濞佸崗銆傛墍浠ユ垜浠涓烘垜浠繖涓槑鏂囩殑瀵嗙爜鍔犱竴涓嬪瘑,榪欏氨鏄湰鏂囩殑鐩殑.
2.璇村埌瀵嗙爜鍔犲瘑錛岃繖閲屾垜浠敤鍒頒簡JBoss涓嬬殑涓涓被org.jboss.resource.security.SedureIdentityLoginModule,鐪嬬湅鎴戜滑璇ュ浣曠敤瀹冩潵甯垜浠殑瀵嗙爜鍔犲瘑銆?
鍏堢湅涓厤緗暟鎹簮鐨勪緥瀛?mysql-ds.xml)錛?
Java浠g爜
<?xml version="1.0" encoding="UTF-8"?>
<datasources>
<local-tx-datasource>
<jndi-name>MySqlDS</jndi-name>
<use-java-context>false</use-java-context>
<connection-url>jdbc:mysql://192.168.1.91:3306/atteam</connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<security-domain>EncryptDBPassword</security-domain>//榪欓噷涓嶇敤鍐欎笂浣犵殑鐢ㄦ埛鍚嶄笌瀵嗙爜浜嗭紝鎴戜滑鍙互鍦╨ogin-config.xml閲屽仛鐐規(guī)墜鑴氾紝灝監(jiān)K浜?nbsp;
<exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter</exception-sorter-class-name>
<metadata>
<type-mapping>mySQL</type-mapping>
</metadata>
</local-tx-datasource>
</datasources>
<?xml version="1.0" encoding="UTF-8"?>
<datasources>
<local-tx-datasource>
<jndi-name>MySqlDS</jndi-name>
<use-java-context>false</use-java-context>
<connection-url>jdbc:mysql://192.168.1.91:3306/atteam</connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<security-domain>EncryptDBPassword</security-domain>//榪欓噷涓嶇敤鍐欎笂浣犵殑鐢ㄦ埛鍚嶄笌瀵嗙爜浜嗭紝鎴戜滑鍙互鍦╨ogin-config.xml閲屽仛鐐規(guī)墜鑴氾紝灝監(jiān)K浜?br />
<exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter</exception-sorter-class-name>
<metadata>
<type-mapping>mySQL</type-mapping>
</metadata>
</local-tx-datasource>
</datasources>
鎺ョ潃鎴戜滑淇敼server\default\conf\login-config.xml鏂囦歡,鍔犱笂涓嬮潰榪欎竴孌甸厤緗枃浠?
Java浠g爜
<application-policy name="EncryptDBPassword"> //榪欓噷鐨刵ame搴旇鏄綘鍦ㄩ厤緗暟鎹簮鏃跺啓鐨剆ecurity-domain閲岀殑瀛楃涓?nbsp;
<authentication>
<login-module code="org.jboss.resource.security.SecureIdentityLoginModule"
flag="required">
<module-option name="username">test</module-option> //鏁版嵁搴撶殑鐢ㄦ埛鍚?nbsp;
<module-option name="password">64c5fd2979a86168</module-option> //鏁版嵁搴撶殑瀵嗙爜錛屼笉榪囨槸鍔犲瘑榪囩殑浜?nbsp;
<module-option name="managedConnectionFactoryName">jboss.jca:service=LocalTxCM,name=MySqlDS</module-option>
//娉ㄦ剰name絳変簬浣犵殑鏁版嵁婧愮殑jndi-name,榪欓噷鏄疢ySqlDS
</login-module>
</authentication>
</application-policy>
<application-policy name="EncryptDBPassword"> //榪欓噷鐨刵ame搴旇鏄綘鍦ㄩ厤緗暟鎹簮鏃跺啓鐨剆ecurity-domain閲岀殑瀛楃涓?br />
<authentication>
<login-module code="org.jboss.resource.security.SecureIdentityLoginModule"
flag="required">
<module-option name="username">test</module-option> //鏁版嵁搴撶殑鐢ㄦ埛鍚?br />
<module-option name="password">64c5fd2979a86168</module-option> //鏁版嵁搴撶殑瀵嗙爜錛屼笉榪囨槸鍔犲瘑榪囩殑浜?br />
<module-option name="managedConnectionFactoryName">jboss.jca:service=LocalTxCM,name=MySqlDS</module-option>
//娉ㄦ剰name絳変簬浣犵殑鏁版嵁婧愮殑jndi-name,榪欓噷鏄疢ySqlDS
</login-module>
</authentication>
</application-policy>
3.琛ュ厖涓涓嬶紝榪欎釜鍔犲瘑鐨勫瘑鐮佹槸鍝潵鐨勶紙鍛靛懙錛屽繕浜嗚浜嗭級
java -cp "D:\TDdownload\jboss-4.2.0.CR1\jboss-4.2.0.CR1\lib\jboss-jmx.jar;D:\TDdownload\jboss-4.2.0.CR1\jboss-4.2.0.CR1\lib\jboss-common.jar;D:\TDdownload\jboss-4.2.0.CR1\jboss-4.2.0.CR1\server\default\lib\jboss-jca.jar;D:\TDdownload\jboss-4.2.0.CR1\jboss-4.2.0.CR1\server\default\lib\jbosssx.jar" org.jboss.resource.security.SecureIdentityLoginModule 123456
Encoded password: 64c5fd2979a86168
鍐欎笂浣犺嚜宸辯殑璺緞鍜屼綘瑕佸姞瀵嗙殑瀵嗙爜灝辮浜?鎴戣繖閲岃鍔犲瘑鐨勫瘑鐮佹槸123456,鍔犲瘑榪囦箣鍚庡氨鏄?4c5fd2979a86168