锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
Apache鐨勫畨瑁呰鍓嶆枃
PHP
DokuWiki
DokuWiki 瀹夊叏閰嶇疆
鍦?DokuWiki_HOME鐩綍涓嬪垱寤簆repend.php錛屽拰apache鐨勯厤緗枃浠跺搴旓紝鍦ㄦ墽琛屼細棰勫厛鍔犺澆 $conf['savedir'] = '/local/xsun/wiki/data';
@include(DOKU_CONF.'local.protected.php');
users.auth.php:
test:61e7250f72098cf2602541ffbaf66e59:LALALA:pepsixp@gmail.com:admin,user
acl.auth.php:
* @ALL 1
* @user 8
Hibernate Annotation 閰嶇疆鐨勬敞鎰忕偣錛?/p>
鍙栧嚭錛歴vn co file:///etc/svn/report1
鍙﹀闇瑕佷慨鏀逛袱涓湴鏂癸紝涓嶇劧鏃犳硶鎻愪氦淇敼鐨勬枃浠訛細
Apache
Subversion
鍙傛暟錛嶅湪macro鎸囦護涓彲浠ュ湪瀹忓彉閲忎箣鍚庡畾涔夊弬鏁?BR>渚嬩簩錛?BR><#macro greet person>
<font size="+2">Hello ${person}!</font>
</#macro>
浣跨敤錛?lt;@greet person="Fred"/> and <@greet person="Batman"/>
緇撴灉錛?<font size="+2">Hello Fred!</font> and <font size="+2">Hello Batman!</font>
macro鍙互鏈夊涓弬鏁幫紝鍙傛暟鐨勬搴忔槸鏃犲叧鐨勶紝鍦╩acro鎸囦護涓彧鑳戒嬌鐢ㄥ畾涔夌殑鍙傛暟錛屽茍涓斿繀欏誨鎵鏈夊弬鏁拌祴鍊鹼紝鍙互鍦ㄥ畾涔夊弬鏁版椂鎸囧畾緙虹渷鍊鹼細
鍦ㄨ嚜瀹氫箟鎸囦護宓屽鍐呭錛氭ā鏉跨墖鏂腑浣跨敤<#nested>鎸囦護
浣跨敤錛?lt;@border>The bordered text</@border>
緇撴灉錛?/P>
<#nested>鎸囦護鍙互琚嬈¤皟鐢細
浣跨敤錛?BR><@do_thrice>Anything.</@do_thrice>
緇撴灉錛?BR>Anything.
Anything.
Anything.
娉ㄦ剰錛氬祵濂楀唴瀹規槸鏃犳硶璁塊棶鍒癿acro涓殑灞閮ㄥ彉閲忕殑銆?BR>渚嬪錛?/P>
緇撴灉錛?BR>test 3/1: ? ? ?
test 3/2: ? ? ?
test 3/3: ? ? ?
涓嬮潰鏄竴涓祵濂椾嬌鐢ㄨ嚜瀹氫箟鎸囦護鐨勪緥瀛愶細
緇撴灉錛?/P>
鍦╩acro涓?STRONG>浣跨敤寰幆鍙橀噺錛嶄綔涓簄ested鎸囦護鐨勫弬鏁頒紶閫掑驚鐜彉閲忕殑瀹為檯鍊鹼紝鑰屽湪璋冪敤鐢ㄦ埛瀹氫箟鎸囦護鏃訛紝鍦?lt;@鈥?gt;寮濮嬫爣璁扮殑鍙傛暟鍚庨潰鎸囧畾寰幆鍙橀噺鐨勫悕瀛楋細
緇撴灉錛?BR>1. 0.5
2. 1
3. 1.5
4. 2 Last!
娉ㄦ剰錛氬驚鐜彉閲忓拰鐢ㄦ埛瀹氫箟鎸囦護寮濮嬫爣璁版寚瀹氱殑鏁扮洰鍙互涓嶅悓錛岃皟鐢ㄦ椂灝戞寚瀹氬驚鐜彉閲忥紝鍒欏鎸囧畾鐨勫間笉鍙錛岃皟鐢ㄦ椂澶氭寚瀹氬驚鐜彉閲忥紝澶氫綑鐨勫驚鐜彉閲忎笉浼氳鍒涘緩銆?BR> 鐢╝ssign鎸囦護鍒涘緩鍜屾浛鎹㈢殑渚嬪瓙錛?/P>
緇撴灉錛?BR>1 灞閮ㄥ彉閲忛殣钘?鑰屼笉鏄鐩?鍚屽悕鐨刾lain鍙橀噺錛涘驚鐜彉閲忛殣钘忓悓鍚嶇殑灞閮ㄥ彉閲忓拰plain鍙橀噺錛屼笅闈㈡槸涓涓緥瀛愶細 緇撴灉錛?BR>1. plain 鍐呴儴寰幆鍙橀噺闅愯棌鍚屽悕鐨勫閮ㄥ驚鐜彉閲忥紝渚嬪錛?/P>
緇撴灉錛?BR>loop 1 妯℃澘涓殑鍙橀噺浼氶殣钘忥紙鑰屼笉鏄鐩栵級鏁版嵁妯″瀷涓悓鍚嶅彉閲忥紝濡傛灉闇瑕佽闂暟鎹ā鍨嬩腑鐨勫悓鍚嶅彉閲忥紝浣跨敤鐗規畩鍙橀噺global錛屼笅闈㈢殑渚嬪瓙鍋囪鏁版嵁妯″瀷涓殑user鐨勫兼槸Big Joe錛?/P>
鍛藉悕(namespaces)絀洪棿錛嶉氬父鎯呭喌錛屽彧浣跨敤涓涓懡鍚嶇┖闂達紝縐頒負涓誨懡鍚嶇┖闂?main namespace)錛屼絾浣犳槸涓嶄細鎰忚瘑鍒拌繖浜涚殑錛涗負浜嗗垱寤哄彲閲嶇敤鐨刴acro銆乼ransforms鎴栧叾瀹冨彉閲忕殑闆嗗悎(閫氬父縐板簱)錛屽繀欏諱嬌鐢ㄥ鍛藉悕絀洪棿錛屼負浜嗛槻姝㈠悓鍚嶅啿紿併?/P>
棣栧厛鍒涘緩涓涓簱(鍋囪淇濆瓨鍦╨ib/my_test.ftl涓?錛?/P>
浣跨敤import鎸囦護瀵煎叆搴撳埌妯℃澘涓紝Freemarker浼氫負瀵煎叆鐨勫簱鍒涘緩鏂扮殑鍛藉悕絀洪棿錛屽茍鍙互閫氳繃import鎸囦護涓寚瀹氱殑hash(鏁e垪)鍙橀噺璁塊棶搴撲腑鐨勫彉閲忥細 緇撴灉錛?/P>
涓婇潰鐨勪緥瀛愪腑浣跨敤鐨勪袱涓悓鍚嶅彉閲忓茍娌℃湁鍐茬獊錛屽洜涓哄畠浠綅浜庝笉鍚岀殑鍛藉悕絀洪棿 鍙互浣跨敤assign鎸囦護鍦ㄥ鍏ョ殑鍛藉悕絀洪棿涓垱寤烘垨鏇夸唬鍙橀噺錛?/P>
緇撴灉錛?BR>jsmith@acme.com 鏁版嵁妯″瀷涓殑鍙橀噺浠諱綍鍦版柟閮藉彲瑙侊紝涔熷寘鎷笉鍚岀殑鍛藉悕絀洪棿錛屼笅闈慨鏀逛簡鍒氭墠鍒涘緩鐨勫簱錛?/P>
鍋囪鏁版嵁妯″瀷涓殑user鍙橀噺鐨勫兼槸Fred錛?/P>
緇撴灉錛?BR> <p>Copyright (C) 1999-2002 Fred. All rights reserved.</p>
妯℃澘涓殑鍙橀噺錛屾湁涓夌綾誨瀷錛?BR>1.) plain(鍏ㄥ眬)鍙橀噺錛氬彲浠ュ湪妯℃澘鐨勪換浣曞湴鏂硅闂紝鍖呮嫭浣跨敤include鎸囦護鎻掑叆鐨勬ā鏉匡紝浣跨敤assign鎸囦護鍒涘緩鍜屾浛鎹?BR>2.) 灞閮ㄥ彉閲?/STRONG>錛氬湪macro涓湁鏁堬紝浣跨敤local鎸囦護鍒涘緩鍜屾浛鎹?BR>3.) 寰幆鍙橀噺錛氬彧鑳藉瓨鍦ㄤ簬鎸囦護鐨勫祵濂楀唴瀹癸紝鐢辨寚浠?濡俵ist)鑷姩鍒涘緩錛涘畯鐨勫弬鏁版槸灞閮ㄥ彉閲忥紝鑰屼笉鏄驚鐜彉閲?/P>
<#assign x = 1> <#-- create variable x -->
${x}
<#assign x = x + 3> <#-- replace variable x -->
${x}
4<#assign x = "plain">
1. ${x} <#-- we see the plain var. here -->
<@test/>
6. ${x} <#-- the value of plain var. was not changed -->
<#list ["loop"] as x>
7. ${x} <#-- now the loop var. hides the plain var. -->
<#assign x = "plain2"> <#-- replace the plain var, hiding does not mater here -->
8. ${x} <#-- it still hides the plain var. -->
</#list>
9. ${x} <#-- the new value of plain var. -->
<#macro test>
2. ${x} <#-- we still see the plain var. here -->
<#local x = "local">
3. ${x} <#-- now the local var. hides it -->
<#list ["loop"] as x>
4. ${x} <#-- now the loop var. hides the local var. -->
</#list>
5. ${x} <#-- now we see the local var. again -->
</#macro>
2. plain
3. local
4. loop
5. local
6. plain
7. loop
8. loop
9. plain2<#list ["loop 1"] as x>
${x}
<#list ["loop 2"] as x>
${x}
<#list ["loop 3"] as x>
${x}
</#list>
${x}
</#list>
${x}
</#list>
loop 2
loop 3
loop 2
loop 1 <#assign user = "Joe Hider">
${user} <#-- prints: Joe Hider -->
${.globals.user} <#-- prints: Big Joe -->
<#macro copyright date>
<p>Copyright (C) ${date} Julia Smith. All rights reserved.
<br>Email: ${mail}</p>
</#macro>
<#assign mail = "jsmith@acme.com">
<#import "/lib/my_test.ftl" as my>
<#assign mail="fred@acme.com">
<@my.copyright date="1999-2002"/>
${my.mail}
${mail}
<p>Copyright (C) 1999-2002 Julia Smith. All rights reserved.
<br>Email: jsmith@acme.com</p>
jsmith@acme.com
fred@acme.com
<#import "/lib/my_test.ftl" as my>
${my.mail}
<#assign mail="jsmith@other.com" in my>
${my.mail}
jsmith@other.com <#macro copyright date>
<p>Copyright (C) ${date} ${user}. All rights reserved.</p>
</#macro>
<#assign mail = "${user}@acme.com">
<#import "/lib/my_test.ftl" as my>
<@my.copyright date="1999-2002"/>
${my.mail}
Fred@acme.com
鍙傝冿細
FreeMarker in sourceforge.net
]]>
涓婇潰鐨勪緥瀛愪腑錛屽湪綆鍗曠殑HTML涓姞鍏ヤ簡涓浜涚敱${鈥鍖呭洿鐨勭壒瀹欶reeMarker鐨勬寚浠わ紝榪欎釜鏂囦歡灝辯О涓烘ā鏉夸簡銆傝寀ser銆乴atestProduct.url鍜宭atestProduct.name鏉ヨ嚜浜庢暟鎹ā鍨嬶紝鐢盝ava紼嬪簭鎻愪緵錛屾ā鏉胯璁¤呭氨涓嶇敤鍏沖績鏁版嵁浠庡摢鏉ョ殑銆?/P>
FreeMarker妯℃澘涓彲浠ュ寘鎷笅闈㈠洓縐嶇壒瀹氶儴鍒嗭細
涓.) 鏂囨湰錛氱洿鎺ヨ緭鍑?BR>浜?) FTL鏍囪(FreeMarker妯℃澘璇█鏍囪)錛氱被浼間簬HTML鏍囪錛屽悕瀛楀墠鍔?(鏈変簺浠寮濮嬶紝鐢ㄦ埛鑷畾涔夋爣璁?浜堜互鍖哄垎錛屼笉浼氳緭鍑恒?BR>瀛楃涓?/STRONG>錛?浣跨敤鍗曞紩鍙鋒垨鍙屽紩鍙烽檺瀹氾紱濡傛灉鍖呭惈鐗規畩瀛楃闇瑕佽漿涔夌錛?{"It's \"quoted\" andthis is a backslash: \\"}
鏈変竴綾葷壒孌婄殑瀛楃涓?${r"C:\foo\bar"}錛岃緭鍑虹粨鏋勪負錛欳:\foo\bar錛屽湪寮曞彿鍓嶉潰鍔爎琚涓烘槸綰枃鏈?
鏁板瓧錛嶇洿鎺ヨ緭鍏ワ紝涓嶉渶瑕佸紩鍙楓?{08}, ${+8}, ${8.00} and ${8} 閮芥槸鐩稿悓鐨?
甯冨皵鍊?/STRONG>錛峵rue鍜宖alse錛屼笉浣跨敤寮曞彿
Sequences(搴忓垪)錛嶇敱閫楀彿鍒嗛殧鐨勫彉閲忓垪琛紝鐢辨柟鎷彿闄愬畾錛岀被浼糺ava涓殑涓緇存暟緇勶細
杈撳嚭緇撴灉錛?BR>winter
spring
summer
autumn
渚嬩簩錛歔2 + 2, [1, 2, 3, 4], "whatnot"]
渚嬩笁錛?..5錛岀瓑鍚屼簬[2, 3, 4, 5]錛?..2錛岀瓑鍚屼簬[5,4,3,2]銆傛敞鎰忔柟鎷彿鏄笉闇瑕佺殑銆?BR>
Hashes(鏁e垪)錛嶇敱閫楀彿鍒嗛殧鐨勯敭-鍊煎垪琛紝鐢卞ぇ鎷彿闄愬畾錛岄敭鍜屽間箣闂寸敤鍐掑彿鍒嗛殧錛歿"name":"green mouse", "price":150}錛岄敭鍜屽奸兘鏄〃杈懼紡錛屼絾鏄敭蹇呴』鏄瓧絎︿覆銆?/P>
鑾峰彇鍙橀噺錛?{variable}錛屽彉閲忓悕鍙兘鏄瓧姣嶃佹暟瀛椼佷笅鍒掔嚎銆?銆丂鍜?鐨勭粍鍚堬紝涓斾笉鑳戒互鏁板瓧寮澶淬備笅鍒楄〃杈懼紡鏄瓑浠風殑錛?BR>book.author.name
book["author"].name
book.author.["name"]
book["author"]["name"]
鑾峰彇Sequence(搴忓垪)鐗囨柇錛嶄嬌鐢╗startindex..endindex]錛屼緥濡傦細seq涓瓨鍌ㄤ簡"a", "b", "c", "d","e"錛岄偅涔坰eq[1..2]鍖呭惈浜哹鍜宑涓や釜鍊箋?BR>
鍙互浣跨敤.variablename璇硶璁塊棶FreeMarker鍐呯疆鍙橀噺銆?/P>
瀛楃涓叉搷浣?/STRONG>
{"Hello ${user}!"} <==> ${"Hello " + user + "!"}
${"${user}${user}${user}${user}"} <==> ${user + user + user + user}
${鈥鍙兘鍦ㄦ枃鏈腑浣跨敤錛屼笅闈㈡槸閿欒鐨勪唬鐮侊細
<#if ${isBig}>Wow!</#if>
<#if "${isBig}">Wow!</#if> //姝ゅ鐨勪唬鐮佷篃鏄敊璇殑錛屽洜涓篿f鎸囦護闇瑕佺殑鏄痓oolean錛屽疄闄呯殑鍗存槸涓瓧絎︿覆
瀛愬瓧絎︿覆鐨勬搷浣滐紝鍋囪user鐨勫間負"Big Joe"錛?BR>${user[0]}${user[4]} <==> BJ
${user[1..4]} <==> ig J
Sequences(搴忓垪)鎿嶄綔
緇撴灉錛?BR>- Joe
- Fred
- Julia
- Kate
Hashes(鏁e垪)鎿嶄綔
緇撴灉錛?BR>- Joe is 30
- Fred is 25
- Julia is 18
綆楁湳榪愮畻
緇撴灉錛?BR>-75
2.5
2
娉ㄦ剰錛?鎿嶄綔絎︿袱杈瑰繀欏繪槸鏁板瓧錛涗嬌鐢?+"鏃訛紝濡傛灉涓杈規槸鏁板瓧錛屼竴杈規槸瀛楃涓詫紝灝變細鑷姩灝嗘暟瀛楄漿鎹負瀛楃涓層?BR>
浣跨敤鍐呭緩鐨勬寚浠nt鑾峰緱鏁存暟閮ㄥ垎錛?/P>
緇撴灉錛?BR>2
1
1
-1
-1
姣旇緝鎿嶄綔絎?/STRONG>錛?lt;#if expression>...</#if>
1.)浣跨敤=錛堟垨==錛屽畬鍏ㄧ浉絳夛級嫻嬭瘯涓や釜鍊兼槸鍚︾浉絳夛紝浣跨敤!= 嫻嬭瘯涓や釜鍊兼槸鍚︿笉鐩哥瓑
2.)=鍜?=涓よ竟蹇呴』鏄浉鍚岀被鍨嬬殑鍊鹼紝鍚﹀垯浼氫駭鐢熼敊璇紝渚嬪<#if 1 = "1">浼氬紩璧烽敊璇?BR>3.)Freemarker鏄簿紜瘮杈冿紝鎵浠?x"銆?x "鍜?X"鏄笉鐩哥瓑鐨?BR>4.)瀵規暟瀛楀拰鏃ユ湡鍙互浣跨敤<銆?lt;=銆?gt;鍜?gt;=錛屼絾涓嶈兘鐢ㄤ簬瀛楃涓?BR>5.)鐢變簬Freemarker浼氬皢>瑙i噴鎴怓TL鏍囪鐨勭粨鏉熷瓧絎︼紝鎵浠ュ浜?gt;鍜?gt;=鍙互浣跨敤鎷彿鏉ラ伩鍏嶈繖縐嶆儏鍐碉紝渚嬪<#if (x > y)>錛屽彟涓縐嶆浛浠g殑鏂規硶鏄紝浣跨敤lt銆乴te銆乬t鍜実te鏉ユ浛浠?lt;銆?lt;=銆?gt;鍜?gt;=
閫昏緫鎿嶄綔絎?/STRONG>錛?amp;&(and)銆亅|(or)銆?(not)錛屽彧鑳界敤浜庡竷灝斿鹼紝鍚﹀垯浼氫駭鐢熼敊璇?BR><#if x < 12 && color = "green">
We have less than 12 things, and they are green.
</#if>
<#if !hot> <#-- here hot must be a boolean -->
It's not hot.
</#if>
鍐呯疆鍑芥暟錛嶇敤娉曠被浼艱闂甴ash(鏁e垪)鐨勫瓙鍙橀噺錛屽彧鏄嬌鐢??"鏇夸唬"."錛屼緥濡傦細user?upper_case
涓嬮潰鍒楀嚭甯哥敤鐨勪竴浜涘嚱鏁幫細
瀵逛簬瀛楃涓?/U>
html錛嶅瀛楃涓茶繘琛孒TML緙栫爜
cap_first錛嶄嬌瀛楃涓茬涓涓瓧姣嶅ぇ鍐?BR>lower_case錛嶅皢瀛楃涓茶漿鎹㈡垚灝忓啓
trim錛嶅幓鎺夊瓧絎︿覆鍓嶅悗鐨勭┖鐧藉瓧絎?BR>瀵逛簬Sequences(搴忓垪)
size錛嶈幏寰楀簭鍒椾腑鍏冪礌鐨勬暟鐩?BR>瀵逛簬鏁板瓧
int錛嶅彇寰楁暟瀛楃殑鏁存暟閮ㄥ垎錛堝-1.9?int鐨勭粨鏋滄槸-1錛?BR>
渚嬩竴錛?/P>
<#-- test鐨勫間負Tom & Jerry -->
${test?html}
${test?upper_case?html}
緇撴灉錛?BR>Tom & Jerry
TOM & JERRY
渚嬩簩錛?/P>
緇撴灉錛?BR>4
Spring
Horse
鏂規硶鐨勮皟鐢?/STRONG>
${repeat("What", 3)}
${repeat(repeat("x", 2), 3) + repeat("What", 4)?upper_case}
緇撴灉錛?BR>WhatWhatWhat
xxxxxxWHATWHATWHATWHAT
鎿嶄綔絎︿紭鍏堥『搴?/STRONG>
鍚庣紑 [subvarName] [subStringRange] . (methodParams)
涓鍏?nbsp; +expr銆?expr銆?
鍐呭緩 ?
涔樻硶 *銆?/ 銆?
鍔犳硶 +銆?
鍏崇郴 <銆?gt;銆?lt;=銆?gt;=錛坙t銆乴te銆乬t銆乬te錛?BR>鐩哥瓑 =銆?=
閫昏緫 &&
閫昏緫 ||
鏁板瓧鑼冨洿 ..
涓?) Interpolation錛氱敱${...}鎴?{...}涓ょ綾誨瀷錛岃緭鍑鴻綆楀鹼紝鍙互瀹氫箟杈撳嚭鐨勬牸寮?BR>渚嬩竴錛?/P>
緇撴灉錛?BR>$42.00
$42.00
42
$42.00
4,200%
渚嬩簩錛?/P>
緇撴灉錛?BR>2003-04-08 21:24:44 Pacific Daylight Time
Tue, Apr 8, '03
Tuesday, April 08, 2003, 09:24:44 PM (PDT)
渚嬩笁錛?/P>
緇撴灉錛?BR>yes
渚嬪洓錛?/P>
璇存槑錛歮X錛嶅皬鏁伴儴鍒嗘渶灝廥浣嶏紱MX錛嶅皬鏁伴儴鍒嗘渶澶浣嶃?/P>
鍥?) 娉ㄩ噴錛?lt;#--鍜?->
涓嬮潰鏄竴涓父鐢ㄧ殑妯℃澘渚嬪瓙錛?/P>
娉ㄦ剰鐐?/STRONG>錛?BR>1.) FreeMarker鏄尯鍒嗗ぇ灝忓啓鐨勶紱
2.) FTL鏍囪涓嶈兘浣嶄簬鍙︿竴涓狥TL鏍囪鍐呴儴錛屼緥濡傦細<#if <#include 'foo'>='bar'>...</if>錛?BR>3.) ${鈥鍙兘鍦ㄦ枃鏈腑浣跨敤錛?BR>4.) 澶氫綑鐨勭┖鐧藉瓧絎︿細鍦ㄦā鏉胯緭鍑烘椂鍘婚櫎錛?BR>5.) 濡傛灉浣跨敤鐨勬寚浠や笉瀛樺湪錛屼細浜х敓涓涓敊璇秷鎭?/P>
鍙傝冿細
FreeMarker in sourceforge.net
]]>
涓嬮潰鏄竴涓В鍐充腑鏂囦貢鐮侀棶棰樺緢鏈夌敤鐨勪竴涓繃婊ゅ櫒錛?/P>
鍙戝竷Servlet榪囨護鍣?/STRONG>錛嶅湪web.xml鍦ㄦ枃浠朵腑鍔犲叆<filter>鍏冪礌鍜?lt;filter-mapping>鍏冪礌
涓嬮潰鐨勪緥瀛愪腑Servlet榪囨護鍣ㄤ細榪囨護鎵鏈夌殑URL錛?/P>
涓茶繛Servlet榪囨護鍣?/STRONG> 鑷畾涔塉SP鏍囩搴?BR>姝ゆ妧鏈湪JSP 1.1鐗堟湰涓墠鍑虹幇錛岀敤鏉ラ噸鐢ㄦ煇浜涘鏉傜殑閫昏緫榪愮畻鍜屼簨鍔★紝鎴栧畾涔塉SP鐜嬬埛鐨勮緭鍑哄唴瀹瑰拰鏍煎紡銆傚埗浣滀竴涓畬鏁寸殑鑷畾涔夋爣絳劇▼搴忥紝鍖呭惈3涓楠わ細 2.鍒涘緩TLD錛峊ag Library Descriptor(鏍囩搴撴弿榪版枃浠? 瀹為檯涓殑浣跨敤錛?BR><%@ taglib uri="/tags/test" prefix="test" %>
澶氫釜Servlet榪囨護鍣ㄥ彲浠ュ崗鍚屽伐浣滐紝Servlet瀹瑰櫒灝嗘牴鎹畠浠湪web.xml涓畾涔夌殑鍏堝悗欏哄簭錛屼緷嬈¤皟鐢ㄥ畠浠殑doFilter()鏂規硶銆?BR>宸ヤ綔嫻佺▼濡備笅錛?BR> Code1; // 琛ㄧず璋冪敤chain.doFilter()鍓嶉潰鐨勪唬鐮?BR> chain.doFilter(); // 琛ㄧず璋冪敤涓嬩竴涓繃婊ゅ櫒鐨刣oFilter()鏂規硶
Code2; // 琛ㄧず璋冪敤chain.doFilter()鍚庨潰鐨勪唬鐮?/P>
1. 鍒涘緩鏍囩鐨勫鐞嗙被
姝ょ被蹇呴』鎵╁睍javax.servlet.jsp.TagSupport綾繪垨鑰卝avax.servlet.jsp.BodyTagSupport綾匯?BR>浠agSupport綾諱負渚嬶紝鍏堜簡瑙d竴涓嬭繖涓被鐨勪富瑕佹柟娉曪細
doStartTag()錛岼SP瀹瑰櫒閬囧埌鑷畾涔夋爣絳劇殑璧峰鏍囧織鏃惰皟鐢ㄨ鏂規硶錛?BR>doEndTag()錛岼SP瀹瑰櫒閬囧埌鑷畾涔夋爣絳劇殑緇撴潫鏍囧織鏃惰皟鐢ㄨ鏂規硶錛?BR>setValue(String k,Object o)錛嶅湪鏍囩澶勭悊綾諱腑璁劇疆key/value;
getValue(String k)錛嶅湪鏍囩澶勭悊綾諱腑鏍規嵁key榪斿洖鍖歸厤鐨剉alue;
removeValue(String k)錛嶅湪鏍囩澶勭悊綾諱腑鍒犻櫎key/value;
setPageContext(PageContext pc)錛嶈緗甈ageContext瀵硅薄錛岃鏂規硶鍦ㄨ皟鐢╠oStartTag()鍜宒oStartTag()鍓嶈皟鐢紱
setParent(Tag t)錛嶈緗祵濂楀綋鍓嶆爣絳劇殑涓婂眰鏍囩鐨勫鐞嗙被錛岃鏂規硶鍦ㄨ皟鐢╠oStartTag()鍜宒oStartTag()鍓嶈皟鐢紱
getParent()錛嶈繑鍥炲祵濂楀綋鍓嶆爣絳劇殑涓婂眰鏍囩鐨勫鐞嗙被銆?BR>
棣栧厛璋冪敤setPageContext(PageContext pc)鍜宻etParent(Tag t)錛岃緗甌agSupport綾葷殑涓や釜閲嶈灞炴у箋?BR>
濡傛灉閬囧埌璧峰鏍囧織錛岃皟鐢╠oStartTag()錛屾鏂規硶榪斿洖涓涓暣鏁板鹼紝瀹冩湁涓や釜鍙夊鹼細Tag.SKIP_BODY(鏍囩涔嬮棿鐨勫唴瀹硅蹇界暐)鍜孴ag.EVAL_BODY_INCLUDE(鏍囩涔嬮棿鐨勫唴瀹規甯告墽琛?銆?BR>渚嬪錛?lt;prefix:mytag>test</prefix:mytag>錛屽鏋滈亣涓奣ag.SKIP_BODY錛宼est瀛楃涓蹭笉浼氭樉紺哄湪欏甸潰涓婏紱濡傛灉閬囦笂Tag.EVAL_BODY_INCLUDE錛宼est瀛楃涓插皢浼氭樉紺哄湪欏甸潰涓娿?BR>
濡傛灉閬囧埌緇撴潫鏍囧織錛岃皟鐢╠oEndTag()錛屾鏂規硶涔熻繑鍥炰竴涓暣鏁板鹼紝瀹冩湁涓や釜鍙夊鹼細Tag.SKIP_PAGE(琛ㄧず绔嬪埢鍋滄鎵цJSP欏甸潰錛岀綉欏典笂鏈鐞嗙殑闈欐佸唴瀹瑰拰JSP紼嬪簭鍧囧埆蹇界暐錛屼換浣曞凡鏈夌殑杈撳嚭鍐呭绔嬪埢榪斿洖鍒板鎴風錛?鍜孴ag.EVAL_PAGE(琛ㄧず鎸夋甯告祦紼嬬戶緇墽琛孞SP欏甸潰)銆?BR>
濡傛灉鑷畾涔夋爣絳懼寘鍚嚜瀹氫箟鐨勫睘鎬э紝渚嬪錛?lt;prefix:mytag attribute1="value1">錛岄偅涔堝鐞嗙被涓簲璇ュ皢榪欎釜灞炴у仛涓烘垚鍛樺彉閲忥紝騫舵彁渚涗竴緇刧et鍜宻et鏂規硶錛?BR>private int attribute1;
public void setAttribute1(int value){
this.attriubte1 = value;
}
public int getAttribute1(){
return attribute1;
}
涓嬮潰鏄竴涓敤鏉ラ獙璇佺敤鎴風櫥闄嗙殑鏍囩澶勭悊綾諱緥瀛愶細public class ValidateLoginTag extends TagSupport
{
private String name;
private String password;
private Log log = LogFactory.getLog(ValidateLoginTag.class);
public int doEndTag() throws JspException
{
if(name.equals("pepsixp") && password.equals("888888"))
{
return(EVAL_PAGE);
}
return (SKIP_PAGE);
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public String getPassword()
{
return password;
}
public void setPassword(String password)
{
this.password = password;
}
}
TLD鏂囦歡涓厓绱犲彲浠ュ垎涓轟笁綾伙細<tablib>銆?lt;tag>銆?lt;attribute>
<tablib>錛嶈瀹氭爣絳懼簱鐨勭浉鍏充俊鎭紝鍖呭惈鐨勫瓙鍏冪礌鏈塼libversion銆乯spversion銆乻hortname銆乽ri銆乮nfo銆乼ag銆?BR><tag>錛嶇敤鏉ュ畾涔変竴涓爣絳撅紝鍖呭惈鐨勫瓙鍏冪礌鏈塶ame銆乼agcalss銆乥odycontent銆乮nfo銆乤ttribute銆?BR>bodycontent鐨勮鏄庯細鏈変笁涓彲閫夊糴mpty銆丣SP銆乼agdependent錛宔mpty琛ㄧず鏍囩涓病鏈塨ody錛孞SP琛ㄧずbody涓彲浠ュ姞鍏SP紼嬪簭浠g爜錛宼agdependent琛ㄧずbody鐨勫唴瀹規湁鏍囩榪涜澶勭悊銆?BR><attribute>錛嶇敤鏉ュ畾涔夋爣絳劇殑灞炴э紝鍖呭惈鐨勫瓙鍏冪礌鏈塶ame銆乺equired銆乺texprvalue銆?BR>rtexprvalue鐨勮鏄庯細琛ㄧず鏄惁鍙互浣跨敤<%=...%>綾誨瀷鐨勮〃杈懼紡錛?BR>渚嬪錛?lt;prefix:mytaglib attribute1="<%=name%>">
涓嬮潰鏄竴涓畝鍗曠殑TLD鏂囦歡錛?/P>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
<taglib>
<tlibversion>1.2</tlibversion>
<jspversion>1.1</jspversion>
<shortname>MY Tag Library</shortname>
<uri>http://www.tkk7.com/pepsixp/</uri>
<info>
</info>
<tag>
<name>ifLogin</name>
<tagclass>com.akazam.struts.taglib.ValidateLoginTag</tagclass>
<bodycontent>empty</bodycontent>
<info>
</info>
<attribute>
<name>name</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>password</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
<test:ifLogin name="pepsixp" password="888888"/>
3.鍦╳eb搴旂敤涓嬌鐢ㄦ爣絳?/STRONG>
鍏堣鍦╳eb.xml鏂囦歡鍔犲叆澹版槑寮曠敤鏍囩鎵鍦ㄧ殑鏍囩錛?BR><taglib>
<taglib-uri>/tags/test</taglib-uri>
<taglib-location>/WEB-INF/test.tld</taglib-location>
</taglib>
鍙傝冿細銆奣omcat涓嶫avaWeb寮鍙戞妧鏈瑙c?/FONT>
]]>
瀹夊叏鍩?/STRONG>
榪欐槸Tomcat鏈嶅姟鍣ㄧ敤鏉ヤ繚鎶eb搴旂敤璧勬簮鐨勪竴縐嶆満鍒躲備竴涓敤鎴峰彲浠ユ嫢鏈変竴涓垨澶氫釜瑙掕壊錛屾瘡涓鑹查檺瀹氫簡鍙闂殑Web璧勬簮錛岃繖鏍峰氨灝嗙敤鎴峰拰Web璧勬簮瀵瑰簲璧鋒潵浜嗐傚湪org.apache.catalina.Realm鎺ュ彛涓0鍚嶄簡灝嗙敤鎴峰悕銆佸彛浠ゅ拰瑙掕壊鐩哥鐞嗙殑鏂規硶錛孴omcat5鎻愪緵浜?涓疄鐜拌繖涓鎺ュ彛鐨勭被錛屽垎鍒負錛歁emoryRealm(XML鏂囦歡璇誨彇)銆丣DBCRealm(JDBC椹卞姩紼嬪簭璇誨彇)銆丏ataSourceRealm(JNDI鏁版嵁婧愯鍙?銆丣NDIRealm(JNDI provider璇誨彇LDAP鐨勭洰褰曟湇鍔″櫒淇℃伅)銆?/FONT>
Web璧勬簮鐨勮緗?BR>闇瑕佸湪web.xml鏂囦歡涓姞鍏?lt;security-constraint>銆?lt;login-config>銆?lt;security-role>鍏冪礌銆?BR>渚嬪鍦═omcat鐨刟dmin搴旂敤涓殑閰嶇疆錛?/FONT>
涓婇潰鐨勪唬鐮佽〃鏄庯細鍙湁admin瑙掕壊鎵嶈兘璁塊棶admin搴旂敤涓殑*.jsp銆?.do鍜?.html璧勬簮銆?BR>鍙︿竴涓緥瀛愭槸jsp-examples搴旂敤錛?BR>
涓婇潰鐨勪唬鐮佽〃鏄庯細鍙tomcat鍜宺ole1瑙掕壊鎵嶅彲浠ヤ互DELETE銆丟ET銆丳OST鍜孏ET鏂瑰紡璁塊棶jsp-exzmples搴旂敤URL涓?security/protected/涓嬬殑璧勬簮銆?BR>鍦╳eb.xml涓姞鍏?lt;login-config>鍏冪礌錛嶇郴緇熶細浠ュ璇濇鐨勬柟寮忚繘琛岀櫥闄?BR>
<auth-method>鏈変笁涓彲閫夐」錛欱ASIC銆丏IGEST銆丗ORM銆?BR>BASIC錛嶅熀鏈獙璇侊細璁塊棶鍙椾繚鎶よ祫婧愭椂錛屼細寮瑰嚭涓瀵硅瘽妗嗐傝姹傝緭鍏ョ敤鎴峰悕鍜屽瘑鐮侊紝濡傛灉榪炵畫3嬈″け璐ュ悗錛屼細鏄劇ず涓涓敊璇〉闈€傝繖涓柟娉曠殑緙虹偣鏄敤鎴峰悕鍜屽瘑鐮佺殑鏁版嵁浼犺緭閲囩敤鐨勬槸Base64緙栫爜(鍙鏂囨湰)錛屾槸闈炲父涓嶅畨鍏ㄧ殑銆?BR>DIGEST錛嶆憳瑕侀獙璇侊細鏁版嵁閲囩敤MD5瀵圭敤鎴峰悕鍜屽瘑鐮佽繘琛屽姞瀵嗭紝鐒跺悗鍐嶄紶杈擄紝鏄劇劧榪欑鏂規硶寰堝畨鍏ㄣ?BR>FORM錛嶈〃鍗曢獙璇侊細鍙互浣跨敤鑷畾涔夌殑鐧婚檰欏甸潰錛屼絾鐢ㄦ埛鍚嶅搴旂殑鏂囨湰妗嗗悕縐板繀欏繪槸j_username,瀵嗙爜涓簀_password錛屼笖琛ㄥ崟action鍊間負j_security_check銆?BR>鍦╳eb.xml涓姞鍏?lt;security-role>鍏冪礌錛嶆寚鏄庤繖涓猈eb搴旂敤搴旂敤鐨勬墍鏈夎鑹茬殑鍚嶅瓧
浣犲彲浠ヨ皟鐢℉ttpRequeset鎺ュ彛鐨刧etRemoteUser()鏂規硶榪斿洖褰撳墠鐢ㄦ埛鐨勫悕瀛楋細<%=request.getRemoteUser()%>
鍐呭瓨鍩?/STRONG>錛嶇敱org.apache.catalina.realm.MemoryRelam綾誨疄鐜?BR>灝忕尗鍚姩鏃訛紝鑷姩璇誨彇<%CATALINA_HOME%>/conf/tomcat-users.xml鏂囦歡錛岃鍦╓eb搴旂敤涓嬌鐢紝鍙互鍦ㄥ搴旂殑<Context>鍏冪礌鍐呭姞鍏ュ涓嬪唴瀹癸細<Realm className="org.apache.catalina.realm.MemoryRelam"/>
JDBC鍩?/STRONG>錛嶉氳繃JDBC椹卞姩浠庢暟鎹簱涓洿鎺ヨ鍙栭獙璇佷俊鎭紝閫氳繃楠岃瘉鍚庯紝淇℃伅浼氬瓨鍌ㄥ湪session涓?BR>鍦╩ysql涓柊寤轟袱寮犺〃錛?/P>
鐒跺悗鍦╯erver.xml涓姞鍏ワ細
DataSource鍩?/STRONG>錛嶅拰JDBC鍩熷緢綾諱技錛屽彧涓嶈繃璁塊棶鏁版嵁搴撶殑鏂瑰紡涓嶅悓錛岃繖涓槸浣跨敤JNDI DataSource鏉ヨ闂暟鎹簱鐨勩?BR>鍏堝湪web.xml涓姞鍏ュ畨鍏ㄧ害鏉燂紝鍦ㄥ拰JDBC鍩熶竴鏍鋒柊寤轟袱寮犺〃錛岀劧鍚庡湪server.xml鏂囦歡鐨?lt;GlobalNamingResources>鍏冪礌涓嬫坊鍔犲涓嬪唴瀹癸細 娉ㄦ剰錛歍omcat鐨凧NDI璧勬簮蹇呴』閰嶇疆鍦?lt;GlobalNamingResources>鍏冪礌涓嬶紝鏈嶅姟鍣ㄦ墠鑳芥壘鍒幫紝鍚﹀垯浼氬嚭鐜癗ameNotFoundException錛涗綆浜嶵omcat5.0.12鐨勭増鏈紝鍗充嬌姝g‘閰嶇疆浜咲ataSourceRealm錛屼篃浼氬嚭鐜版壘涓嶅埌JNDI DataSource鐨勫紓甯革紝榪欎釜灝忕尗鐨勪竴涓猙ug錛涘湪web.xml涓槸涓嶉渶瑕侀厤緗?lt;resource-ref>鍏冪礌鐨勶紝鍥犱負Web搴旂敤騫朵笉浼氳闂繖涓狣ataSource銆?BR>褰撶劧server.xml榪橀渶瑕佹坊鍔犲拰JDBC鍩熷嚑涔庣浉鍚岀殑浠g爜錛?/P>
Tomcat闃 鐒跺悗鍐嶆坊鍔?lt;Value>鍏冪礌錛?/P>
create table usr_roles{usr_name varchar(15) not null,role_name varchar(15) not null,
primary key(user_name,role_name)};<Realm className="org.apache.catalina.realm.JDBCRealm" driverName="com.mysql.jdbc.Driver"
debug="0" connectionURL="jdbc:mysql://localhost/tomcatusers" connectionName="roor"
connectonPassword="" userTable="users" userNameCol="user_name"
userCredCol="user_pass" userRoleTable="user_roles" roleNameCol="role_name">
<ResourceParams name="jdbc/tomcatusers">
<parameter> <name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter>
<name>maxActiove</name>
<value>100</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>30</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>10000</value>
</parameter>
<parameter>
<name>username</name>
<value>root</value>
</parameter>
<parameter>
<name>password</name>
<value></value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>com.mysql.jdbc.Driver</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:mysql://localhost/tomcatusers?autoReconnect=true</value>
</parameter>
</ResourceParams>
driverName="com.mysql.jdbc.Driver" debug="0"
connectionURL="jdbc:mysql://localhost/tomcatusers" connectionName="roor"
connectonPassword="" userTable="users" userNameCol="user_name"
userCredCol="user_pass" userRoleTable="user_roles" roleNameCol="role_name">
鐢眔rg.apache.Catalina.Value鎺ュ彛瀹氫箟錛岃兘澶熷Catalina瀹瑰櫒鎺ユ敹鐨凥TTP Request榪涜棰勫鐞嗭紝鏄皬鐚壒鏈夌殑鍔熻兘錛屽彲浠ュ姞鍏ュ埌3縐嶅鍣ㄤ腑(Engine銆丠ost銆丆ontext)銆?BR>
瀹㈡埛璁塊棶鏃ュ織闃(Access Log Value)錛?鑳藉灝嗗彲浠ョ殑Request淇℃伅鍐欏叆鍒版棩蹇椾腑銆傚彲浠ヨ褰曢〉闈㈣闂殑嬈℃暟銆佺敤鎴稴ession媧誨姩鍜岀敤鎴烽獙璇佷俊鎭瓑銆?BR>渚嬪錛?lt;Value className="org.apache.catalina.AccessLogValue" directory="logs" prifix="localhost_access_log" suffix=".txt" pattern="%h%l%u%t%s%r%s%b" resolveHost="true">
涓婇潰鐨刾attern鍊煎彲浠ョ敤common錛屼竴涓粯璁ょ殑鍊箋?BR>pattern灞炴ц瀹氭棩蹇楃殑鏍煎紡鍜屽唴瀹癸細%a錛嶈繙紼婭P鍦板潃錛?A錛嶆湰鍦癐P鍦板潃錛?b錛嶅彂閫佺殑瀛楄妭鏁幫紝涓嶅寘鎷琀TTP Header錛?h錛嶈繙紼嬩富鏈哄悕錛?H錛嶅鎴瘋姹傛墍鐢ㄧ殑鍗忚錛?l錛?-";%m錛嶈姹傜殑鏂規硶錛?p錛嶆帴鍙楄姹傜殑鏈湴鏈嶅姟鍣ㄦ柇寮錛?q錛嶆煡璇㈠瓧絎︿覆錛?r錛嶇敤鎴瘋姹傜殑絎竴琛屽唴瀹癸紱%s錛嶅搷搴擧TTP Request鐨勭姸鎬佺爜錛?S錛嶇敤鎴稴ession ID錛?t錛嶆椂闂達紱%u錛嶉獙璇佺殑鐢ㄦ埛鍚嶏紱%U錛嶈姹俇RL璺緞錛?v錛嶆湰鍦版湇鍔″櫒鍚嶃?BR>
榪滅▼鍦板潃榪囨護鍣?/STRONG>(Remote Address Filter)錛嶆牴鎹甀P鍦板潃鍐沖畾鏄惁鎺ュ彈瀹㈡埛鐨勮姹傘?BR>渚嬪錛?lt;Value className="org.apache.catalina.RemoteAddrValue" allow="127.0.0.1" deny="127.111.*"/>
榪滅▼涓繪満榪囨護鍣?/STRONG>(Remot Host Filter)錛嶆牴鎹富鏈哄悕鍐沖畾鏄惁鎺ュ彈璇鋒眰銆?BR><Value className="org.apache.catalina.RemoteHostValue" allow="localhost" deny="monster*"/>
瀹㈡埛璇鋒眰璁板綍鍣?/STRONG>(Request Dumper)錛嶆妸瀹㈡埛璇鋒眰鐨勮緇嗕俊鎭褰曞湪鏃ュ織鏂囦歡涓紝榪欓噷鐨勬棩蹇楁枃浠舵槸鎸?lt;Logger>鍏冪礌銆?BR>鍋囧畾鍦╯erver.xml涓璴ocalhost鐨?lt;Host>鍏冪礌涓嬪凡緇忛厤緗簡<Logger>鍏冪礌錛?BR>
suffix=".txt" timestamp="true"/>