锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
2銆佷嬌鐢ㄦ敞鎰忥細
聽聽 .properties鏂囦歡鏄斁鍦╟lass鍖呬腑鐨勶紝涓嶆槸鍦ㄦ簮鐮乻rc涓?br />
2:聽 java org.apache.axis.wsdl.WSDL2Java -p com.hnisi.axis.client
http://192.168.3.42:8080/test/services/BookOrder?wsdl
鍓嶆彁錛欰XIS鐜閰嶅ソ
鍦ㄦ湰鏂囦腑錛屾垜浠笅杞界殑JBoss鐗堟湰涓猴細4.2.1.GA銆?/span>
涓嬭澆鍦板潃錛?/span>
鍦ㄥ涓婄殑涓嬭澆欏典腑涓嬭澆JBoss-4.2.1.GA.zip鏂囦歡銆?/span>
涓嬭澆瀹屾垚鍚庯紝灝嗗叾瑙e帇緙╁悗鍗沖彲瀹屾垚瀹夎錛岃В鍘嬬緝鍚庡皢鍏舵斁緗埌涓涓笉甯︾┖鏍肩殑鐩綍(鑻ョ洰褰曞甫鏈夌┖鏍鹼紝渚嬪錛?/span>C:"Program Files錛屾棩鍚庡彲鑳戒細浜х敓涓浜涜帿鍚嶇殑閿欒)錛?/span>eg錛?/span>E:"JBoss4.2.1銆傚悓鏃跺湪鈥滅幆澧冨彉閲忚緗濅腑璁劇疆鍚嶄負JBOSS_HOME鐨勭幆澧冨彉閲忥紝鍊間負JBoss鐨勫畨瑁呰礬寰勶紝濡備笅鍥炬墍紺猴細
鍦ㄦ錛?/span>JBoss鐨勫畨瑁呭伐浣滃凡緇忕粨鏉燂紝鍙氳繃濡備笅鏂瑰紡嫻嬭瘯瀹夎鏄惁鎴愬姛錛?/span>
榪愯JBoss瀹夎鐩綍"bin"run.bat錛屽鏋滅獥鍙d腑娌℃湁鍑虹幇寮傚父錛屼笖鍑虹幇錛?/span>10:16:19,765 INFO聽[Server] JBoss (MX MicroKernel) [4.2.1.GA (build: SVNTag=JBoss_4_2_1_GA date=200707131605)] Started in 30s:828ms瀛楁牱錛屽垯琛ㄧず瀹夎鎴愬姛銆?/span>
鎴戜滑鍙互閫氳繃璁塊棶錛?/span> http://localhost:8080/ 榪涘叆JBoss鐨勬榪庣晫闈紝鐐瑰嚮JBoss Management涓嬬殑JMX Console鍙繘鍏?/span>JBoss鐨勬帶鍒跺彴銆?/span>
鑻ュ惎鍔ㄥけ璐ワ紝鍙兘鐢變互涓嬪師鍥犲紩璧鳳細
1錛?span style="FONT: 7pt 'Times New Roman'">聽聽聽聽聽聽聽聽聽聽聽聽聽 JBoss鎵鐢ㄧ殑绔彛錛?/span>8080錛?/span>1099錛?/span>1098錛?/span>8083絳夛級琚崰鐢ㄣ備竴鑸儏鍐典笅涓?/span>8080绔彛琚崰鐢紙渚嬪錛?/span>Oracle鍗犵敤浜?/span>8080绔彛錛夛紝姝ゆ椂闇瑕佷慨鏀?/span>JBoss鐨勭鍙o紝鏂規硶涓鴻繘鍏?/span>JBoss瀹夎鐩綍"server"default"deploy"jboss-web.deployer鐩綍錛屼慨鏀瑰叾涓嬬殑server.xml鐩綍錛屽湪姝ゆ枃浠朵腑鎼滅儲8080錛屽皢鍏舵敼鎴愪綘鎯寵鐨勭鍙e嵆鍙紙渚嬪8088錛夛紱
2錛?span style="FONT: 7pt 'Times New Roman'">聽聽聽聽聽聽聽聽聽聽聽聽聽 JDK瀹夎涓嶆紜紱
3錛?span style="FONT: 7pt 'Times New Roman'">聽聽聽聽聽聽聽聽聽聽聽聽聽 JBoss涓嬭澆涓嶅畬鍏ㄣ?/span>
浜岋紟聽聽聽聽聽聽聽聽聽聽聽聽 JBoss 鐨勭洰褰曠粨鏋勮鏄?/span>
鐩綍 |
鎻忚堪 |
bin |
鍚姩鍜屽叧闂?/span> JBoss 鐨勮剼鏈紙 run.bat 涓?/span> windows 緋葷粺涓嬬殑鍚姩鑴氭湰錛?/span> shutdown.bat 涓?/span> windows 緋葷粺涓嬬殑鍏抽棴鑴氭湰錛夈?/span> |
client |
瀹㈡埛绔笌 JBoss 閫氫俊鎵闇鐨?/span> Java 搴擄紙 JARs 錛夈?/span> |
docs |
閰嶇疆鐨勬牱鏈枃浠訛紙鏁版嵁搴撻厤緗瓑錛夈?/span> |
docs/dtd |
鍦?/span> JBoss 涓嬌鐢ㄧ殑鍚勭 XML 鏂囦歡鐨?/span> DTD 銆?/span> |
lib |
涓浜?/span> JAR 錛?/span> JBoss 鍚姩鏃跺姞杞斤紝涓旇鎵鏈?/span> JBoss 閰嶇疆鍏變韓銆傦紙涓嶈鎶婁綘鐨勫簱鏀懼湪榪欓噷錛?/span> |
server聽 |
鍚勭 JBoss 閰嶇疆銆傛瘡涓厤緗繀欏繪斁鍦ㄤ笉鍚岀殑瀛愮洰褰曘傚瓙鐩綍鐨勫悕瀛楄〃紺洪厤緗殑鍚嶅瓧銆?/span> JBoss 鍖呭惈 3 涓粯璁ょ殑閰嶇疆錛?/span> minimial 錛?/span> default 鍜?/span> all 錛屽湪浣犲畨瑁呮椂鍙互榪涜閫夋嫨銆?/span> |
server/all |
JBoss 鐨勫畬鍏ㄩ厤緗紝鍚姩鎵鏈夋湇鍔★紝鍖呮嫭闆嗙兢鍜?/span> IIOP 銆?/span> |
server/default |
JBoss 鐨勯粯璁ら厤緗傚湪娌℃湁鍦?/span> JBoss 鍛戒護琛屼腑鎸囧畾閰嶇疆鍚嶇О鏃朵嬌鐢ㄣ?/span> ( 鎴戜滑涓嬭澆鐨?/span> 4.2.1 鐗堟湰榛樿閲囩敤姝ら厤緗?/span> )聽 銆?/span> |
server/default/conf聽 |
JBoss 鐨勯厤緗枃浠躲?/span> |
server/default/data |
JBoss 鐨勬暟鎹簱鏂囦歡銆傛瘮濡傦紝宓屽叆鐨勬暟鎹簱錛屾垨鑰?/span> JBossMQ |
server/default /deploy |
JBoss 鐨勭儹閮ㄧ講鐩綍銆傛斁鍒拌繖閲岀殑浠諱綍鏂囦歡鎴栫洰褰曚細琚?/span> JBoss 鑷姩閮ㄧ講銆?/span> EJB 銆?/span> WAR 銆?/span> EAR 錛岀敋鑷蟲湇鍔°?/span> |
server/default /lib |
涓浜?/span> JAR 錛?/span> JBoss 鍦ㄥ惎鍔ㄧ壒瀹氶厤緗椂鍔犺澆浠栦滑銆?/span> (default 鍜?/span> minimial 閰嶇疆涔熷寘鍚繖涓拰涓嬮潰涓や釜鐩綍銆?/span> )聽 |
server/default/log |
JBoss 鐨勬棩蹇楁枃浠躲?/span> |
server/default/tmp |
JBoss 鐨勪復鏃舵枃浠躲?/span> |
涓夛紟聽聽聽聽聽聽聽聽聽聽聽聽 JBoss 鐨勯厤緗?/span>
1.聽聽聽聽聽聽 鏃ュ織鏂囦歡璁劇疆
鑻ラ渶瑕佷慨鏀?/span>JBoss榛樿鐨?/span>log4j璁劇疆錛屽彲淇敼JBoss瀹夎鐩綍"server"default"conf涓嬬殑jboss-log4j.xml鏂囦歡錛屽湪璇ユ枃浠朵腑鍙互鐪嬪埌錛?/span>log4j鐨勬棩蹇楄緭鍑哄湪JBoss瀹夎鐩綍"server"default"log涓嬬殑server.log鏂囦歡涓傚浜?/span>log4j鐨勮緗紝璇昏呭彲浠ュ湪緗戜笂鎼滅儲鏇村姞璇︾粏鐨勪俊鎭?/span>
2.聽聽聽聽聽聽 web 鏈嶅姟鐨勭鍙e彿鐨勪慨鏀?/span>
榪欑偣鍦ㄥ墠鏂囦腑鏈夋墍鎻愬強錛屽嵆淇敼JBoss瀹夎鐩綍"server"default"deploy"jboss-web.deployer涓嬬殑server.xml鏂囦歡錛屽唴瀹瑰涓嬶細
<Connector port="8080" address="${jboss.bind.address}"聽聽聽
聽聽聽聽聽聽聽聽 maxThreads="250" maxHttpHeaderSize="8192"
聽聽聽聽聽聽聽聽 emptySessionPath="true" protocol="HTTP/1.1"
聽聽聽聽聽聽聽聽 enableLookups="false" redirectPort="8443" acceptCount="100"
聽聽聽聽聽聽聽聽 connectionTimeout="20000" disableUploadTimeout="true" />
灝嗕笂闈㈢殑8080绔彛淇敼涓轟綘鎯寵鐨勭鍙e嵆鍙傞噸鏂板惎鍔?/span>JBoss鍚庤闂細http://localhost/:鏂拌緗殑绔彛錛屽彲鐪嬪埌JBoss鐨勬榪庣晫闈€?/span>
3.聽聽聽聽聽聽 JBoss 鐨勫畨鍏ㄨ緗?/span>
1錛?/strong> jmx-console 鐧誨綍鐨勭敤鎴峰悕鍜屽瘑鐮佽緗?/span>
榛樿鎯呭喌璁塊棶 http://localhost:8080/jmx-console 灝卞彲浠ユ祻瑙?/span>jboss鐨勯儴緗茬鐞嗙殑涓浜涗俊鎭紝涓嶉渶瑕佽緭鍏ョ敤鎴峰悕鍜屽瘑鐮侊紝浣跨敤璧鋒潵鏈夌偣瀹夊叏闅愭偅銆備笅闈㈡垜浠拡瀵規闂瀵?/span>jboss榪涜閰嶇疆錛屼嬌寰楄闂?/span>jmx-console涔熷繀欏昏鐭ラ亾鐢ㄦ埛鍚嶅拰瀵嗙爜鎵嶅彲榪涘幓璁塊棶銆傛楠ゅ涓嬶細
i) 鎵懼埌JBoss瀹夎鐩綍/server/default/deploy/jmx-console.war/WEB-INF/jboss-web.xml鏂囦歡錛屽幓鎺?/span><security-domain>java:/jaas/jmx-console</security-domain>鐨勬敞閲娿備慨鏀瑰悗鐨勮鏂囦歡鍐呭涓猴細
<jboss-web>
聽聽 <!-- Uncomment the security-domain to enable security. You will
聽聽聽聽聽 need to edit the htmladaptor login configuration to setup the
聽聽聽聽聽 login modules used to authentication users.-->
聽聽聽聽聽 <security-domain>java:/jaas/jmx-console</security-domain>
</jboss-web>
ii錛変慨鏀逛笌i錛変腑鐨?/span>jboss-web.xml鍚岀駭鐩綍涓嬬殑web.xml鏂囦歡錛屾煡鎵懼埌<security-constraint/>鑺傜偣錛屽幓鎺夊畠鐨勬敞閲婏紝淇敼鍚庤閮ㄥ垎鍐呭涓猴細
<!-- A security constraint that restricts access to the HTML JMX console
聽聽 to users with the role JBossAdmin. Edit the roles to what you want and
聽聽 uncomment the WEB-INF/jboss-web.xml/security-domain element to enable
聽聽 secured access to the HTML JMX console.-->
聽聽 <security-constraint>
聽聽聽聽 <web-resource-collection>
聽聽聽聽聽聽 <web-resource-name>HtmlAdaptor</web-resource-name>
聽聽聽聽聽聽 <description>An example security config that only allows users with the
聽聽聽聽聽聽聽聽 role JBossAdmin to access the HTML JMX console web application
聽聽聽聽聽聽 </description>
聽聽聽聽聽聽 <url-pattern>/*</url-pattern>
聽聽聽聽聽聽 <http-method>GET</http-method>
聽聽聽聽聽聽 <http-method>POST</http-method>
聽聽聽聽 </web-resource-collection>
聽聽聽聽 <auth-constraint>
聽聽聽聽聽聽 <role-name>JBossAdmin</role-name>
聽聽聽聽 </auth-constraint>
聽聽 </security-constraint>
聽聽 鍦ㄦ澶勫彲浠ョ湅鍑猴紝涓虹櫥褰曢厤緗簡瑙掕壊JBossAdmin銆?/span>
聽iii錛?/span>聽鍦ㄧ涓姝ヤ腑鐨?/span>jmx-console瀹夊叏鍩熷拰絎簩姝ヤ腑鐨勮繍琛岃鑹?/span>JBossAdmin閮芥槸鍦?/span>login-config.xml涓厤緗紝鎴戜滑鍦?/span>JBoss瀹夎鐩綍/server/default/config涓嬫壘鍒板畠銆傛煡鎵懼悕瀛椾負錛?/span>jmx-console鐨?/span>application-policy錛?/span>
<application-policy name = "jmx-console">
聽聽聽聽聽聽 <authentication>
聽聽聽聽聽聽聽聽聽 <login-module code="org.jboss.security.auth.spi.UsersRolesLoginModule"
聽聽聽聽聽聽聽聽聽聽聽聽 flag = "required">
聽聽聽聽聽聽聽聽聽聽 <module-option name="usersProperties">props/jmx-console-users.properties</module-option>
聽聽聽聽聽聽聽聽聽聽 <module-option name="rolesProperties">props/jmx-console-roles.properties</module-option>
聽聽聽聽聽聽聽聽聽 </login-module>
聽聽聽聽聽聽 </authentication>
聽聽聽 </application-policy>
鍦ㄦ澶勫彲浠ョ湅鍑猴紝鐧誨綍鐨勮鑹層佺敤鎴風瓑鐨勪俊鎭垎鍒湪props鐩綍涓嬬殑jmx-console-roles.properties鍜?/span>jmx-console-users.properties鏂囦歡涓緗紝鍒嗗埆鎵撳紑榪欎袱涓枃浠躲?/span>
鍏朵腑jmx-console-users.properties鏂囦歡鐨勫唴瀹瑰涓嬶細
# A sample users.properties file for use with the UsersRolesLoginModule
admin=admin
璇ユ枃浠跺畾涔夌殑鏍煎紡涓猴細鐢ㄦ埛鍚?/span>=瀵嗙爜錛屽湪璇ユ枃浠朵腑錛岄粯璁ゅ畾涔変簡涓涓敤鎴峰悕涓?/span>admin錛屽瘑鐮佷篃涓?/span>admin鐨勭敤鎴鳳紝璇昏呭彲灝嗗叾鏀規垚鎵闇鐨勭敤鎴峰悕鍜屽瘑鐮併?/span>
jmx-console-roles.properties鐨勫唴瀹瑰涓嬶細
# A sample roles.properties file for use with the UsersRolesLoginModule
admin=JBossAdmin, HttpInvoker
璇ユ枃浠跺畾涔夌殑鏍煎紡涓猴細鐢ㄦ埛鍚?/span>=瑙掕壊錛屽涓鑹蹭互鈥?/span>,鈥濋殧寮錛岃鏂囦歡榛樿涓?/span>admin鐢ㄦ埛瀹氫箟浜?/span>JBossAdmin鍜?/span>HttpInvoker榪欎袱涓鑹層?/span>
閰嶇疆瀹屾垚鍚庤鑰呭彲浠ラ氳繃璁塊棶錛?/span> http://localhost:8088/jmx-console/ 錛岃緭鍏?/span>jmx-console-roles.properties鏂囦歡涓畾涔夌殑鐢ㄦ埛鍚嶅拰瀵嗙爜錛岃闂?/span>jmx-console鐨勯〉闈€?/span>
2錛?/strong> web-console 鐧誨綍鐨勭敤鎴峰悕鍜屽瘑鐮佽緗?/span>
榛樿鎯呭喌涓嬶紝鐢ㄦ埛璁塊棶JBoss鐨?/span>web-console鏃訛紝涓嶉渶瑕佽緭鍏ョ敤鎴峰悕鍜屽瘑鐮侊紝涓轟簡瀹夊叏璧瘋錛屾垜浠氳繃淇敼閰嶇疆鏉ヤ負鍏跺姞涓婄敤鎴峰悕鍜屽瘑鐮併傛楠ゅ涓嬶細
i錛夋壘鍒?/span>JBoss瀹夎鐩綍"server"default"deploy"management"console-mgr.sar"web-console.war"WEB-INF"jboss-web.xml鏂囦歡錛屽幓鎺?/span><security-domain>java:/jaas/web-console</security-domain>鐨勬敞閲婏紝淇敼鍚庣殑鏂囦歡鍐呭涓猴細
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE jboss-web
聽聽聽 PUBLIC "-//JBoss//DTD Web Application 2.3V2//EN"
聽聽聽 "http://www.jboss.org/j2ee/dtd/jboss-web_3_2.dtd">
<jboss-web>
聽聽 <!-- Uncomment the security-domain to enable security. You will
聽聽 need to edit the htmladaptor login configuration to setup the
聽聽 login modules used to authentication users.-->
聽聽 <security-domain>java:/jaas/web-console</security-domain>
聽聽 <!-- The war depends on the -->
聽聽 <depends>jboss.admin:service=PluginManager</depends>
</jboss-web>
ii錛夋墦寮i錛変腑jboss-web.xml鍚岀洰褰曚笅鐨?/span>web.xml鏂囦歡錛屽幓鎺?/span><security-constraint>閮ㄥ垎鐨勬敞閲婏紝淇敼鍚庣殑璇ラ儴鍒嗗唴瀹逛負錛?/span>
<!-- A security constraint that restricts access to the HTML JMX console
聽聽 to users with the role JBossAdmin. Edit the roles to what you want and
聽聽 uncomment the WEB-INF/jboss-web.xml/security-domain element to enable
聽聽 secured access to the HTML JMX console.-->
聽聽 <security-constraint>
聽聽 <web-resource-collection>
聽聽 <web-resource-name>HtmlAdaptor</web-resource-name>
聽聽 <description>An example security config that only allows users with the
聽聽 role JBossAdmin to access the HTML JMX console web application
聽聽 </description>
聽聽 <url-pattern>/*</url-pattern>
聽聽 <http-method>GET</http-method>
聽聽 <http-method>POST</http-method>
聽聽 </web-resource-collection>
聽聽 <auth-constraint>
聽聽 <role-name>JBossAdmin</role-name>
聽聽 </auth-constraint>
聽聽 </security-constraint>
iii錛夋墦寮JBoss瀹夎鐩綍"server"default"conf涓嬬殑login-config.xml鏂囦歡錛屾悳绱?/span>web-console錛屽彲鎵懼埌濡備笅鍐呭錛?/span>
<application-policy name = "web-console">
聽聽聽聽聽聽 <authentication>
聽聽聽聽聽聽聽聽聽 <login-module code="org.jboss.security.auth.spi.UsersRolesLoginModule"
聽聽 聽聽聽聽聽聽聽聽聽聽flag = "required">
聽聽聽聽聽聽聽聽聽聽聽聽 <module-option name="usersProperties">web-console-users.properties</module-option>
聽聽聽聽聽聽聽聽聽聽聽聽 <module-option name="rolesProperties">web-console-roles.properties</module-option>
聽聽聽聽聽聽聽聽聽 </login-module>
聽聽聽聽聽聽 </authentication>
聽聽聽 </application-policy>
鍦ㄦ枃浠朵腑鍙互鐪嬪埌錛岃緗櫥褰?/span>web-console鐨勭敤鎴峰悕鍜岃鑹茬瓑淇℃伅鍒嗗埆鍦?/span>login-config.xml鏂囦歡鎵鍦ㄧ洰褰曚笅鐨?/span>web-console-users.properties鍜?/span>web-console-roles.properties鏂囦歡涓紝浣嗗洜涓鴻鐩綍涓嬫棤榪欎袱涓枃浠訛紝鎴戜滑鍦?/span>JBoss瀹夎鐩綍"server"default"conf"props鐩綍涓嬪緩绔嬭繖涓や釜鏂囦歡錛屾枃浠跺唴瀹瑰彲鍙傝冨湪鈥?/span>jmx-console鐧誨綍鐨勭敤鎴峰悕鍜屽瘑鐮佽緗?/span>涓殑涓や釜鐩稿簲鐨勯厤緗枃浠剁殑鍐呭錛?/span>web-console-users.properties鏂囦歡鐨勫唴瀹瑰涓嬶細
# A sample users.properties file for use with the UsersRolesLoginModule
admin=admin
web-console-roles.properties鏂囦歡鐨勫唴瀹瑰涓嬶細
# A sample roles.properties file for use with the UsersRolesLoginModule
admin=JBossAdmin,HttpInvoker
鍥犱負姝ゆ椂榪欎袱涓枃浠朵笉涓?/span>login-config.xml鍚岀洰褰曪紝鎵浠?/span>login-config.xml鏂囦歡闇榪涜灝戣淇敼錛屼慨鏀瑰悗鐨?/span><application-policy name = "web-console">鍏冪礌鐨勫唴瀹逛負錛?/span>
<application-policy name = "web-console">
聽聽聽聽聽聽 <authentication>
聽聽聽聽聽聽聽聽聽 <login-module code="org.jboss.security.auth.spi.UsersRolesLoginModule"
聽聽聽聽聽聽聽聽聽聽聽聽 flag = "required">
聽聽聽聽聽聽聽聽聽聽聽聽 <module-option name="usersProperties">props/web-console-users.properties</module-option>
聽聽聽聽聽聽聽聽聽聽聽聽 <module-option name="rolesProperties">props/web-console-roles.properties</module-option>
聽聽聽聽聽聽聽聽聽 </login-module>
聽聽聽聽聽聽 </authentication>
聽聽聽 </application-policy>
鍥涳紟聽聽聽聽聽聽聽聽聽聽聽聽 鍦?/span>MyEclipse 涓厤緗?/span>JBoss
絎旇呯殑MyEclipse鐗堟湰錛?/span>5.1.1 GA
JBoss鐗堟湰錛?/span>4.2.1 GA
JDK鐗堟湰錛?/span>1.5
榪涘叆Window-> Preferences-> MyEclipse -> Application Servers -> JBoss4錛岃繘琛屽涓嬭緗細
聽聽聽聽
閫夋嫨JBoss 4涓嬬殑JDK璁劇疆鎵鐢ㄧ殑JDK.
璁劇疆瀹屾垚鍚庯紝閮ㄧ講紼嬪簭鏃訛紝浼氬彂鐜板鍑?/span>JBoss 4閮ㄧ講鐨勯夋嫨錛屽涓嬪浘鎵紺猴細
鍚屾椂鍦?img height="25" alt="" src="http://m.tkk7.com/images/blogjava_net/amigoxie/21128/r_clip_image305.jpg" width="31" border="0" /> 涓睍寮錛屽彲鐪嬪埌JBoss 4鐨勫惎鍔ㄥ浘鏍囥?/span>
鏂規硶鏈夊緢澶氱錛?/p>
姣斿錛氬湪getRequestDispatcher("/jsp/jsptoserv/hello.jsp").forward(request, response);涔嬪墠淇敼
request鐨勭紪鐮侊紝閭d箞鍦╦sp/jsptoserv/hello.jsp涓緱鍒扮殑鍙傛暟鍊煎氨鏄埗瀹氱殑緙栫爜鐨勫瓧絎︺?/p>
鏈枃鎴戜滑浣跨敤Filter鏉ヤ慨鏀箁equest鐨勭紪鐮?br />
1)棣栧厛緙栧啓filter綾伙細
package myFilter;
import java.io.IOException;
import javax.servlet.*;
public class ChangeCharsetFilter implements Filter {
protected String encoding = null;/////瑕佸埗瀹氱殑緙栫爜錛屽湪web.xml涓厤緗?br />protected FilterConfig filterConfig = null;
public void destroy() {
this.encoding = null;
this.filterConfig = null;
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
if (request.getCharacterEncoding() == null){
聽String encoding = getEncoding();////寰楀埌鎸囧畾鐨勭紪鐮佸悕瀛?br />聽if (encoding != null)
聽request.setCharacterEncoding(encoding);////璁劇疆request鐨勭紪鐮?br />聽}
chain.doFilter(request, response);///鏈夋満浼氭墽琛屼笅涓涓猣ilter
}
聽public void init(FilterConfig filterConfig) throws ServletException {
聽this.filterConfig = filterConfig;
this.encoding = filterConfig.getInitParameter("encoding");///寰楀埌鍦╳eb.xml涓厤緗殑緙栫爜
聽}
聽protected String getEncoding() {
聽return (this.encoding);///寰楀埌鎸囧畾鐨勭紪鐮?br />}
}
2銆傜紪杈憌eb.xml鏂囦歡
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
? PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
? "<web-app>
<filter>
<filter-name>SetCharacterEncoding</filter-name>
聽<filter-class>myFilter.ChangeCharsetFilter </filter-class>
聽<init-param>
聽<param-name>encoding</param-name>
<param-value>GB2312</param-value>//////鎸囧畾緙栫爜涓篏B2312
</init-param>
聽</filter>
<filter-mapping>
聽<filter-name>SetCharacterEncoding</filter-name>
<url-pattern>/*</url-pattern>////////瀵逛簬鎵鏈夌殑request鏀瑰彉鍏剁紪鐮?br /></filter-mapping>
</web-app>
///
3銆傚啓涓涓猘.jsp
<%@ page contentType="text/html; charset=GB2312" %>
<html>
<head></head>
<body>
<%
String name=request.getParameter("name");///鏈潵榪欓噷寰楀埌瀛楃鏄痠so-8859-1緙栫爜鐨勶紝涓嶈兘鐩存帴
鍦–onsole涓緭鍑虹殑錛屼絾鏄幇鍦ㄦ敼鍙樹簡request鐨勭紪鐮佹柟寮忥紝姝ゆ椂鐨刵ame鐨勭紪鐮佹槸GB2312,鎵浠ヨ兘姝g‘鍦–onsole涓樉紺虹殑銆?/p>
System.out.println(name);
%>
<form action="a.jsp" method="post">
<input type="text" name="name">
<input type="submit">
</form>
<%=name%>
</body>
</html>
瀹岋紒
鍏充簬涓枃澶勭悊鐨勯棶棰樺氨鍐欒繖浜涗簡錛?/p>
import javax.sql.DataSource;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class DataStore {
聽
聽DataSource dataSource = null;
聽private static Connection conn = null;
聽private Statement stmt = null;
聽private boolean hadErrors = false;
聽
聽//construct
聽public DataStore(DataSource dataSource) throws Exception{
聽聽this.dataSource = dataSource;
聽聽conn = dataSource.getConnection();
聽聽stmt = conn.createStatement();
聽}
聽
聽//invoke transaction
聽public void beginTransaction() throws SQLException{
聽聽conn.setAutoCommit(false);
聽}
聽
聽//perform transaction
聽public void commitTransaction() throws SQLException{
聽聽//hadErrors = false
聽聽if(!hadErrors){
聽聽聽conn.commit();
聽聽}
聽聽else{聽 //hadErrors = true
聽聽聽conn.rollback();
聽聽聽hadErrors = false;
聽聽}
聽聽hadErrors = false;
聽聽conn.setAutoCommit(true);
聽}
聽
聽//mark error
聽public void ErrorOccur(){
聽聽hadErrors = true;
聽}
聽
聽//execute insert,delete,update
聽synchronized public void execute(String sql) throws SQLException{
聽聽if(stmt != null)
聽聽聽stmt.executeUpdate(sql);
聽聽else{
聽聽聽Log log = LogFactory.getLog("mylog");
聽聽聽log.error("fail to execute sql");
聽聽}
聽}
聽
聽//execute select
聽synchronized public ResultSet read(String sql) throws SQLException{
聽聽if(stmt != null){
聽聽聽ResultSet tmp = null;
聽聽聽tmp = stmt.executeQuery(sql);
聽聽聽return tmp;
聽聽}else{
聽聽聽return null;
聽聽}
聽}
聽
聽// count of result
聽synchronized public int readCount(String sql) throws SQLException{
聽聽int nCount = 0;
聽聽try{
聽聽聽if(stmt != null){
聽聽聽聽ResultSet tmp = null;
聽聽聽聽tmp = stmt.executeQuery(sql);
聽聽聽聽if(tmp != null && tmp.next()){
聽聽聽聽聽nCount = tmp.getInt(1);
聽聽聽聽}else{
聽聽聽聽聽nCount = 0;
聽聽聽聽}
聽聽聽}
聽聽}catch(SQLException e){
聽聽聽nCount = 0;
聽聽}
聽聽return nCount;
聽}
聽
聽// close db
聽synchronized public void stop(){
聽聽try{
聽聽聽if(conn != null){
聽聽聽聽conn.close();
聽聽聽聽stmt.close();
聽聽聽}
聽聽}catch(Exception e){
聽聽聽Log log = LogFactory.getLog("mylog");
聽聽聽log.error("fail to close db- DataStore.java");
聽聽}finally{
聽聽聽conn = null;
聽聽}
聽}
}
榪樺湪鐮旂┒錛岃矊浼糄CL鐨勯棶棰樿繕瀛樺湪銆?/p>
魛伜魛?/span>
1銆?/span>
棣栧厛紼嬪簭浠g爜鑾峰彇鍒濆鍖栫殑
JNDI
鐜騫朵笖璋冪敤
Context.lookup()
鏂規硶浠?/span>
JNDI
鏈嶅姟鎻愪緵鑰呴偅閲岃幏涓涓?/span>
DataSource
瀵硅薄
魛伜魛?/span>
2銆?/span>
涓棿灞?/span>
JNDI
鏈嶅姟鎻愪緵鑰呰繑鍥炰竴涓?/span>
DataSource
瀵硅薄緇欏綋鍓嶇殑
Java
搴旂敤紼嬪簭榪欎釜
DataSource
瀵硅薄浠h〃浜嗕腑闂村眰鏈嶅姟涓婄幇瀛樼殑緙撳啿鏁版嵁婧?span lang="EN-US">
魛伜魛兟犅?銆?/span>
搴旂敤紼嬪簭璋冪敤
DataSource
瀵硅薄鐨?/span>
getConnection()
鏂規硶
魛伜魛?/span>
4銆?/span>
褰?/span>
DataSource
瀵硅薄鐨?/span>
getConnection()
鏂規硶琚皟鐢ㄦ椂錛屼腑闂村眰鏈嶅姟鍣ㄥ皢鏌ヨ鏁版嵁搴?/span>
榪炴帴緙撳啿姹犱腑鏈夋病鏈?/span>
PooledConnection
鎺ュ彛鐨勫疄渚嬪璞°傝繖涓?/span>
PooledConnection
瀵硅薄灝嗚鐢ㄤ簬涓庢暟鎹簱寤虹珛鐗╃悊涓婄殑鏁版嵁搴撹繛鎺?span lang="EN-US">
魛伜魛?/span>
5銆?/span>
濡傛灉鍦ㄧ紦鍐叉睜涓懡涓簡涓涓?/span>
PooledCoonection
瀵硅薄閭d箞榪炴帴緙撳啿姹犲皢綆鍗曞湴鏇?/span>
鏂板唴閮ㄧ殑緙撳啿榪炴帴闃熷垪騫跺皢璇?/span>
PooledConnection
瀵硅薄榪斿洖銆傚鏋滃湪緙撳啿姹犲唴娌?/span>
鏈夋壘鍒扮幇鎴愮殑
PooledConnection
瀵硅薄錛岄偅涔?/span>
ConnectionPoolDataSource
鎺ュ彛灝嗕細琚?/span>
鐢ㄦ潵浜х敓涓涓柊鐨?/span>
PooledConnection
瀵硅薄騫跺皢瀹冭繑鍥炰互渚垮簲鐢ㄧ▼搴忎嬌鐢?span lang="EN-US">
魛伜魛?/span>
6銆?/span>
涓棿灞傛湇鍔″櫒璋冪敤
PooledConnection
瀵硅薄鐨?/span>
getConnection()
鏂規硶浠ヤ究榪旇繕涓涓?/span>
java.sql.Connection
瀵硅薄緇欏綋鍓嶇殑
Java
搴旂敤紼嬪簭
魛伜魛?/span>
7銆?/span>
褰撲腑闂村眰鏈嶅姟鍣ㄨ皟鐢?/span>
PooledConnection
瀵硅薄鐨?/span>
getConnection()
鏂規硶鏃訛紝
JDBC
鏁版嵁
搴撻┍鍔ㄧ▼搴忓皢浼氬垱寤轟竴涓?/span>
Connection
瀵硅薄騫朵笖鎶婂畠榪斿洖涓棿灞傛湇鍔″櫒
魛伜魛?/span>
8銆?/span>
涓棿灞傛湇鍔″櫒灝?/span>
Connection
瀵硅薄榪斿洖緇欏簲鐢ㄧ▼搴?/span>
Java
搴旂敤紼嬪簭錛屽彲浠ヨ涓鴻繖涓?/span>
Connection
瀵硅薄鏄竴涓櫘閫氱殑
JDBC Connection
瀵硅薄浣跨敤瀹冨彲浠ュ拰鏁版嵁搴撳緩绔嬨備簨
瀹炰笂鐨勮繛鎺ヤ笌鏁版嵁搴撳紩鎿庝駭鐢熶氦浜掓搷浣?span lang="EN-US">
魛伜魛?/span>
9銆?/span>
褰撳簲鐢ㄧ▼搴忎笉闇瑕佷嬌鐢?/span>
Connection
瀵硅薄鏃訛紝鍙互璋冪敤
Connection
鎺ュ彛鐨?/span>
close()
鏂?/span>
娉曘?font color="#ff3300">璇鋒敞鎰忚繖縐嶆儏鍐典笅
close()
鏂規硶騫舵病鏈夊叧闂簨瀹炰笂鐨勬暟鎹簱榪炴帴錛屼粎浠呮槸閲?/span>
鏀句簡琚簲鐢ㄧ▼搴忓崰鐢ㄧ殑鏁版嵁搴撹繛鎺ワ紝騫跺皢瀹冭繕緇欐暟鎹簱榪炴帴緙撳啿姹狅紝鏁版嵁搴撹繛鎺?/span>
緙撳啿姹犱細鑷姩灝嗚繖涓暟鎹簱榪炴帴浜ょ粰璇鋒眰闃熷垪涓笅涓涓殑搴旂敤紼嬪簭浣跨敤銆?/span>
]]>
閰嶇疆tomcat
榪欎竴姝ョ殑鐩殑灝辨槸鍛婅瘔tomcat濡備綍榪炴帴鏁版嵁搴?br />鍙互鍒嗕負涓ょ澶х殑綾誨瀷錛屾瘡縐嶇被鍨嬪張鏈夊緢澶氱閰嶇疆鏂瑰紡
閰嶇疆綾誨瀷涓錛?br />(鐩存帴閰嶇疆鐨勭被鍨嬶紝榪欑鏂瑰紡鏈綆鍗?
鏂規硶涓錛?br />鐩存帴鍦╰omcat_home/conf/localhost/涓嬪緩绔嬩竴涓獂ml鏂囦歡錛屾枃浠跺悕鏄?lt;yourAppName>.xml
渚嬪鎴戠殑宸ョ▼鍚嶅彨jndi錛屽搴旂殑鍚嶅瓧鍙玧dni.xml
鍐呭濡備笅:
璇存槑錛氳繖縐嶉厤緗渶瑕佸憡璇塼omcat resource鐨勫唴瀹癸紝resource搴旂敤浜庝粈涔堝湴鏂?br />絎竴縐嶆柟娉曢氳繃鏂囦歡鍚嶇煡閬撲簡app鐨刵ame
絎簩縐嶆柟寮忔湰韜氨鍦╝pp鍐呴儴錛屾墍浠ame鑲畾鐭ラ亾
涓ょ鏂瑰紡閮借鏀懼湪context涓?/p>
閰嶇疆綾誨瀷浜岋細
(閰嶇疆鍏ㄥ眬resource錛岀劧鍚庨氳繃resourcelink鏉ユ槧灝?
姝ラ涓錛氶厤緗叏灞resource錛堣繖涓姝ュ浜庢墍鏈夌殑閰嶇疆閮芥槸涓鏍風殑錛?br />鎵撳紑tomcat_home/conf/server.xml鍔犲叆
姝ラ浜岋細鏄犲皠
(鏄犲皠鍙互閰嶇疆鍦ㄥ涓湴鏂癸紝涔熷氨鏈夊涓厤緗柟娉曪細)
鏂規硶涓錛氾紙瀵規瘮綾誨瀷涓鐨勯厤緗悊瑙o級
鐩存帴鍦╰omcat_home/conf/localhost/涓嬪緩绔嬩竴涓獂ml鏂囦歡錛屾枃浠跺悕鏄?lt;yourAppName>.xml
渚嬪鎴戠殑宸ョ▼鍚嶅彨jndi錛屽搴旂殑鍚嶅瓧鍙玧dni.xml鍔犲叆濡備笅鍐呭
鏂規硶涓夛細(涓婅竟涓ょ鏂規硶閮芥槸鎶婂叏灞鐨剅esource 鏄犲皠緇檍ndi榪欎釜web搴旂敤錛岀涓夌鏂規硶灝辨槸鎶婅繖涓?br />鍏ㄥ眬鐨剅esource鐩存帴鍏紑緇欐墍鏈夌殑搴旂敤)
鍦╰omcat_home/conf/context.xml鐨?lt;Context></context>涔嬮棿鍔犲叆
<ResourceLink global="jdbc/test" name="jdbc/test" type="javax.sql.DataSource"/>
榪愯嫻嬭瘯錛?br />鎵撳紑ie錛岃緭鍏?a href="http://localhost:8080/jndi/index.jsp">http://localhost:8080/jndi/index.jsp
甯歌閿欒錛?br />1錛孨ame jdbc is not bound in this Context
2錛孋annot create JDBC driver of class '' for connect URL 'null' conf localhost
鍘熷洜錛?br />澶у鏁版槸鍥犱負閰嶇疆浜嗗叏灞鐨剅esource錛屼絾娌℃湁link閫犳垚鐨勩?br />瑙e喅錛?br />鍔犲叆link灝辮浜嗭紝link鐨勬柟寮忚綾誨瀷浜岀殑涓夌鏂規硶銆?/p>
鍒嗘瀽錛?br />鐪嬪埌涓婅竟榪欎箞澶氭柟娉曪紝鏄惁鎰熻鐪艱姳緙貢錛屽叾瀹炰笉瑕佹璁伴厤緗紝鎸夌収鍘熺悊鍒嗘瀽涓涓嬪氨濂戒簡銆?br />浣犻渶瑕佺殑鏄憡璇塼omcat鍝釜搴旂敤濡備綍榪炴帴鏁版嵁搴撱?/p>
綾誨瀷涓鐨勬柟寮忓搴斾竴涓簲鐢ㄥ崟鐙嬌鐢ㄨ繖涓厤緗殑鎯呭喌
灝辨槸鐩存帴鍛婅瘔tomcat"搴旂敤鍚?聽 "榪炴帴鏁版嵁搴撻渶瑕佺殑鍙傛暟"
綾誨瀷浜岀殑鏂瑰紡瀵瑰簲澶氫釜搴旂敤鍏變韓涓涓厤緗殑鎯呭喌
榪欐牱鍏堥厤緗畇erver.xml鍛婅瘔tomcat鍏ㄥ眬鑼冨洿鐨?榪炴帴鏁版嵁搴撻渶瑕佺殑鍙傛暟"
鐒跺悗鏄犲皠錛屾槧灝勭殑鏃跺?br />1,濡傛灉涓嶇煡閬?app name(搴旂敤鍚?"灝卞彧闇瑕侀氳繃鏂囦歡鍚嶆潵浼犻掕繖涓俊鎭?br />2,濡傛灉"app name"閮界煡閬撳氨鍙渶瑕佸姞鍏ユ槧灝勭殑鍐呭
3,濡傛灉瑕侀厤緗垚鍏ㄥ眬鍏敤鐨勶紝灝變笉闇瑕?app name"錛屾湰韜斁鍦╰omcat鐨刢ontext.xml涓?/p>
鏈鍚庡啀嬈℃彁閱掍竴涓嬶細鎵鏈夌殑閰嶇疆蹇呴』鏀懼湪<context></context>涔嬮棿
銆銆涔熻浣犲惉璇磋繃Hibernate鐨勫ぇ鍚嶏紝浣嗗彲鑳戒竴鐩翠笉浜嗚В瀹冿紝涔熻浣犱竴鐩存復鏈涗嬌鐢ㄥ畠榪涜寮鍙戯紝閭d箞鏈枃姝f槸浣犳墍闇瑕佺殑錛佸湪鏈枃涓紝鎴戝悜澶у閲嶇偣浠嬬粛Hibernate鐨勬牳蹇傾PI璋冪敤搴擄紝騫惰瑙d竴涓嬪畠鐨勫熀鏈厤緗?
銆銆鐪嬪畬鏈枃鍚庯紝鎴戠浉淇′綘瀵逛粈涔堟槸ORM錛堝鍍?鍏崇郴鏄犲皠錛変互鍙婂畠鐨勪紭鐐逛細鏈変竴涓繁鍒葷殑璁よ瘑錛屾垜浠厛閫氳繃涓涓畝鍗曠殑渚嬪瓙寮濮嬫潵灞曠幇瀹冪殑濞佸姏銆?
銆銆姝e涓浜涗紶緇熺殑緇忓吀璁$畻鏈烘枃绔犲ぇ閮戒細閫氳繃涓涓渉ello,world鈥濈殑渚嬪瓙寮濮嬭瑙d竴鏍鳳紝鎴戜滑涔熶笉渚嬪錛屾垜浠篃灝嗕粠涓涓浉瀵圭畝鍗曠殑渚嬪瓙鏉ラ槓榪癏ibernate鐨勫紑鍙戞柟娉曪紝浣嗗鏋滆鐪熸闃愯堪Hibernate鐨勪竴浜涢噸瑕佹濇兂錛屼粎浠呴潬鍦ㄥ睆騫曚笂鎵撳嵃涓浜涘瓧絎︽槸榪滆繙涓嶅鐨勶紝鍦ㄦ垜浠殑紺轟緥紼嬪簭涓紝鎴戜滑灝嗗垱寤轟竴浜涘璞★紝騫跺皢鍏朵繚瀛樺湪鏁版嵁搴撲腑錛岀劧鍚庡瀹冧滑榪涜鏇存柊鍜屾煡璇€?
銆銆闃呰瀵艱埅
銆銆鈥淗ello World鈥濃淗ello world鈥濈ず渚嬬▼搴忚鎮ㄥHibernate鏈変竴涓畝鍗曠殑璁よ瘑銆?
銆銆鐞嗚ВHibernate鐨勬灦鏋勪粙緇岺ibernate鎺ュ彛鐨勪富瑕佸姛鑳姐?
銆銆鏍稿績鎺ュ彛Hibernate鏈?涓牳蹇冩帴鍙o紝閫氳繃榪欏嚑涓帴鍙e紑鍙戜漢鍛樺彲浠ュ瓨鍌ㄥ拰鑾峰緱鎸佷箙瀵硅薄錛屽茍涓旇兘澶熻繘琛屼簨鍔℃帶鍒?
銆銆涓涓噸瑕佺殑鏈錛歍ypeType鏄疕ibernate鍙戞槑鑰呭彂鏄庣殑涓涓湳璇紝瀹冨湪鏁翠釜鏋勬灦涓槸涓涓潪甯稿熀紜銆佹湁鐫寮哄ぇ鍔熻兘鐨勫厓绱狅紝涓涓猅ype瀵硅薄鑳藉皢涓涓狫ava綾誨瀷鏄犲皠鍒版暟鎹簱涓竴涓〃鐨勫瓧孌典腑鍘匯?
銆銆絳栫暐鎺ュ彛Hibernate涓庢煇浜涘叾瀹冨紑婧愯蔣浠朵笉鍚岀殑榪樻湁涓鐐光曗曢珮搴︾殑鍙墿灞曟э紝榪欓氳繃瀹冪殑鍐呯疆絳栫暐鏈哄埗鏉ュ疄鐜般?
銆銆鍩虹閰嶇疆Hibernate鍙互閰嶇疆鎴愬彲鍦ㄤ換浣旿ava鐜涓繍琛岋紝涓鑸鏉ワ紝瀹冮氬父琚敤鍦?錛?灞傜殑C/S妯″紡鐨勯」鐩腑錛屽茍琚儴緗插湪鏈嶅姟绔?
銆銆鍒涘緩涓涓猄essionFactory瀵硅薄瑕佸垱寤轟竴涓猄essionFactory瀵硅薄錛屽繀欏誨湪Hibernate鍒濆鍖栨椂鍒涘緩涓涓狢onfiguration綾葷殑瀹炰緥錛屽茍灝嗗凡鍐欏ソ鐨勬槧灝勬枃浠朵氦鐢卞畠澶勭悊銆?
銆銆鈥淗ello World鈥?
銆銆Hibernate搴旂敤紼嬪簭瀹氫箟浜嗕竴浜涙寔涔呯被錛屽茍涓斿畾涔変簡榪欎簺綾諱笌鏁版嵁搴撹〃鏍肩殑鏄犲皠鍏崇郴銆傚湪鎴戜滑榪欎釜鈥淗ello world鈥濈ず渚嬬▼搴忎腑鍖呭惈浜嗕竴涓被鍜屼竴涓槧灝勬枃浠躲傝鎴戜滑鐪嬬湅榪欎釜綆鍗曠殑鎸佷箙綾誨寘鍚湁涓浜涗粈涔堬紵鏄犲皠鏂囦歡鏄庢牱瀹氫箟鐨勶紵鍙﹀錛屾垜浠鎬庢牱鐢℉ibernate鏉ユ搷浣滆繖涓寔涔呯被銆?
銆銆鎴戜滑榪欎釜綆鍗曠ず渚嬬▼搴忕殑鐩殑鏄皢涓浜涙寔涔呯被瀛樺偍鍦ㄦ暟鎹簱涓紝鐒跺悗浠庢暟鎹簱鍙栧嚭鏉ワ紝騫跺皢鍏朵俊鎭鏂囨樉紺虹粰鐢ㄦ埛銆傚叾涓璏essage姝f槸涓涓畝鍗曠殑鎸佷箙綾伙細錛屽畠鍖呭惈鎴戜滑瑕佹樉紺虹殑淇℃伅錛屽叾婧愪唬鐮佸涓嬶細
銆銆鍒楄〃1銆Message.Java銆涓涓畝鍗曠殑鎸佷箙綾?
銆銆package hello;
銆銆public class Message {
銆銆private Long id;
銆銆private String text;
銆銆private Message nextMessage;
銆銆private Message() {}
銆銆public Message(String text) {
銆銆this.text = text;
銆銆}
銆銆public Long getId() {
銆銆return id;
銆銆}
銆銆private void setId(Long id) {
銆銆this.id = id;
銆銆}
銆銆public String getText() {
銆銆return text;
銆銆}
銆銆public void setText(String text) {
銆銆this.text = text;
銆銆}
銆銆public Message getNextMessage() {
銆銆return nextMessage;
銆銆}
銆銆public void setNextMessage(Message nextMessage) {
銆銆this.nextMessage = nextMessage;
銆銆}
銆銆}
銆銆Message綾繪湁涓変釜灞炴э細Message鐨刬d 銆佹秷鎭鏂囥佷互鍙婁竴涓寚鍚戜笅涓鏉℃秷鎭殑鎸囬拡銆傚叾涓璱d灞炴ц鎴戜滑鐨勫簲鐢ㄧ▼搴忚兘澶熷敮涓鐨勮瘑鍒繖鏉℃秷鎭紝閫氬父瀹冪瓑鍚屼簬鏁版嵁搴撲腑鐨勪富閿紝濡傛灉澶氫釜Message綾葷殑瀹炰緥瀵硅薄鎷ユ湁鐩稿悓鐨刬d錛岄偅瀹冧滑浠h〃鏁版嵁搴撴煇涓〃鐨勫悓涓涓褰曘傚湪榪欓噷鎴戜滑閫夋嫨浜嗛暱鏁村瀷浣滀負鎴戜滑鐨刬d鍊鹼紝浣嗚繖涓嶆槸蹇呴渶鐨勩侶ibernate鍏佽鎴戜滑浣跨敤浠繪剰鐨勭被鍨嬫潵浣滀負瀵硅薄鐨刬d鍊鹼紝鍦ㄥ悗闈㈡垜浠細瀵規浣滆緇嗘弿榪般?
銆銆浣犲彲鑳芥敞鎰忓埌Message綾葷殑浠g爜綾諱技浜嶫avaBean鐨勪唬鐮侀鏍鹼紝騫朵笖瀹冩湁涓涓病鏈夊弬鏁扮殑鏋勯犲嚱鏁幫紝鍦ㄦ垜浠互鍚庣殑浠g爜涓垜灝嗙戶緇嬌鐢ㄨ繖縐嶉鏍兼潵緙栧啓鎸佷箙綾葷殑浠g爜銆?
銆銆Hibernate浼氳嚜鍔ㄧ鐞哅essage綾葷殑瀹炰緥錛屽茍閫氳繃鍐呴儴鏈哄埗浣垮叾鎸佷箙鍖栵紝浣嗗疄闄呬笂Message瀵硅薄騫舵病鏈夊疄鐜頒換浣曞叧浜嶩ibernate鐨勭被鎴栨帴鍙o紝鍥犳鎴戜滑涔熷彲浠ュ皢瀹冧綔涓轟竴涓櫘閫氱殑Java綾繪潵浣跨敤錛?
銆銆Message message = new Message("Hello World");
銆銆System.out.println( message.getText() );
銆銆浠ヤ笂榪欐浠g爜姝f槸鎴戜滑鎵鏈熸湜鐨勭粨鏋滐細瀹冩墦鍗扳渉ello world鈥濆埌灞忓箷涓娿備絾榪欏茍涓嶆槸鎴戜滑鐨勬渶緇堢洰鏍囷紱瀹為檯涓奌ibernate涓庤濡侲JB瀹瑰櫒榪欐牱鐨勭幆澧冨湪鎸佷箙灞傚疄鐜扮殑鏂瑰紡涓婃湁寰堝ぇ鐨勪笉鍚屻傛垜浠殑鎸佷箙綾?Message綾?鍙互鐢ㄥ湪涓庡鍣ㄦ棤鍏崇殑鐜涓紝涓嶅儚EJB蹇呴』瑕佹湁EJB瀹瑰櫒鎵嶈兘鎵ц銆備負浜嗚兘鏇存竻妤氬湴琛ㄧ幇榪欑偣錛屼互涓嬩唬鐮佸皢鎴戜滑鐨勪竴涓柊娑堟伅淇濆瓨鍒版暟鎹簱涓幓錛?
銆銆Session session = getSessionFactory().openSession();
銆銆Transaction tx = session.beginTransaction();
銆銆Message message = new Message("Hello World");
銆銆session.save(message);
銆銆tx.commit();
銆銆session.close();
銆銆浠ヤ笂榪欐浠g爜璋冪敤浜咹ibernate鐨凷ession鍜孴ransaction鎺ュ彛錛堝叧浜巊etSessionFactory()鏂規硶鎴戜滑灝嗕細椹笂鎻愬埌錛夈傚畠鐩稿綋浜庢垜浠墽琛屼簡浠ヤ笅SQL璇彞錛?
銆銆insert into MESSAGES (MESSAGE_ID, MESSAGE_TEXT, NEXT_MESSAGE_ID)
銆銆values (1, 'Hello World', null)
銆銆鍦ㄤ互涓婄殑SQL璇彞涓紝MESSAGE_ID瀛楁鍒板簳琚垵濮嬪寲鎴愪簡浠涔堝煎憿錛熺敱浜庢垜浠茍娌℃湁鍦ㄥ厛鍓嶇殑浠g爜涓負message瀵硅薄鐨刬d灞炴ц祴涓庡垵濮嬪鹼紝閭e畠鏄惁涓簄ull鍛紵瀹為檯涓奌ibernate瀵筰d灞炴т綔浜嗙壒孌婂鐞嗭細鐢變簬瀹冩槸涓涓璞$殑鍞竴鏍囪瘑錛屽洜姝ゅ綋鎴戜滑榪涜save()璋冪敤鏃訛紝Hibernate浼氫負瀹冭嚜鍔ㄨ祴浜堜竴涓敮涓鐨勫鹼紙鎴戜滑灝嗗湪鍚庨潰鍐呭涓榪板畠鏄浣曠敓鎴愯繖涓肩殑錛夈?
銆銆鎴戜滑鍋囪浣犲凡緇忓湪鏁版嵁搴撲腑鍒涘緩浜嗕竴涓悕涓篗ESSAGE鐨勮〃錛岄偅涔堟棦鐒跺墠闈㈣繖孌典唬鐮佽鎴戜滑灝哅essage瀵硅薄瀛樺叆浜嗘暟鎹簱涓紝閭d箞鐜板湪鎴戜滑灝辮灝嗗畠浠竴涓鍙栧嚭鏉ャ備笅闈㈣繖孌典唬鐮佸皢鎸夌収瀛楁瘝欏哄簭錛屽皢鏁版嵁搴撲腑鐨勬墍鏈塎essage瀵硅薄鍙栧嚭鏉ワ紝騫跺皢瀹冧滑鐨勬秷鎭鏂囨墦鍗板埌灞忓箷涓婏細
銆銆Session newSession = getSessionFactory().openSession();
銆銆Transaction newTransaction = newSession.beginTransaction();
銆銆List messages =newSession.find("from Message as m order by m.text asc");
銆銆System.out.println( messages.size() + " message(s) found:" );
銆銆for ( Iterator iter = messages.iterator(); iter.hasNext(); ) {
銆銆Message message = (Message) iter.next();
銆銆System.out.println( message.getText() );
銆銆}
銆銆newTransaction.commit();
銆銆newSession.close();
銆銆鍦ㄤ互涓婅繖孌典唬鐮佷腑錛屼綘鍙兘琚玣ind()鏂規硶鐨勮繖涓弬鏁板洶鎵扮潃錛?from Message as m order by m.text asc"錛屽叾瀹炲畠鏄疕ibernate鑷繁瀹氫箟鐨勬煡璇㈣璦錛屽叏縐板彨Hibernate Query Language(HQL)銆傞氫織鍦拌HQL涓嶴QL鐨勫叧緋誨樊涓嶅灝辨槸鏂硅█涓庢櫘閫氳瘽涔嬮棿鐨勫叧緋伙紝鍜嬩竴鐪嬶紝浣犱細瑙夊緱瀹冩湁鐐圭被浼間簬SQL璇彞銆傚叾瀹炲湪find()璋冪敤鏃訛紝Hibernate浼氬皢榪欐HQL璇█緲昏瘧鎴愬涓嬬殑SQL璇彞錛?
銆銆select m.MESSAGE_ID, m.MESSAGE_TEXT, m.NEXT_MESSAGE_ID
銆銆from MESSAGES m
銆銆order by m.MESSAGE_TEXT asc
銆銆浠ヤ笅灝辨槸榪愯緇撴灉錛?
銆銆1 message(s) found:
銆銆Hello World
銆銆濡傛灉浣犱互鍓嶆病鏈塐RM錛堝璞★紞鍏崇郴鏄犲皠錛夌殑寮鍙戠粡楠岋紝閭d綘鍙兘鎯沖湪浠g爜鐨勬煇涓湴鏂瑰幓瀵繪壘榪欐SQL璇彞錛屼絾鍦℉ibernate涓綘鍙兘浼氬け鏈涳細瀹冩牴鏈笉瀛樺湪錛佹墍鏈夊氨SQL璇彞閮芥槸Hibernate鍔ㄦ佺敓鎴愮殑銆?
銆銆涔熻浣犱細瑙夊緱榪樼己鐐逛粈涔堬紝瀵癸紒浠呭嚟浠ヤ笂浠g爜Hibernate鏄棤娉曞皢鎴戜滑鐨凪essage綾繪寔涔呭寲鐨勩傛垜浠繕闇瑕佷竴浜涙洿澶氱殑淇℃伅錛岃繖灝辨槸鏄犲皠瀹氫箟琛紒榪欎釜琛ㄥ湪Hibernate涓槸浠ML鏍煎紡鏉ヤ綋鐜扮殑錛屽畠瀹氫箟浜哅essage綾葷殑灞炴ф槸鎬庢牱涓庢暟鎹簱涓殑MESSAGES琛ㄧ殑瀛楁榪涜涓涓瀵瑰簲鐨勶紝鍒楄〃2鏄繖涓ず渚嬬▼搴忕殑鏄犲皠閰嶇疆鏂囦歡娓呭崟錛?
銆銆鍒楄〃2錛氱ず渚嬬▼搴忕殑瀵硅薄錛嶅叧緋繪槧灝勮〃
銆銆錛?xml version="1.0"?錛?
銆銆錛?DOCTYPE hibernate-mapping PUBLIC
銆銆"-//Hibernate/Hibernate Mapping DTD//EN"
銆銆"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"錛?
銆銆錛渉ibernate-mapping錛?
銆銆錛渃lass name="hello.Message" table="MESSAGES"錛?
銆銆錛渋d name="id" column="MESSAGE_ID"錛?
銆銆錛済enerator class="increment"/錛?
銆銆錛?id錛?
銆銆錛減roperty name="text" column="MESSAGE_TEXT"/錛?
銆銆錛渕any-to-one name="nextMessage" cascade="all" column="NEXT_MESSAGE_ID"/錛?
銆銆錛?class錛?
銆銆錛?hibernate-mapping錛?
銆銆浠ヤ笂榪欎釜鏂囨。鍛婅瘔Hibernate鎬庢牱灝哅essage綾繪槧灝勫埌MESSAGES琛ㄤ腑錛屽叾涓璏essage綾葷殑id灞炴т笌琛ㄧ殑MESSAGE_ID瀛楁瀵瑰簲錛宼ext灞炴т笌琛ㄧ殑MESSAGE_TEXT瀛楁瀵瑰簲錛宯extMessage灞炴ф槸涓涓瀵逛竴鐨勫叧緋伙紝瀹冧笌琛ㄤ腑鐨凬EXT_MESSAGE_ID鐩稿搴斻?
銆銆鐩稿浜庢湁浜涘紑婧愰」鐩潵璇達紝Hibernate鐨勯厤緗枃浠跺叾瀹炴槸寰堝鏄撶悊瑙g殑銆備綘鍙互杞繪澗鍦頒慨鏀逛笌緇存姢瀹冦傚彧瑕佷綘瀹氫箟濂戒簡鎸佷箙綾諱笌鏁版嵁搴撲腑琛ㄥ瓧孌電殑瀵瑰簲鍏崇郴灝辮浜嗭紝Hibernate浼氳嚜鍔ㄥ府浣犵敓鎴怱QL璇彞鏉ュMessage瀵硅薄榪涜鎻掑叆銆佹洿鏂般佸垹闄ゃ佹煡鎵懼伐浣滐紝浣犲彲浠ヤ笉鍐欎竴鍙QL璇彞錛岀敋鑷充笉闇瑕佹噦寰桽QL璇█錛?
銆銆鐜板湪璁╂垜浠仛涓涓柊鐨勮瘯楠岋紝鎴戜滑鍏堝彇鍑虹涓涓狹essage瀵硅薄錛岀劧鍚庝慨鏀瑰畠鐨勬秷鎭鏂囷紝鏈鍚庢垜浠啀鐢熸垚涓涓柊鐨凪essage瀵硅薄錛屽茍灝嗗畠浣滀負絎竴涓狹essage瀵硅薄鐨勪笅涓鏉℃秷鎭紝鍏朵唬鐮佸涓嬶細
銆銆鍒楄〃3銆鏇存柊涓鏉℃秷鎭?
銆銆Session session = getSessionFactory().openSession();
銆銆Transaction tx = session.beginTransaction();
銆銆// 1 is the generated id of the first message
銆銆Message message =(Message) session.load( Message.class, new Long(1) );
銆銆message.setText("Greetings Earthling");
銆銆Message nextMessage = new Message("Take me to your leader (please)");
銆銆message.setNextMessage( nextMessage );
銆銆tx.commit();
銆銆session.close();
銆銆浠ヤ笂榪欐浠g爜鍦ㄨ皟鐢ㄦ椂錛孒ibernate鍐呴儴鑷姩鐢熸垚濡備笅鐨凷QL璇彞錛?
銆銆select m.MESSAGE_ID, m.MESSAGE_TEXT, m.NEXT_MESSAGE_ID
銆銆from MESSAGES m
銆銆where m.MESSAGE_ID = 1
銆銆insert into MESSAGES (MESSAGE_ID, MESSAGE_TEXT, NEXT_MESSAGE_ID)
銆銆values (2, 'Take me to your leader (please)', null)
銆銆update MESSAGES
銆銆set MESSAGE_TEXT = 'Greetings Earthling', NEXT_MESSAGE_ID = 2
銆銆where MESSAGE_ID = 1
銆銆褰撶涓涓狹essage瀵硅薄鐨則ext灞炴у拰nextMessage琚▼搴忎慨鏀規椂錛岃娉ㄦ剰Hibernate鏄浣曟嫻嬪埌榪欑鍙樺寲錛屽茍濡備綍鍦ㄦ暟鎹簱涓嚜鍔ㄥ瀹冩洿鏂扮殑銆傝繖瀹為檯涓婃槸Hibernate鐨勪竴涓緢鏈変環鍊肩殑鐗硅壊錛屾垜浠妸瀹冪О涓衡滆嚜鍔ㄨ剰鏁版嵁媯嫻嬧濓紝Hibernate鐨勮繖涓壒鑹蹭嬌寰楀綋鎴戜滑淇敼涓涓寔涔呭璞$殑灞炴у悗錛屼笉蹇呮樉寮忓湴閫氱煡Hibernate鍘誨皢瀹冨湪鏁版嵁搴撲腑榪涜鏇存柊銆傚悓鏍風殑錛屽綋絎竴涓狹essage瀵硅薄璋冪敤setNextMessage()鏂規硶灝嗙浜屼釜Message瀵硅薄浣滀負瀹冪殑涓嬩竴鏉℃秷鎭殑寮曠敤鏃訛紝絎簩鏉℃秷鎭細鏃犻渶璋冪敤save()鏂規硶錛屼究鍙互鑷姩鍦頒繚瀛樺湪鏁版嵁搴撲腑銆傝繖縐嶇壒鑹茶縐頒負鈥滅駭鑱斾繚瀛樷濓紝瀹冧篃鍏嶅幓浜嗘垜浠樉寮忓湴瀵圭浜屼釜Message瀵硅薄璋冪敤save()鏂規硶涔嬭嫤銆?
銆銆濡傛灉鎴戜滑鍐嶈繍琛屽厛鍓嶇殑閭f灝嗘暟鎹簱涓墍鏈夌殑Message瀵硅薄閮芥墦鍗板嚭鏉ョ殑浠g爜錛岄偅瀹冪殑榪愯緇撴灉濡備笅錛?
銆銆2 message(s) found:
銆銆Greetings Earthling
銆銆Take me to your leader (please)
銆銆鈥淗ello world鈥濈ず渚嬬▼搴忕幇鍦ㄤ粙緇嶅畬姣曘傛垜浠葷畻瀵笻ibernate鏈変簡涓涓畝鍗曠殑璁よ瘑錛屼笅闈㈡垜浠皢鍥炶繃澶存潵錛屽Hibernate鐨勪富瑕丄PI璋冪敤浣滀竴涓嬬畝瑕佺殑浠嬬粛錛?
銆銆
銆銆鐞嗚ВHibernate鐨勬灦鏋?/strong>
銆銆褰撲綘鎯崇敤Hibernate寮鍙戣嚜宸辯殑鍩轟簬鎸佷箙灞傜殑搴旂敤鏃訛紝絎竴浠朵簨鎯呭簲褰撴槸鐔熸倝瀹冪殑緙栫▼鎺ュ彛銆侶ibernate鐨凙PI鎺ュ彛璁捐寰楀敖閲忕畝媧佹槑浜嗭紝浠ユ柟渚垮紑鍙戜漢鍛樸傜劧鑰屽疄闄呬笂鐢變簬ORM鐨勫鏉傛э紝瀹冪殑API涓鑸兘涓嶅彲鑳借璁″緱寰堢畝鍗曘備絾鏄埆鎷呭績錛屼綘娌℃湁蹇呰涓涓嬪瓙浜嗚В鎵鏈夌殑Hibernate鐨凙PI鎺ュ彛銆?br />
銆銆鎴戜滑灝嗗簲鐢ㄥ眰鏀懼湪浜嗘寔涔呭眰鐨勪笂閮紝瀹為檯涓婂湪浼犵粺鐨勯」鐩腑錛屽簲鐢ㄥ眰鍏呭綋鐫鎸佷箙灞傜殑涓涓鎴風瑙掕壊銆備絾瀵逛簬涓浜涚畝鍗曠殑欏圭洰鏉ヨ錛屽簲鐢ㄥ眰鍜屾寔涔呭眰騫舵病鏈夊尯鍒嗗緱閭d箞娓呮錛岃繖涔熸病浠涔堬紝鍦ㄨ繖縐嶆儏鍐典笅浣犲彲浠ュ皢搴旂敤灞傚拰鎸佷箙灞傚悎騫舵垚浜嗕竴灞傘?
銆銆Hibernate鐨勬帴鍙eぇ鑷村彲浠ュ垎涓轟互涓嬪嚑縐嶇被鍨嬶細
銆銆路 涓浜涜鐢ㄦ埛鐨勫簲鐢ㄧ▼搴忚皟鐢ㄧ殑錛岀敤鏉ュ畬鎴愬熀鏈殑鍒涘緩銆佽鍙栥佹洿鏂般佸垹闄ゆ搷浣滀互鍙婃煡璇㈡搷浣滅殑鎺ュ彛銆傝繖浜涙帴鍙f槸Hibernate瀹炵幇鐢ㄦ埛紼嬪簭鐨勫晢涓氶昏緫鐨勪富瑕佹帴鍙o紝瀹冧滑鍖呮嫭Session銆乀ransaction鍜孮uery銆?
銆銆路 Hibernate鐢ㄦ潵璇誨彇璇稿鏄犲皠琛ㄨ繖綾婚厤緗枃浠剁殑鎺ュ彛錛屽吀鍨嬬殑浠h〃鏈塁onfiguration綾匯?
銆銆路 鍥炶皟(Callback)鎺ュ彛銆傚畠鍏佽搴旂敤紼嬪簭鑳藉涓浜涗簨浠剁殑鍙戠敓浣滃嚭鐩稿簲鐨勬搷浣滐紝渚嬪Interceptor銆丩ifecycle鍜孷alidatable閮芥槸榪欎竴綾繪帴鍙c?
銆銆路 涓浜涘彲浠ョ敤鏉ユ墿灞旽ibernate鐨勬槧灝勬満鍒剁殑鎺ュ彛錛屼緥濡俇serType銆丆ompositeUserType鍜孖dentifierGenerator銆傝繖浜涙帴鍙e彲鐢辯敤鎴風▼搴忔潵瀹炵幇錛堝鏋滄湁蹇呰錛夈?
銆銆Hibernate浣跨敤浜咼2EE鏋舵瀯涓殑濡備笅鎶鏈細JDBC銆丣TA銆丣NDI銆傚叾涓璊DBC鏄竴涓敮鎸佸叧緋繪暟鎹簱鎿嶄綔鐨勪竴涓熀紜灞傦紱瀹冧笌JNDI鍜孞TA涓璧風粨鍚堬紝浣垮緱Hibernate鍙互鏂逛究鍦伴泦鎴愬埌J2EE搴旂敤鏈嶅姟鍣ㄤ腑鍘匯?
銆銆鍦ㄨ繖閲岋紝鎴戜滑涓嶄細璇︾粏鍦板幓璁ㄨHibernate API鎺ュ彛涓殑鎵鏈夋柟娉曪紝鎴戜滑鍙畝瑕佽涓涓嬫瘡涓富瑕佹帴鍙g殑鍔熻兘錛屽鏋滀綘鎯充簡瑙e緱鏇村鐨勮瘽錛屼綘鍙互鍦℉ibernate鐨勬簮鐮佸寘涓殑net.sf.hibernate瀛愬寘涓幓鏌ョ湅榪欎簺鎺ュ彛鐨勬簮浠g爜銆備笅闈㈡垜浠緷嬈¤涓涓嬫墍鏈夌殑涓昏鎺ュ彛錛?
銆銆鏍稿績鎺ュ彛
銆銆浠ヤ笅5涓牳蹇冩帴鍙e嚑涔庡湪浠諱綍瀹為檯寮鍙戜腑閮戒細鐢ㄥ埌銆傞氳繃榪欎簺鎺ュ彛錛屼綘涓嶄粎鍙互瀛樺偍鍜岃幏寰楁寔涔呭璞★紝騫朵笖鑳藉榪涜浜嬪姟鎺у埗銆?
銆銆Session鎺ュ彛
銆銆Session鎺ュ彛瀵逛簬Hibernate 寮鍙戜漢鍛樻潵璇存槸涓涓渶閲嶈鐨勬帴鍙c傜劧鑰屽湪Hibernate涓紝瀹炰緥鍖栫殑Session鏄竴涓交閲忕駭鐨勭被錛屽垱寤哄拰閿姣佸畠閮戒笉浼氬崰鐢ㄥ緢澶氳祫婧愩傝繖鍦ㄥ疄闄呴」鐩腑紜疄寰堥噸瑕侊紝鍥犱負鍦ㄥ鎴風▼搴忎腑錛屽彲鑳戒細涓嶆柇鍦板垱寤轟互鍙婇攢姣丼ession瀵硅薄錛屽鏋淪ession鐨勫紑閿澶ぇ錛屼細緇欑郴緇熷甫鏉ヤ笉鑹獎鍝嶃備絾鍊煎緱娉ㄦ剰鐨勬槸Session瀵硅薄鏄潪綰跨▼瀹夊叏鐨勶紝鍥犳鍦ㄤ綘鐨勮璁′腑錛屾渶濂芥槸涓涓嚎紼嬪彧鍒涘緩涓涓猄ession瀵硅薄銆?
銆銆鍦℉ibernate鐨勮璁¤呯殑澶磋剳涓紝浠栦滑灝唖ession鐪嬩綔浠嬩簬鏁版嵁榪炴帴涓庝簨鍔$鐞嗕竴縐嶄腑闂存帴鍙c傛垜浠彲浠ュ皢session鎯寵薄鎴愪竴涓寔涔呭璞$殑緙撳啿鍖猴紝Hibernate鑳芥嫻嬪埌榪欎簺鎸佷箙瀵硅薄鐨勬敼鍙橈紝騫跺強鏃跺埛鏂版暟鎹簱銆傛垜浠湁鏃朵篃縐癝ession鏄竴涓寔涔呭眰綆$悊鍣紝鍥犱負瀹冨寘鍚繖涓浜涙寔涔呭眰鐩稿叧鐨勬搷浣滐紝璇稿瀛樺偍鎸佷箙瀵硅薄鑷蟲暟鎹簱錛屼互鍙婁粠鏁版嵁搴撲粠鑾峰緱瀹冧滑銆傝娉ㄦ剰錛孒ibernate 鐨剆ession涓嶅悓浜嶫SP搴旂敤涓殑HttpSession銆傚綋鎴戜滑浣跨敤session榪欎釜鏈鏃訛紝鎴戜滑鎸囩殑鏄疕ibernate涓殑session錛岃屾垜浠互鍚庝細灝咹ttpSesion瀵硅薄縐頒負鐢ㄦ埛session銆?
銆銆SessionFactory 鎺ュ彛
銆銆榪欓噷鐢ㄥ埌浜嗕竴涓璁℃ā寮忊曗曞伐鍘傛ā寮忥紝鐢ㄦ埛紼嬪簭浠庡伐鍘傜被SessionFactory涓彇寰桽ession鐨勫疄渚嬨?
銆銆浠や綘鎰熷埌濂囨殑鏄疭essionFactory騫朵笉鏄交閲忕駭鐨勶紒瀹為檯涓婂畠鐨勮璁¤呯殑鎰忓浘鏄瀹冭兘鍦ㄦ暣涓簲鐢ㄤ腑鍏變韓銆傚吀鍨嬪湴鏉ヨ錛屼竴涓」鐩氬父鍙渶瑕佷竴涓猄essionFactory灝卞浜嗭紝浣嗘槸褰撲綘鐨勯」鐩鎿嶄綔澶氫釜鏁版嵁搴撴椂錛岄偅浣犲繀欏諱負姣忎釜鏁版嵁搴撴寚瀹氫竴涓猄essionFactory銆?
銆銆SessionFactory鍦℉ibernate涓疄闄呰搗鍒頒簡涓涓紦鍐插尯鐨勪綔鐢紝瀹冪紦鍐蹭簡Hibernate鑷姩鐢熸垚鐨凷QL璇彞鍜屼竴浜涘叾瀹冪殑鏄犲皠鏁版嵁錛岃繕緙撳啿浜嗕竴浜涘皢鏉ユ湁鍙兘閲嶅鍒╃敤鐨勬暟鎹?
銆銆Configuration 鎺ュ彛
銆銆Configuration鎺ュ彛鐨勪綔鐢ㄦ槸瀵笻ibernate榪涜閰嶇疆錛屼互鍙婂瀹冭繘琛屽惎鍔ㄣ傚湪Hibernate鐨勫惎鍔ㄨ繃紼嬩腑錛孋onfiguration綾葷殑瀹炰緥棣栧厛瀹氫綅鏄犲皠鏂囨。鐨勪綅緗紝璇誨彇榪欎簺閰嶇疆錛岀劧鍚庡垱寤轟竴涓猄essionFactory瀵硅薄銆?
銆銆铏界劧Configuration鎺ュ彛鍦ㄦ暣涓狧ibernate欏圭洰涓彧鎵紨鐫涓涓緢灝忕殑瑙掕壊錛屼絾瀹冩槸鍚姩hibernate鏃朵綘鎵閬囧埌鐨勬瘡涓涓璞°?
銆銆Transaction 鎺ュ彛
銆銆Transaction鎺ュ彛鏄竴涓彲閫夌殑API錛屼綘鍙互閫夋嫨涓嶄嬌鐢ㄨ繖涓帴鍙o紝鍙栬屼唬涔嬬殑鏄疕ibernate鐨勮璁¤呰嚜宸卞啓鐨勫簳灞備簨鍔″鐞嗕唬鐮併?Transaction鎺ュ彛鏄瀹為檯浜嬪姟瀹炵幇鐨勪竴涓娊璞★紝榪欎簺瀹炵幇鍖呮嫭JDBC鐨勪簨鍔°丣TA涓殑UserTransaction銆佺敋鑷沖彲浠ユ槸CORBA浜嬪姟銆備箣鎵浠ヨ繖鏍瘋璁℃槸鑳借寮鍙戣呰兘澶熶嬌鐢ㄤ竴涓粺涓浜嬪姟鐨勬搷浣滅晫闈紝浣垮緱鑷繁鐨勯」鐩彲浠ュ湪涓嶅悓鐨勭幆澧冨拰瀹瑰櫒涔嬮棿鏂逛究鍦扮Щ鍊箋?
銆銆Query鍜孋riteria鎺ュ彛
銆銆Query鎺ュ彛璁╀綘鏂逛究鍦板鏁版嵁搴撳強鎸佷箙瀵硅薄榪涜鏌ヨ錛屽畠鍙互鏈変袱縐嶈〃杈炬柟寮忥細HQL璇█鎴栨湰鍦版暟鎹簱鐨凷QL璇彞銆俀uery緇忓父琚敤鏉ョ粦瀹氭煡璇㈠弬鏁般侀檺鍒舵煡璇㈣褰曟暟閲忥紝騫舵渶緇堟墽琛屾煡璇㈡搷浣溿?
銆銆Criteria鎺ュ彛涓嶲uery鎺ュ彛闈炲父綾諱技錛屽畠鍏佽浣犲垱寤哄茍鎵ц闈㈠悜瀵硅薄鐨勬爣鍑嗗寲鏌ヨ銆?
銆銆鍊煎緱娉ㄦ剰鐨勬槸Query鎺ュ彛涔熸槸杞婚噺綰х殑錛屽畠涓嶈兘鍦⊿ession涔嬪浣跨敤銆?
銆銆Callback 鎺ュ彛
銆銆褰撲竴浜涙湁鐢ㄧ殑浜嬩歡鍙戠敓鏃垛曗曚緥濡傛寔涔呭璞$殑杞藉叆銆佸瓨鍌ㄣ佸垹闄ゆ椂錛孋allback鎺ュ彛浼氶氱煡Hibernate鍘繪帴鏀朵竴涓氱煡娑堟伅銆備竴鑸岃█錛孋allback鎺ュ彛鍦ㄧ敤鎴風▼搴忎腑騫朵笉鏄繀欏葷殑錛屼絾浣犺鍦ㄤ綘鐨勯」鐩腑鍒涘緩瀹¤鏃ュ織鏃訛紝浣犲彲鑳戒細鐢ㄥ埌瀹冦?
銆銆 涓涓噸瑕佺殑鏈錛歍ype
銆銆Hibernate鐨勮璁¤呬滑鍙戞槑浜嗕竴涓湳璇細Type錛屽畠鍦ㄦ暣涓瀯鏋朵腑鏄竴涓潪甯稿熀紜銆佹湁鐫寮哄ぇ鍔熻兘鐨勫厓绱犮備竴涓猅ype瀵硅薄鑳藉皢涓涓狫ava綾誨瀷鏄犲皠鍒版暟鎹簱涓竴涓〃鐨勫瓧孌典腑鍘伙紙瀹為檯涓婏紝瀹冨彲浠ユ槧灝勫埌琛ㄧ殑澶氫釜瀛楁涓幓錛夈傛寔涔呯被鐨勬墍鏈夊睘鎬ч兘瀵瑰簲涓涓猼ype銆傝繖縐嶈璁℃濇兂浣跨敤Hibernate鏈夌潃楂樺害鐨勭伒媧繪у拰鎵╁睍鎬с?
銆銆Hibernate鍐呯疆寰堝type綾誨瀷錛屽嚑涔庡寘鎷墍鏈夌殑Java鍩烘湰綾誨瀷錛屼緥濡侸ava.util.Currency銆丣ava.util.calendar銆乥yte[]鍜孞ava.io.Serializable銆?
銆銆涓嶄粎濡傛錛孒ibernate榪樻敮鎸佺敤鎴瘋嚜瀹氫箟鐨則ype錛岄氳繃瀹炵幇鎺ュ彛UserType鍜屾帴鍙ompositeUserType錛屼綘鍙互鍔犲叆鑷繁鐨則ype銆備綘鍙互鍒╃敤榪欑鐗硅壊璁╀綘鐨勯」鐩腑浣跨敤鑷畾涔夌殑璇稿Address銆丯ame榪欐牱鐨則ype錛岃繖鏍蜂綘灝卞彲浠ヨ幏寰楁洿澶х殑渚垮埄錛岃浣犵殑浠g爜鏇翠紭闆呫傝嚜瀹氫箟type鍦℉ibernate涓槸涓欏規牳蹇冪壒鑹詫紝瀹冪殑璁捐鑰呴紦鍔變綘澶氬浣跨敤瀹冩潵鍒涘緩涓涓伒媧匯佷紭闆呯殑欏圭洰錛?
銆銆絳栫暐鎺ュ彛
銆銆Hibernate涓庢煇浜涘叾瀹冨紑婧愯蔣浠朵笉鍚岀殑榪樻湁涓鐐光曗曢珮搴︾殑鍙墿灞曟э紝榪欓氳繃瀹冪殑鍐呯疆絳栫暐鏈哄埗鏉ュ疄鐜般傚綋浣犳劅瑙夊埌Hibernate鐨勬煇浜涘姛鑳戒笉瓚籌紝鎴栬呮湁鏌愪簺緙洪櫡鏃訛紝浣犲彲浠ュ紑鍙戜竴涓嚜宸辯殑絳栫暐鏉ユ浛鎹㈠畠錛岃屼綘鎵瑕佸仛鐨勪粎浠呭彧鏄戶鎵垮畠鐨勬煇涓瓥鐣ユ帴鍙o紝鐒跺悗瀹炵幇浣犵殑鏂扮瓥鐣ュ氨鍙互浜嗭紝浠ヤ笅鏄畠鐨勭瓥鐣ユ帴鍙o細
銆銆路 涓婚敭鐨勭敓鎴?(IdentifierGenerator 鎺ュ彛)
銆銆路 鏈湴SQL璇█鏀寔 (Dialect 鎶借薄綾?
銆銆路 緙撳啿鏈哄埗 (Cache 鍜孋acheProvider 鎺ュ彛)
銆銆路 JDBC 榪炴帴綆$悊 (ConnectionProvider鎺ュ彛)
銆銆路 浜嬪姟綆$悊 (TransactionFactory, Transaction, 鍜?TransactionManagerLookup 鎺ュ彛)
銆銆路 ORM 絳栫暐 (ClassPersister 鎺ュ彛)
銆銆路 灞炴ц闂瓥鐣?(PropertyAccessor 鎺ュ彛)
銆銆路 浠g悊瀵硅薄鐨勫垱寤?(ProxyFactory鎺ュ彛)
銆銆Hibernate涓轟互涓婃墍鍒楃殑鏈哄埗鍒嗗埆鍒涘緩浜嗕竴涓己鐪佺殑瀹炵幇錛屽洜姝ゅ鏋滀綘鍙槸瑕佸寮哄畠鐨勬煇涓瓥鐣ョ殑鍔熻兘鐨勮瘽錛屽彧闇綆鍗曞湴緇ф壙榪欎釜綾誨氨鍙互浜嗭紝娌℃湁蹇呰浠庡ご寮濮嬪啓浠g爜銆?
銆銆浠ヤ笂灝辨槸Hibernate鐨勪竴浜涙牳蹇冩帴鍙o紝浣嗗綋鎴戜滑鐪熸寮濮嬬敤瀹冭繘琛屽紑鍙戞椂錛屼綘鐨勮剳嫻烽噷鍙兘鎬諱細鏈変竴涓枒闂細鎴戞槸閫氳繃浠涔堟柟寮忥紝騫朵粠鍝噷鍙栧緱Session鐨勫憿錛熶互涓嬫垜浠氨瑙g瓟榪欎釜闂銆?
銆銆鍩虹閰嶇疆
銆銆鐜板湪鍥為【涓涓嬫垜浠厛鍓嶇殑鍐呭錛氭垜浠啓鍑轟簡涓涓ず渚嬬▼搴忥紝騫剁畝瑕佸湴璁茶В浜咹ibernate鐨勪竴浜涙牳蹇冪被銆備絾瑕佺湡姝d嬌浣犵殑欏圭洰榪愯璧鋒潵錛岃繕鏈変竴浠朵簨蹇呴』瑕佸仛錛氶厤緗侶ibernate鍙互閰嶇疆鎴愬彲鍦ㄤ換浣旿ava鐜涓繍琛岋紝涓鑸鏉ワ紝瀹冮氬父琚敤鍦?錛?灞傜殑C/S妯″紡鐨勯」鐩腑錛屽茍琚儴緗插湪鏈嶅姟绔傚湪榪欑欏圭洰涓紝Web嫻忚鍣ㄣ佹垨Java GUI紼嬪簭鍏呭綋鑰呭鎴風銆傚敖綆℃垜浠殑鐒︾偣涓昏鏄泦涓湪澶氬眰web搴旂敤錛屼絾瀹為檯涓婂湪涓浜涘熀浜庡懡浠よ鐨勫簲鐢ㄤ腑涔熷彲浠ヤ嬌鐢℉ibernate銆傚茍涓旓紝瀵笻ibernate鐨勯厤緗湪涓嶅悓鐨勭幆澧冧笅閮戒細涓嶅悓錛孒ibernate榪愯鍦ㄤ袱縐嶇幆澧冧笅錛氬彲綆$悊鐜鍜屼笉鍙鐞嗙幆澧?
銆銆路 鍙鐞嗙幆澧冣曗曡繖縐嶇幆澧冨彲綆$悊濡備笅璧勬簮錛氭睜璧勬簮綆$悊錛岃濡傛暟鎹簱榪炴帴姹犲拰錛岃繕鏈変簨鍔$鐞嗐佸畨鍏ㄥ畾涔夈備竴浜涘吀鍨嬬殑J2EE鏈嶅姟鍣紙JBoss銆乄eblogic銆乄ebSphere錛夊凡緇忓疄鐜頒簡榪欎簺銆?
銆銆路 涓嶅彲綆$悊鐜鈥曗曞彧鏄彁渚涗簡涓浜涘熀鏈殑鍔熻兘錛岃濡傚儚Jetty鎴朤omcat榪欐牱鐨剆ervlet瀹瑰櫒鐜銆備竴涓櫘閫氱殑Java妗岄潰搴旂敤鎴栧懡浠よ紼嬪簭涔熷彲浠ヨ涓烘槸澶勪簬榪欑鐜涓嬨傝繖縐嶇幆澧冧笉鑳芥彁渚涜嚜鍔ㄤ簨鍔″鐞嗐佽祫婧愮鐞嗘垨瀹夊叏綆$悊錛岃繖浜涢兘蹇呴』鐢卞簲鐢ㄧ▼搴忚嚜宸辨潵瀹氫箟銆?
銆銆Hibernate鐨勮璁¤呬滑灝嗚繖涓ょ鐜璁捐浜嗕竴涓粺涓鐨勬娊璞$晫闈紝鍥犳瀵逛簬寮鍙戣呮潵璇村彧鏈変竴縐嶇幆澧冿細鍙鐞嗙幆澧冦傚鏋滃疄闄呴」鐩槸寤虹珛鍦ㄨ濡俆omcat榪欑被涓嶅彲綆$悊鐨勭幆澧冧腑鏃訛紝閭ibernate灝嗕細浣跨敤瀹冭嚜宸辯殑浜嬪姟澶勭悊浠g爜鍜孞DBC榪炴帴姹狅紝浣垮叾鍙樹負涓涓彲綆$悊鐜銆?
銆銆瀵逛簬鍙鐞嗙殑鐜鑰岃█錛孒ibernate浼氬皢鑷繁闆嗘垚鍦ㄨ繖縐嶇幆澧冧腑銆傚浜庡紑鍙戣呰岃█錛屼綘鎵瑕佸仛鐨勫伐浣滈潪甯哥畝鍗曪細鍙渶浠庝竴涓狢onfiguration綾諱腑鍒涘緩涓涓猄essionFactory綾誨氨鍙互浜嗐?
銆銆 鍒涘緩涓涓猄essionFactory瀵硅薄
銆銆涓轟簡鑳藉垱寤轟竴涓猄essionFactory瀵硅薄錛屼綘蹇呴』鍦℉ibernate鍒濆鍖栨椂鍒涘緩涓涓狢onfiguration綾葷殑瀹炰緥錛屽茍灝嗗凡鍐欏ソ鐨勬槧灝勬枃浠朵氦鐢卞畠澶勭悊銆傝繖鏍鳳紝Configuration瀵硅薄灝卞彲浠ュ垱寤轟竴涓猄essionFactory瀵硅薄錛屽綋SessionFactory瀵硅薄鍒涘緩鎴愬姛鍚庯紝Configuration瀵硅薄灝辨病鏈夌敤浜嗭紝浣犲彲浠ョ畝鍗曞湴鎶涘純瀹冦傚涓嬫槸紺轟緥浠g爜錛?
銆銆Configuration cfg = new Configuration();
銆銆cfg.addResource("hello/Message.hbm.xml");
銆銆cfg.setProperties( System.getProperties() );
銆銆SessionFactory sessions = cfg.buildSessionFactory();
銆銆鍦ㄤ互涓婁唬鐮佷腑錛孧essage.hb.xml榪欎釜鏄犲皠鏂囦歡鐨勪綅緗瘮杈冪壒孌婏紝瀹冧笌褰撳墠鐨刢lasspath鐩稿叧銆備緥濡俢lasspath鍖呭惈褰撳墠鐩綍錛岄偅鍦ㄤ笂榪頒唬鐮佷腑鐨凪essage.hbm.xml鏄犲皠鏂囦歡灝卞彲浠ヤ繚瀛樺湪褰撳墠鐩綍涓嬬殑hello鐩綍涓?
銆銆浣滀負涓縐嶇害瀹氾紝Hibernate鐨勬槧灝勬枃浠墮粯璁や互.htm.xml浣滀負鍏舵墿灞曞悕銆傚彟涓涓害瀹氭槸鍧氭寔涓烘瘡涓涓寔涔呯被鍐欎竴涓厤緗枃浠訛紝鎯充竴鎯沖鏋滀綘灝嗘墍鏈夋寔涔呯被鐨勬槧灝勫啓鍏ヤ竴涓崟鐙殑閰嶇疆鏂囦歡涓殑璇濓紝閭h繖涓厤緗枃浠惰偗瀹氶潪甯稿簽澶э紝涓嶆槗緇存姢銆備絾榪欓噷鍙堝嚭鐜頒簡涓涓柊闂錛氬鏋滀負姣忎釜綾誨啓涓涓厤緗枃浠剁殑璇濓紝榪欎箞澶氱殑閰嶇疆鏂囦歡搴旇瀛樻斁鍦ㄥ摢閲屽憿錛?
銆銆Hibernate鎺ㄨ崘浣犲皢姣忎釜鏄犲皠鏂囦歡淇濆瓨鍦ㄤ笌鎸佷箙綾葷浉鍚岀殑鐩綍涓嬶紝騫朵笖涓庢寔涔呯被鍚屽悕銆備緥濡傛垜浠涓涓ず渚嬬▼搴忎腑鐨凪essage鎸佷箙綾繪斁鍦╤ello鐩綍涓嬶紝閭d綘蹇呴』鍦ㄨ繖涓洰褰曚笅瀛樻斁鍚嶄負Message.hbm.xml鐨勬槧灝勬枃浠躲傝繖鏍蜂竴涓寔涔呯被閮芥湁鑷繁鐨勪竴涓槧灝勬枃浠訛紝閬垮厤浜嗗嚭鐜板儚struts欏圭洰涓殑鈥渟truts-config.xml鍦扮嫳鈥濈殑鎯呭喌銆傚鏋滀綘涓嶉伒寰繖縐嶈瀹氾紝閭d綘蹇呴』鎵嬪姩鍦扮敤addResource()鏂規硶灝嗕竴涓釜鐨勬槧灝勬枃浠惰澆鍏ワ紱浣嗕綘濡傛灉閬靛驚榪欑瑙勫畾錛岄偅浣犲彲浠ユ柟渚垮湴鐢╝ddClass()鏂規硶鍚屾椂灝嗘寔涔呯被鍜屽畠鐨勬槧灝勬枃浠惰澆鍏ワ紝浠ヤ笅鏄綋鐜拌繖縐嶄究鍒╂х殑紺轟緥浠g爜錛?
銆銆SessionFactory sessions = new Configuration()
銆銆.addClass(org.hibernate.auction.model.Item.class)
銆銆.addClass(org.hibernate.auction.model.Category.class)
銆銆.addClass(org.hibernate.auction.model.Bid.class)
銆銆.setProperties( System.getProperties() )
銆銆.buildSessionFactory();
銆銆褰撶劧錛孒ibernate鐨勬槧灝勬枃浠惰繕鏈夊緢澶氬叾瀹冪殑閰嶇疆閫夐」錛屾瘮濡傛暟鎹簱榪炴帴鐨勮瀹氾紝鎴栨槸鑳藉鏀瑰彉Hibernate榪愯鏃惰涓虹殑涓浜涜瀹氥傛墍鏈夌殑璁劇疆鍙兘鏄潪甯稿簽鏉傜殑錛岃凍浠ヨ浣犲枠涓嶈繃姘旀潵錛屼絾鏄笉蹇呮媴蹇冿紝鍥犱負Hibernate涓虹粷澶у鏁板奸兘璁懼畾浜嗕竴涓悎鐞嗙己鐪佸鹼紝浣犲彧闇瑕佷慨鏀硅繖浜涢厤緗枃浠朵腑鐨勬瀬灝忎竴閮ㄥ垎鍊箋?
銆銆浣犲彲浠ラ氳繃浠ヤ笅鍑犵鏂瑰紡鏉ヤ慨鏀笻ibernate鐨勭郴緇熼厤緗弬鏁幫細
銆銆路 灝嗕竴涓狫ava.util.Properties瀹炰緥浣滀負鍙傛暟浼犵粰Configuration綾葷殑setProperties()鏂規硶銆?
銆銆路 鍦℉ibernate鍚姩鏃剁敤Java 鈥揇property=value鐨勬柟寮忚緗箋?
銆銆路 鍦╟lasspath鍙互鎵懼埌鐨勮礬寰勪笅鍒涘緩涓涓悕涓篽ibernate.properties鐨勯厤緗枃浠躲?
銆銆路 鍦╟lasspath鍙互鎵懼埌鐨勮礬寰勪笅鍒涘緩涓涓悕涓篽ibernate.cfg.xml鐨勬枃浠訛紝騫跺湪鍏訛紲property錛炴爣絳句腑瀹氫箟灞炴у箋?
銆銆浠ヤ笂灝辨槸瀵笻ibernate鐨勪竴涓ぇ鑷翠粙緇嶏紝濡傛灉浣犳兂鐭ラ亾寰楁洿澶氾紝閭f湰鏂囪繕鏄繙榪滀笉澶熺殑錛屾垜灝嗛檰緇帹鍑烘洿澶氬叧浜嶩ibernate鐨勮祫鏂欍備絾鏈変竴鐐規槸姣棤鐤戦棶鐨勶細瀹冪殑紜槸涓涓潪甯鎬紭縐鐨勬寔涔呭眰瑙e喅鏂規錛?/p>
銆銆Java鐨勫唴鏍稿拰class鏂囦歡鏄熀浜巙nicode鐨勶紝榪欎嬌Java紼嬪簭鍏鋒湁鑹ソ鐨勮法騫沖彴鎬э紝浣嗕篃甯︽潵浜嗕竴浜涗腑鏂囦貢鐮侀棶棰樼殑楹葷儲銆傚師鍥犱富瑕佹湁涓ゆ柟闈紝Java鍜孞SP鏂囦歡鏈韓緙栬瘧鏃朵駭鐢熺殑涔辯爜闂鍜孞ava紼嬪簭浜庡叾浠栧獟浠嬩氦浜掍駭鐢熺殑涔辯爜闂銆?/p>
銆銆棣栧厛Java錛堝寘鎷琂SP錛夋簮鏂囦歡涓緢鍙兘鍖呭惈鏈変腑鏂囷紝鑰孞ava鍜孞SP婧愭枃浠剁殑淇濆瓨鏂瑰紡鏄熀浜庡瓧鑺傛祦鐨勶紝濡傛灉Java鍜孞SP緙栬瘧鎴恈lass鏂囦歡榪囩▼涓紝浣跨敤鐨勭紪鐮佹柟寮忎笌婧愭枃浠剁殑緙栫爜涓嶄竴鑷達紝灝變細鍑虹幇涔辯爜銆傚熀浜庤繖縐嶄貢鐮侊紝寤鴻鍦↗ava鏂囦歡涓敖閲忎笉瑕佸啓涓枃錛堟敞閲婇儴鍒嗕笉鍙備笌緙栬瘧錛屽啓涓枃娌″叧緋伙級錛屽鏋滃繀欏誨啓鐨勮瘽錛屽敖閲忔墜鍔ㄥ甫鍙傛暟錛峞coding GBK鎴栵紞ecoding gb2312緙栬瘧錛涘浜嶫SP錛屽湪鏂囦歡澶村姞涓?lt;%@ page contentType="text/html;charset=GBK"%>鎴?lt;%@ page contentType="text/html;charset=gb2312"%>鍩烘湰涓婂氨鑳借В鍐寵繖綾諱貢鐮侀棶棰樸?/p>
銆銆鏈枃瑕侀噸鐐硅璁虹殑鏄浜岀被涔辯爜錛屽嵆Java紼嬪簭涓庡叾浠栧瓨鍌ㄥ獟浠嬩氦浜掓椂浜х敓鐨勪貢鐮併傚緢澶氬瓨鍌ㄥ獟浠嬶紝濡傛暟鎹簱錛屾枃浠訛紝嫻佺瓑鐨勫瓨鍌ㄦ柟寮忛兘鏄熀浜庡瓧鑺傛祦鐨勶紝Java紼嬪簭涓庤繖浜涘獟浠嬩氦浜掓椂灝變細鍙戠敓瀛楃(char)涓庡瓧鑺?byte)涔嬮棿鐨勮漿鎹紝渚嬪浠庨〉闈㈡彁浜よ〃鍗曚腑鎻愪氦鐨勬暟鎹湪Java紼嬪簭閲屾樉紺轟貢鐮佺瓑鎯呭喌銆?/p>
銆銆濡傛灉鍦ㄤ互涓婅漿鎹㈣繃紼嬩腑浣跨敤鐨勭紪鐮佹柟寮忎笌瀛楄妭鍘熸湁鐨勭紪鐮佷笉涓鑷達紝寰堝彲鑳藉氨浼氬嚭鐜頒貢鐮併?/p>
銆銆浜屻佽В鍐蟲柟娉?/p>
銆銆瀵逛簬嫻佽鐨凾omcat鏉ヨ錛屾湁浠ヤ笅涓ょ瑙e喅鏂規硶錛?/p>
銆銆1) 鏇存敼 D:\Tomcat\conf\server.xml錛屾寚瀹氭祻瑙堝櫒鐨勭紪鐮佹牸寮忎負鈥滅畝浣撲腑鏂団濓細
銆銆鏂規硶鏄壘鍒?server.xml 涓殑
聽聽聽 <Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
聽聽聽 enableLookups="false" redirectPort="8443" acceptCount="100"
聽聽聽 connectionTimeout="20000" disableUploadTimeout="true" URIEncoding='GBK' />
銆銆鏍囪錛岀矖浣撳瓧鏄垜娣誨姞鐨勩?/p>
銆銆鍙互榪欐牱楠岃瘉浣犵殑鏇存敼鏄惁鎴愬姛錛氬湪鏇存敼鍓嶏紝鍦ㄤ綘鍑虹幇涔辯爜鐨勯〉闈㈢殑IE嫻忚鍣紝鐐瑰嚮鑿滃崟鈥滄煡鐪嬶綔緙栫爜鈥濓紝浼氬彂鐜扳滆タ嬈?ISO)鈥濆浜庨変腑鐘舵併傝屾洿鏀瑰悗錛岀偣鍑昏彍鍗曗滄煡鐪嬶綔緙栫爜鈥濓紝浼氬彂鐜扳滅畝浣撲腑鏂?GB2312)鈥濆浜庨変腑鐘舵併?/p>
銆銆b)鏇磋 Java 紼嬪簭錛屾垜鐨勭▼搴忔槸榪欐牱鐨勶細
public class ThreeParams extends HttpServlet {
聽 public void doGet(HttpServletRequest request, HttpServletResponse response)
聽聽 throws ServletException, IOException {
聽聽聽聽聽 response.setContentType("text/html; charset=GBK");
聽聽聽聽聽 ...
聽 }聽
}
銆銆綺椾綋瀛楁槸蹇呴渶瑕佹湁鐨勶紝瀹冪殑浣滅敤鏄嫻忚鍣ㄦ妸Unicode瀛楃杞崲涓篏BK瀛楃銆傝繖鏍烽〉闈㈢殑鍐呭鍜屾祻瑙堝櫒鐨勬樉紺烘ā寮忛兘璁炬垚浜咷BK錛屽氨涓嶄細涔辯爜浜嗐?/p>
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import javax.activation.DataHandler;
import org.apache.axis.attachments.ManagedMemoryDataSource;
import org.apache.axis.types.URI;
import org.apache.struts.upload.FormFile;
import cn.com.chinatelecom.www.schema.ctcc.common.v2_1.SimpleReference;
import cn.com.chinatelecom.www.schema.ctcc.multimedia_messaging.v2_2.MessagePriority;
import cn.com.chinatelecom.www.wsdl.ctcc.multimedia_messaging.send.v2_2._interface.SendMessage;
import cn.com.chinatelecom.www.wsdl.ctcc.multimedia_messaging.send.v2_2.service.SendMessageServiceLocator;
import com.telecom.dao.DBLinker;
import com.telecom.util.AttachPart;
import com.telecom.util.Sequence;
public class MMS_send {
聽public MMS_send() {
聽}
聽private AttachPart attachmentParts[];
聽private static SimpleReference _receipt_request;
聽聽聽public void saveMmsMessage(String filepath, AttachPart[] ap,String mmsRoad) {
聽聽for (int i = 0; i < ap.length; i++) {
聽聽聽AttachPart part = ap[i];
聽聽聽try {
聽聽聽聽String s=saveAttachmentMessage(part.getContent().getInputStream(), part
聽聽聽聽聽聽.getContentType(), mmsRoad, filepath);
聽聽聽聽System.out.println("last s:"+s);
聽聽聽} catch (Exception e) {
聽聽聽聽e.printStackTrace();
聽聽聽}
聽聽}
聽}
聽public String saveAttachmentMessage(InputStream in, String contentType,
聽聽聽String fileName, String folderPath) throws Exception {
聽聽System.out.println("FileName: "+fileName);
聽聽// 鎵撳紑澶氬獟浣撳簱
聽聽File file = new File(folderPath + "/mmsImage");
聽聽// 濡傛灉濯掍綋搴撲笉瀛樺湪鍒欏緩璁懼濯掍綋搴?br />聽聽if (!file.exists()) {
聽聽聽file.mkdirs();
聽聽}
聽聽// 灝嗗浘鐗囧瓨鏀懼埌澶氬獟浣撳簱,騫朵繚瀛樺叾淇℃伅鍒版暟鎹簱
聽聽String filePath = file.getAbsolutePath();
聽聽BufferedInputStream bin = null;
聽聽OutputStream os = null;
聽聽try {
聽聽聽bin = new BufferedInputStream(in);
聽聽聽file = new File(filePath + "/" + fileName);
聽聽聽if (!file.exists()) {
聽聽聽聽file.createNewFile();
聽聽聽}
聽聽聽os = new FileOutputStream(file);
聽聽聽byte[] bytes = new byte[1];
聽聽聽int beginIndex = 0;
聽聽聽int endIndex = beginIndex + 1;
聽聽聽while (true) {
聽聽聽聽int _read = bin.read(bytes, beginIndex, endIndex);
聽聽聽聽if (_read == -1) {
聽聽聽聽聽break;
聽聽聽聽}
聽聽聽聽os.write(bytes);
聽聽聽}
聽聽聽String contextPathFileName = "mmsImage/" + fileName;
聽聽聽bin.close();
聽聽聽in.close();
聽聽聽os.close();
聽聽聽return contextPathFileName;
聽聽} catch (IOException e) {
聽聽聽e.printStackTrace();
聽聽聽throw new Exception();
聽聽} catch (Exception e) {
聽聽聽e.printStackTrace();
聽聽聽throw new Exception();
聽聽} finally {
聽聽聽try {
聽聽聽聽bin.close();
聽聽聽聽in.close();
聽聽聽聽os.close();
聽聽聽} catch (IOException e) {
聽聽聽聽throw new Exception();
聽聽聽}
聽聽}
聽}
聽public AttachPart buildEMAttachmentPartFromFile(FormFile mmsFile) {
聽聽AttachPart attchmentPart = new AttachPart();
聽聽try {
聽聽聽InputStream in = mmsFile.getInputStream();
聽聽聽String contentType = mmsFile.getContentType();
聽聽聽if ("image/pjpeg".equals(contentType))
聽聽聽聽contentType = "image/jpeg";
聽聽聽ManagedMemoryDataSource source = new ManagedMemoryDataSource(
聽聽聽聽聽mmsFile.getInputStream(), 16384, contentType, true);
聽聽聽attchmentPart.setContent(source);
聽聽聽attchmentPart.setContentType(mmsFile.getContentType());
聽聽聽String fileName = mmsFile.getFileName();
聽聽聽String suffix = fileName.substring(fileName.indexOf('.'));
聽聽聽attchmentPart.setFileName(Sequence.getID("") + suffix);
聽聽} catch (FileNotFoundException e) {
聽聽聽e.printStackTrace();
聽聽} catch (IOException e) {
聽聽聽e.printStackTrace();
聽聽}
聽聽return attchmentPart;
聽}
聽public static void main(String[] args) {
聽聽Sag_sms s = new Sag_sms();
聽聽try {
聽聽聽s.sendSmsBySAG("13977770119", "娉曞緥", "1004");
聽聽} catch (Exception ex) {
聽聽聽ex.printStackTrace();
聽聽} finally {
聽聽}
聽}
}
<%
聽EnterpriseNumForm enf = new EnterpriseNumForm();
聽Connection conn = null;
聽ResultSet rs = null;
聽ResultSet rs2 = null;
聽Statement sta = null;
聽Statement sta2 = null;
聽try {
聽聽conn = (Connection) DBLinker.linkDB();
聽聽String sql1 = "select distinct(strEnID) eid from tbEnterpriseNum";
聽聽rs = null;
聽聽sta = conn.createStatement();
聽聽rs = sta.executeQuery(sql1);
聽聽if (rs.next()) {
聽聽聽enf.setEnID(rs.getString("eid"));
聽聽}else{
聽聽enf.setEnID("0000");
聽聽}
聽聽String sql2 = "select distinct(strPresentNum) pn from tbEnterpriseNum ";
聽聽rs2 = null;
聽聽sta2 = conn.createStatement();
聽聽rs2 = sta2.executeQuery(sql2);
聽聽Vector v = new Vector();
聽聽
聽聽while (rs2.next()) {
聽聽聽v.add(rs2.getString("PN"));
聽聽}
聽聽String[] s=new String[v.size()];
聽聽for(int i=0;i<v.size();i++){
聽聽s[i]=v.elementAt(i).toString();
聽聽}
聽聽enf.setNums(s);
聽聽System.out.println(v.size());
聽聽//session.setAttribute("enf",enf);
聽} catch (Exception e) {
聽} finally {
聽聽rs2.close();
聽聽rs.close();
聽聽sta.close();
聽聽sta2.close();
聽聽conn.close();
聽}
%>
<html>
聽<head>
聽聽<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
聽聽<link rel="stylesheet" type="text/css" href="../include/style.css">
聽聽<title>璇︾粏淇℃伅</title>
聽聽<script language="javascript">
function checkNum(){
聽聽聽聽selectAllMember(form1.nums);
聽聽聽聽form1.submit();
聽聽聽
聽聽}
function selectAllMember(selection)
聽聽{
聽聽聽var ops=selection.options;
聽聽聽for(var i=0;i<ops.length;i++)
聽聽聽{
聽聽聽聽ops[i].selected=true;
聽聽聽}
聽聽}
function deleteSelectedMember(selection)
聽聽{
聽聽聽var ops=selection.options;
聽聽聽for(var i=0;i<ops.length;i++)
聽聽聽{
聽聽聽聽if(ops[i].selected==true)
聽聽聽聽{
聽聽聽聽聽selection.remove(i);
聽聽聽聽聽i--;
聽聽聽聽}
聽聽聽}
聽聽}
function other_add(){
聽聽聽聽聽聽聽 if(form1.otherNum.value==""){
聽聽alert("涓嶈兘涓虹┖");
聽聽}else{
聽聽additemNoRepeat(form1.otherNum.value,form1.otherNum.value,form1.nums);
聽聽}
聽
}
function additemNoRepeat(Otext,Ovalue,selectElement){//涓嶉噸澶嶇殑娣誨姞
聽for(j=0;j<selectElement.options.length;j++){
聽聽if(selectElement.options[j].value==Ovalue){
聽聽聽var flag=1;
聽聽聽alert(Otext+"宸叉坊鍔?);
聽聽聽break;
聽聽}
聽}
聽if(flag!=1){
聽聽selectElement.options[selectElement.options.length]=new Option(Otext,Ovalue);
聽}
}
聽聽
聽
</script>
聽聽<style type="text/css">
<!--
.style3 {FONT-WEIGHT: bold; FONT-SIZE: 14px; COLOR: #246bad; LINE-HEIGHT: 2 }
body {
聽background-color: #E7F0FA;
}
-->
</style>
<meta http-equiv="pragma" content="no-cache">
<%response.setHeader("Pragma","No-cache");聽
聽聽聽聽聽聽聽 response.setHeader("Cache-Control","no-cache");聽
聽聽聽聽聽聽聽 response.addHeader("Expires","Thu, 01 Jan 1970 00:00:01 GMT");聽
聽聽聽聽聽聽聽 response.flushBuffer();%>
聽</head>
聽<body opener.location.reload()">
聽聽<table width="100%">
聽聽聽<tr>
聽聽聽聽<td bgcolor="#ffffff">
聽聽聽聽聽<table width="530" border="0" cellpadding="0" cellspacing="0"
聽聽聽聽聽聽style="word-break:break-all; ">
聽聽聽聽聽聽<tr>
聽聽聽聽聽聽聽<td width="60" background="../linkman/images/s22.jpg">
聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽</td>
聽聽聽聽聽聽聽<td width="447" background="../linkman/images/s23.jpg">
聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽<span class="style3">淇敼浼佷笟鍙風爜鍜屼富鍙粦瀹氬彿鐮?lt;/span>
聽聽聽聽聽聽聽</td>
聽聽聽聽聽聽聽<td width="6">
聽聽聽聽聽聽聽聽<img src="../linkman/images/s24.jpg" width="6" height="58">
聽聽聽聽聽聽聽</td>
聽聽聽聽聽聽聽<td width="17"></td>
聽聽聽聽聽聽</tr>
聽聽聽聽聽聽<tr>
聽聽聽聽聽聽聽<td colspan="4">
聽聽聽聽聽聽聽聽<table width="100%" border="0" cellpadding="0" cellspacing="0">
聽聽聽聽聽聽聽聽聽<tr>
聽聽聽聽聽聽聽聽聽聽<td width="17">
聽聽聽聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽聽</td>
聽聽聽聽聽聽聽聽聽聽<td bgcolor="#e7f0fa">
聽聽聽聽聽聽聽聽聽聽聽<table width="94%" border="0" align="center" cellpadding="0"
聽聽聽聽聽聽聽聽聽聽聽聽cellspacing="0">
聽聽聽聽聽聽聽聽聽聽聽聽<form name="form1" method="post"
聽聽聽聽聽聽聽聽聽聽聽聽聽action="../companyadmin/EditENF.do?method=SaveENF" >
聽聽聽聽聽聽聽聽聽聽聽聽<tr>
聽聽聽聽聽聽聽聽聽聽聽聽聽<td width="17%" height="25">
聽聽聽聽聽聽聽聽聽聽聽聽聽聽浼佷笟鍙風爜錛?br />聽聽聽聽聽聽聽聽聽聽聽聽聽</td>
聽聽聽聽聽聽聽聽聽聽聽聽聽<td width="100%" height="25">
聽聽聽聽聽聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽<input name="enID" type="text" id="enID"
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽value="<%=enf.getEnID()%>">
聽聽聽聽聽聽聽聽聽聽聽聽聽</td>
聽聽聽聽聽聽聽聽聽聽聽聽</tr>
聽聽聽聽聽聽聽聽聽聽聽聽<tr>
聽聽聽聽聽聽聽聽聽聽聽聽聽<td width="17%" height="25">
聽聽聽聽聽聽聽聽聽聽聽聽聽聽涓誨彨緇戝畾鍙風爜錛?br />聽聽聽聽聽聽聽聽聽聽聽聽聽</td>
聽聽聽聽聽聽聽聽聽聽聽聽聽<td>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽<select name="nums" size="20" multiple id="nums"
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽style="width:64%">
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽<%
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽String[] v = enf.getNums();
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽System.out.println(v.length);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽if (v.length != 0) {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽for (int k = 0; k < v.length; k++) {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽String oldpn = new String();
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽oldpn = v[k];
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽System.out.println(oldpn);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽%>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽<option value="<%=oldpn%>">
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽<%=oldpn%>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽</option>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽<%
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽%>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽</select>
聽聽聽聽聽聽聽聽聽聽聽聽
聽聽<input type="button" name="Submit" value="鍒犻櫎鍙風爜"
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽onClick="deleteSelectedMember(document.all.nums)">
聽聽聽聽聽聽聽聽聽聽聽聽聽</td>
聽聽聽聽聽聽聽聽聽聽聽聽</tr>
聽聽聽聽聽聽聽聽聽聽聽聽<tr>
聽聽聽聽聽聽聽聽聽聽聽聽聽<td height="30" scope="col">
聽聽聽聽聽聽聽聽聽聽聽聽聽聽璇瘋緭鍏ュ彿鐮?
聽聽聽聽聽聽聽聽聽聽聽聽聽</td>
聽聽聽聽聽聽聽聽聽聽聽聽聽<td>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽<input聽 type="text" id="otherNum">
聽聽聽聽聽聽聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽<input type="button" name="Submit" value="娣誨姞"
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽onClick="other_add()">
聽聽聽聽聽聽聽聽聽聽聽聽聽</td>
聽聽聽聽聽聽聽聽聽聽聽聽</tr>
聽聽聽聽聽聽聽聽聽聽聽聽</form>
聽聽聽聽聽聽聽聽聽聽聽</table>
聽聽聽聽聽聽聽聽聽聽</td>
聽聽聽聽聽聽聽聽聽聽<td width="17">
聽聽聽聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽聽</td>
聽聽聽聽聽聽聽聽聽</tr>
聽聽聽聽聽聽聽聽</table>
聽聽聽聽聽聽聽</td>
聽聽聽聽聽聽</tr>
聽
聽聽聽聽聽聽<tr>
聽聽聽聽聽聽聽<td height="30" colspan="4">
聽聽聽聽聽聽聽聽<div align="center">
聽聽聽聽聽聽聽聽聽<a href="javascript:checkNum();">淇濆瓨璁劇疆</a>
聽聽聽聽聽聽聽聽</div>
聽聽聽聽聽聽聽</td>
聽聽聽聽聽聽</tr>
聽聽聽聽聽</table>
聽聽聽聽</td>
聽聽聽</tr>
聽聽</table>
聽</body>
</html>
聽
聽
1錛?span style="FONT: 7pt 'Times New Roman'"> 瀹夎 axis 錛氬皢 axis 鍙戝竷鍖咃紙 webapps\axis 錛夊鍒跺埌鏈嶅姟鍣ㄩ儴緗茬殑鐩綍涓?/span> D:\Tomcat 5.0\webapps 錛屽惎鍔?/span> tomcat 錛岃闂?/span> http://192.168.0.51:7070/axis/ 錛?/span> axis 瀹夎瀹屾垚
2 . 娣誨姞蹇呰鐨勭被鍖咃細灝嗙敓鎴?/span> webservice 鎵闇鐨?/span> jar 鍖呮嫹璐濊嚦錛?/span> D:\Tomcat 5.0\webapps\axis\WEB-INF\lib 錛夌洰褰曚笅錛屽茍灝嗙被鍜岄厤緗枃浠剁瓑鎷瘋礉鑷?/span> D:\Tomcat 5.0\webapps\axis\WEB-INF\classes 涓?/span>
3. 璁劇疆閮ㄧ講鐜鍙橀噺 someclasspath 錛?/span> someclasspath 涓緗殑鏄儴緗?/span> webservice 榪囩▼涓墍闇鐢ㄥ埌鐨?/span> jar 鍖咃紝瀹冨寘鍚簡 axis 涓嬫墍鏈夌殑綾誨寘鍜?/span> tomcat 涓嬬殑錛屽叿浣撲負
D:\Tomcat5.0\webapps\axis\WEB-INF\lib\axis.jar;D:\Tomcat 5.0\webapps\axis\WEB-INF\lib\axis-ant.jar;D:\Tomcat 5.0\webapps\axis\WEB-INF\lib\commons-discovery.jar;D:\Tomcat 5.0\webapps\axis\WEB-INF\lib\commons-logging.jar;D:\Tomcat 5.0\webapps\axis\WEB-INF\lib\jaxrpc.jar;D:\Tomcat 5.0\webapps\axis\WEB-INF\lib\log4j-1.2.8.jar;D:\Tomcat 5.0\webapps\axis\WEB-INF\lib\saaj.jar;D:\Tomcat 5.0\webapps\axis\WEB-INF\lib\wsdl4j.jar;
4 錛庤緗儴緗?/span> webservice 鐨勯儴緗叉枃浠?/span> ( deploy.wsdd ) 錛屽叿浣撹緗涓嬨傚皢 deploy.wsdd鏂囦歡鏀懼湪c:\鐩綍涓?/span>
<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
聽聽聽 <service name="SMS" provider="java:RPC">
聽聽聽聽聽聽聽
<!-- 鎸囧嚭瑕佸彂甯冩垚web service鐨勭被 -->
聽聽聽聽聽聽聽 <parameter name="className" value="com.beyondbit.sms.port.SMSPort "/>
聽聽聽聽聽聽聽
<!-- 鍏佽鎵鏈塸ublic鏂規硶鍙璋冪敤 -->
聽聽聽聽聽聽聽 <parameter name="allowedMethods" value="*"/>聽聽聽聽聽
聽聽聽 </service>
聽聽 </deployment>
鍦?span lang="EN-US">dos鐜涓嬭繍琛岄儴緗插懡浠わ紝閮ㄧ講webservice
鍛戒護錛?span lang="EN-US">
java -cp "%someclasspath%" org.apache.axis.client.AdminClient 鈥損 7070 deploy.wsdd
鍙戝竷鎴愬姛錛屾鏃跺彲閫氳繃 http://192.168.0.51:7070/axis/servlet/AxisServlet鍦板潃鐪嬪埌鍚嶅瓧涓簊ms鐨剋ebservice宸查儴緗叉垚鍔?o:p> (鎴栬呬笉鐢ㄩ氳繃wsdd鏂囦歡,鐩存帴鍘誨啓server-config.wsdd.鍦ㄧ浉搴斿尯鍩熸坊鍔犱緥濡備笅闈㈢殑鍐呭:
聽聽聽 <service name="TestWS" provider="java:RPC">
聽 <parameter name="allowedMethods" value="*"/>
聽聽 <parameter name="className" value="com.telecom.notify.DefaultSmsNotify"/>
聽</service>
)
鍙氳繃鐐瑰嚮webservice鍚嶅瓧鏃佺殑鎻忚堪鏂囦歡閾炬帴錛屽療鐪媤ebservice鐨勬弿榪版枃浠?o:p>
5錛庡湪瀹㈡埛绔敓鎴愯皟鐢╳ebservice鐨刯ava鏂囦歡,鍛戒護濡備笅java -cp "%someclasspath%" org.apache.axis.wsdl.WSDL2Java -p <嫻嬭瘯鐢ㄤ緥鍖?gt;聽 -t<url鍦板潃>
鍦?span lang="EN-US">dos鐜涓嬭緭鍏ュ懡浠?o:p>
java -cp "%someclasspath%" org.apache.axis.wsdl.WSDL2Java -p com.smsCase聽 -t http://192.168.0.51:7070/axis/services/sms?wsdl
緋葷粺鎵ц璇ュ懡浠ゅ悗浼氬湪c:\鐩綍涓嬬敓鎴恈om\smsCase鏂囦歡澶癸紝鍏朵腑鍖呭惈鐢熸垚鐨勭被銆傚埄鐢╝nt絳夊伐鍏風紪璇戣繖浜涙枃浠訛紙緙栬瘧榪囩▼涓渶瑕佺敤鍒皊omeclasspath涓殑jar鍖咃級銆傚彲閫氳繃浠ヤ笅渚嬬▼璋冪敤webservice,
public String parseXml()
聽聽聽 {
聽聽聽聽聽聽聽 String xmlString = "";
聽聽聽聽聽聽聽 try
聽聽聽聽聽聽聽 {
聽聽聽聽聽聽聽聽聽聽聽
SMSPortServiceLocator service = new SMSPortServiceLocator();
聽聽聽聽聽聽聽聽聽聽聽 SMSServiceSoapBindingStub binding = (SMSServiceSoapBindingStub)new SMSPortServiceLocator().getSMSService();聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽 binding = (SMSServiceSoapBindingStub)service.getSMSService();
聽聽聽聽聽聽聽聽聽聽聽 xmlString聽 = binding.toReceiveMsg("000","1234");
聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽 catch(Exception e)
聽聽聽聽聽聽聽 {
聽聽聽聽聽聽聽聽聽聽聽 e.printStackTrace();
聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽 return xmlString;
聽聽聽 }
姝や腑璋冪敤webservice涓殑sms涓殑toReceiveMsg鏂規硶銆?o:p>
6錛庡嵏杞絯eservice錛岃緗嵏杞介儴緗叉枃浠?undeploy.wsdd錛?/span> 灝?/span> undeploy.wsdd鏂囦歡鏀懼湪c:\鐩綍涓?/span>
<undeployment xmlns="http://xml.apache.org/axis/wsdd/">
聽<service name="sms"/>
</undeployment>
鍦?span lang="EN-US">dos鐜涓嬭繍琛屽嵏杞絯ebservice鍛戒護錛屽嵏杞絯ebservice
鍛戒護錛?span lang="EN-US">
java -cp "%someclasspath%" org.apache.axis.client.AdminClient 鈥損 7070 undeploy.wsdd
Pass.error.a=\u65e7\u5bc6\u7801\u4e0d\u5bf9
Pass.error.b=\u5bc6\u7801\u4e0d\u5339\u914d
2.灝哹鏀懼埌src涓?鍚庣紑涓簆roperties.鍦╟onfig鏂囦歡閰嶇疆鍏?lt;message-resources parameter="b" null="false"/>
3.浣跨敤
聽聽 if (oldpass.equals("") || newpass.equals("")|| conpass.equals("")) {
聽聽聽errors.add("fail_1", new ActionError("All.error.a"));
聽聽聽saveErrors(request, errors);
聽聽聽return mapping.findForward("fail");
4.鎵撳畬鏀跺伐錛孍asy~
鏃墮棿錛?006-07-26 浣滆咃細axman 嫻忚嬈℃暟錛? 2070 鏈枃鍏抽敭瀛楋細java,聽equal,聽鍩虹 |
|
銆銆equals鏂規硶鐨勯噸瑕佹ф瘚欏誨璦,鍙浣犳兂姣旇緝鐨勪袱涓璞′笉鎰挎槸鍚屼竴瀵硅薄,浣犲氨搴旇瀹炵幇equals鏂規硶,璁╁璞$敤浣犺涓虹浉絳夌殑鏉′歡鏉ヨ繘琛屾瘮杈冦?/p>
銆銆涓嬮潰鐨勫唴瀹瑰彧鏄疉PI鐨勮鑼?娌℃湁浠涔堝お楂樻繁鐨勬剰涔?浣嗘垜涔嬫墍浠ユ渶鍏堟妸瀹冨垪鍦ㄨ繖鍎?鏄洜涓鴻繖浜涜鑼冨湪浜嬪疄涓茍涓嶆槸鐪熸鑳戒繚璇佸緱鍒板疄鐜般?/p>
銆銆浠ヤ笂鍑犳潯瑙勫垯騫朵笉鏄渶瀹屾暣鐨勮〃榪?璇︾粏鐨勮鍙傝API鏂囨。銆?/p>
銆銆瀵逛簬Object綾?瀹冩彁渚涗簡涓涓渶鏈涓ュ瘑鐨勫疄鐜?閭e氨鏄彧鏈夋槸鍚屼竴瀵硅薄鏄?equals鏂規硶鎵嶈繑鍥瀟rue,涔熷氨鏄漢浠父璇寸殑寮曠敤姣旇緝鑰屼笉鏄兼瘮杈冦傝繖涓疄鐜頒弗瀵嗗緱宸茬粡娌℃湁浠涔堝疄闄呯殑鎰忎箟,鎵浠ュ湪鍏蜂綋瀛愮被(鐩稿浜嶰bject鏉ヨ)涓?濡傛灉鎴戜滑瑕佽繘琛屽璞$殑鍊兼瘮杈?灝卞繀欏誨疄鐜拌嚜宸辯殑equals鏂規硶銆?
銆銆鍏堟潵鐪嬩竴涓嬩互涓嬭繖孌電▼搴?
public boolean equals(Object obj) { if (obj == null) return false; if (!(obj instanceof FieldPosition)) return false; FieldPosition other = (FieldPosition) obj; if (attribute == null) { if (other.attribute != null) { return false; } } else if (!attribute.equals(other.attribute)) { return false; } return (beginIndex == other.beginIndex && endIndex == other.endIndex && field == other.field); }
銆銆榪欐槸JDK涓璲ava.text.FieldPosition鐨勬爣鍑嗗疄鐜?浼間箮娌℃湁浠涔堝彲璇寸殑.聽鎴戠浉淇″ぇ澶氭暟鎴栫粷澶у鏁扮▼搴忓憳璁や負,榪欐槸姝g‘鐨勫悎娉曠殑equals瀹炵幇.姣曠珶瀹冩槸JDK鐨凙PI瀹炵幇鍟?聽榪樻槸璁╂垜浠互浜嬪疄鏉ヨ璇濆惂:
package debug; import java.text.*; public class Test { public static void main(String[] args) { FieldPosition fp = new FieldPosition(10); FieldPosition fp1 = new MyTest(10); System.out.println(fp.equals(fp1)); System.out.println(fp1.equals(fp)); } } class MyTest extends FieldPosition{ int x = 10; public MyTest(int x){ super(x); this.x = x; } public boolean equals(Object o){ if(o==null) return false; if(!(o instanceof MyTest )) return false; return ((MyTest)o).x == this.x; } }
銆銆 榪愯涓涓嬬湅鐪嬩細鎵撳嵃鍑轟粈涔?
System.out.println(fp.equals(fp1));鎵撳嵃true System.out.println(fp1.equals(fp));鎵撳嵃flase
銆銆涓や釜瀵硅薄,鍑虹幇浜嗕笉瀵圭О鐨別quals綆楁硶.闂鍑哄湪鍝噷(鑴戠瓔鎬ヨ漿寮細褰撶劧鍑哄湪JDK瀹炵幇鐨凚UG)?
銆銆鎴戠浉淇℃湁澶鐨勭▼搴忓憳(闄や簡閭d簺鏍規湰涓嶇煡閬撳疄鐜癳quals鏂規硶鐨勭▼搴忓憳澶?鍦ㄥ疄鐜癳quals鏂規硶鏃墮兘鐢ㄨ繃instanceof榪愯絎︽潵榪涜鐭礬浼樺寲鐨勶紝瀹炰簨姹傛槸鍦拌寰堥暱涓孌墊椂闂存垜涔熻繖涔堢敤榪囥傚お澶氱殑鏁欑▼錛屾枃妗i兘緇欎簡鎴戜滑榪欐牱鐨勮瀵箋傝屾湁浜涚◢鏈変簡瑙g殑紼嬪簭鍛樺彲鑳界煡閬撹繖鏍風殑浼樺寲鍙兘鏈変簺涓嶅浣嗘壘涓嶅嚭闂鐨勫叧閿傚彟澶栦竴縐嶆瀬绔槸鐭ラ亾榪欎釜鎶鏈己闄風殑楠ㄧ伆綰т笓瀹跺氨鎻愯涓嶈榪欐牱搴旂敤銆?/p>
銆銆鎴戜滑鐭ラ亾錛?閫氬父"瑕佸涓や釜瀵硅薄榪涜姣旇緝錛岄偅涔堝畠浠?搴旇"鏄悓涓綾誨瀷銆傛墍浠ラ鍏堝埄鐢╪stanceof榪愯絎﹁繘琛岀煭璺紭鍖栵紝濡傛灉琚瘮杈冪殑瀵硅薄涓嶅拰褰撳墠瀵硅薄鏄悓涓綾誨瀷鍒欎笉鐢ㄦ瘮杈冭繑鍥瀎alse,浣嗕簨瀹炰笂錛?瀛愮被鏄埗綾葷殑涓涓疄渚?錛屾墍浠ュ鏋?瀛愮被 o instanceof 鐖剁被錛屽緇堣繑鍥瀟rue,榪欐椂鑲畾涓嶄細鍙戠敓鐭礬浼樺寲錛屼笅闈㈢殑姣旇緝鏈夊彲鑳藉嚭鐜板縐嶆儏鍐碉紝涓縐嶆槸涓嶈兘閫犲瀷鎴愬瓙綾昏屾姏鍑哄紓甯革紝鍙︿竴縐嶆槸鐖剁被鐨刾rivate 鎴愬憳娌℃湁琚瓙綾葷戶鎵胯屼笉鑳借繘琛屾瘮杈冿紝榪樻湁灝辨槸褰㈡垚涓婇潰榪欑涓嶅縐版瘮杈冦傚彲鑳戒細鍑虹幇澶鐨勬儏鍐點?/p>
銆銆閭d箞錛屾槸涓嶆槸灝變笉鑳界敤 instanceof榪愯絎︽潵榪涜浼樺寲錛熺瓟妗堟槸鍚﹀畾鐨勶紝JDK涓粛鐒舵湁寰堝瀹炵幇鏄紜殑錛屽鏋滀竴涓猚lass鏄痜inal鐨勶紝鏄庣煡瀹冧笉鍙兘鏈夊瓙綾伙紝涓轟粈涔堜笉鐢?instanceof鏉ヤ紭鍖栧憿錛?/p>
銆銆涓轟簡緇存姢SUN鐨勫紑鍙戝皬緇勭殑澹拌獕錛屾垜涓嶈鏄庡摢涓被涓紝浣嗘湁涓涓皬緇勬垚鍛樺湪鐢ㄨ繖涓柟娉曚紭鍖栨椂鍦ㄥ悗鍔犲姞涓婁簡鍔犱笂浜嗚繖鏍風殑娉ㄩ噴錛?/p>
if (this == obj) // quick check return true; if (!(obj instanceof XXXXClass)) // (1) same object? return false;
銆銆鍙兘鏄湁浜涚枒闂紝浣嗕笉鐭ラ亾濡備綍鍋氾紙涓嶇煡閬撲負浠涔堟病鏈夋墦鐢佃瘽緇欐垜......錛?/p>
銆銆閭d箞瀵逛簬闈瀎inal綾伙紝濡備綍榪涜綾誨瀷鐨剄uick check鍛紵
銆銆鐢ㄨ姣旇緝瀵硅薄鐨刢lass瀵硅薄鍜屽綋鍓嶅璞$殑class姣旇緝錛岀湅璧鋒潵鏄病鏈夐棶棰橈紝浣嗘槸錛屽鏋滆繖涓被鐨勫瓙綾繪病鏈夐噸鏂板疄鐜癳quals鏂規硶錛岄偅涔堝瓙綾誨湪姣旇緝鐨勬椂鍊欙紝obj.getClass() 鑲畾涓嶇瓑浜嶺XXCalss.class,涔熷氨鏄瓙綾葷殑equals灝嗘棤鏁堬紝鎵浠f(obj.getClass() != this.getClass()) return false;鎵嶆槸姝g‘鐨勬瘮杈冦?
鍙﹀涓涓猶uick check鏄痠f(this==obj) return true;
銆銆鏄惁equals鏂規硶涓瀹氭瘮杈冪殑涓や釜瀵硅薄灝變竴瀹氭槸瑕佸悓涓綾誨瀷錛熶笂闈㈡垜鐢ㄤ簡"閫氬父"錛岃繖涔熸槸緇濆ぇ澶氭暟紼嬪簭鍛樼殑鎰挎湜錛屼絾鏄湁浜涚壒孌婄殑鎯呭喌錛屾垜浠彲浠ヨ繘琛屼笉鍚岀被鍨嬬殑姣旇緝錛岃繖騫朵笉榪濆弽瑙勮寖銆備絾榪欑鐗規畩鎯呭喌鏄潪甯哥綍瑙佺殑錛屼竴涓笉鎭板綋鐨勪緥瀛愭槸錛孖nteger綾葷殑equals鍙互鍜孲ort鍋氭瘮杈冿紝姣旇緝瀹冧滑鐨剉alue鏄笉鏄悓涓鏁板鍊箋傦紙浜嬪疄涓奐DK鐨凙PI涓茍娌℃湁榪欐牱鍋氾紝鎵浠ユ垜鎵嶈鏄笉鎭板綋鐨勪緥瀛愶級銆傚湪瀹屾垚quick check浠ュ悗錛屾垜浠氨瑕佺湡姝e疄鐜頒綘璁や負鐨勨滅浉絳夆濄傚浜庡鏋滃疄鐜板璞$浉絳夛紝娌℃湁澶珮鐨勮姹傦紝姣斿浣犺嚜宸卞疄鐜扮殑鈥滀漢鈥濈被錛屼綘鍙互璁や負鍙name鐩稿悓鍗寵涓哄畠浠槸鐩哥瓑鐨勶紝鍏跺畠鐨剆ex,ago閮藉彲浠ヤ笉鑰冭檻銆傝繖鏄笉瀹屽叏瀹炵幇錛屼絾鏄鏋滄槸瀹屽叏瀹炵幇錛屽嵆瑕佹眰鎵鏈夌殑灞炴ч兘鏄浉鍚岀殑錛岄偅涔堝浣曞疄鐜癳quals鏂規硶錛?/p>
class Human{ private String name; private int ago; private String sex; .................... public boolean equals(Object obj){ quick check....... Human other = (Human)ojb; return this.name.equals(other.name) && this.ago == ohter.ago && this.sex.equals(other.sex); } }
銆銆 榪欐槸涓涓畬鍏ㄥ疄鐜幫紝浣嗘槸錛屾湁鏃秂quals瀹炵幇鏄湪鐖剁被涓疄鐜幫紝鑰岃姹傝瀛愮被緇ф壙鍚巈quals鑳芥紜殑宸ヤ綔錛岃繖鏃朵綘騫朵笉浜嬪疄鐭ラ亾瀛愮被鍒板簳鎵╁睍浜嗗摢浜涘睘鎬э紝鎵浠ョ敤涓婇潰鐨勬柟娉曟棤娉曚嬌equals寰楀埌瀹屽叏瀹炵幇銆?/p>
銆銆涓涓ソ鐨勬柟娉曟槸鍒╃敤鍙嶅皠鏉ュequals榪涜瀹屽叏瀹炵幇錛?/p>
public boolean equals(Object obj){ quick check....... Class c = this.getClass(); Filed[] fds = c.getDeclaredFields(); for(Filed f:fds){ if(!f.get(this).equals(f.get(obj))) return false; } return true; }
銆銆涓轟簡璇存槑鐨勬柟渚匡紝涓婃槑鐨勫疄鐜扮渷鐣ヤ簡寮傚父錛岃繖鏍風殑瀹炵幇鏀懼湪鐖剁被涓紝鍙互淇濊瘉浣犵殑瀛愮被鐨別quals鍙互鎸変綘鐨勬効鏈涙紜湴宸ヤ綔銆?/p>
銆銆鍏充簬equals鏂規硶鐨勬渶鍚庝竴鐐規槸錛氬鏋滀綘瑕佹槸鑷繁閲嶅啓錛堟紜搴旇鏄飽鐩栵級浜唀quals鏂規硶錛岄偅鍚屾椂灝變竴瀹氳閲嶅啓hashCode().涓烘槸瑙勮寖錛屽惁鍒?............
銆銆鎴戜滑榪樻槸鐪嬩竴涓嬭繖涓緥瀛愶細
public final class PhoneNumber { private final int areaCode; private final int exchange; private final int extension; public PhoneNumber(int areaCode, int exchange, int extension) { rangeCheck(areaCode, 999, "area code"); rangeCheck(exchange, 99999999, "exchange"); rangeCheck(extension, 9999, "extension"); this.areaCode = areaCode; this.exchange = exchange; this.extension = extension; } private static void rangeCheck(int arg, int max, String name) { if(arg < 0 || arg > max) throw new IllegalArgumentException(name + ": " + arg); } public boolean equals(Object o) { if(o == this) return true; if(!(o instanceof PhoneNumber)) return false; PhoneNumber pn = (PhoneNumber)o; return pn.extension == extension && pn.exchange == exchange && pn.areaCode == areaCode; } }
銆銆娉ㄦ剰榪欎釜綾繪槸final鐨勶紝鎵浠ヨ繖涓猠quals瀹炵幇娌℃湁浠涔堥棶棰樸?
銆銆鎴戜滑鏉ユ祴璇曚竴涓?
public static void main(String[] args) { Map hm = new HashMap(); PhoneNumber pn = new PhoneNumber(123, 38942, 230); hm.put(pn, "I love you"); PhoneNumber pn1 = new PhoneNumber(123, 38942, 230); System.out.println(pn); System.out.println("pn.equals(pn1) is " + pn.equals(pn1)); System.out.println(hm.get(pn1)); System.out.println(hm.get(pn)); }
銆銆鏃㈢劧pn.equals(pn1),閭d箞鎴憄ut(pn,"I love you");鍚庯紝get(pn1)榪欎粈涔堟槸null鍛紵
銆銆絳旀鏄洜涓哄畠浠殑hashCode涓嶄竴鏍鳳紝鑰宧ashMap灝辨槸浠ashCode涓轟富閿殑銆?/p>
銆銆鎵浠ヨ鑼冭姹傦紝濡傛灉涓や釜瀵硅薄榪涜equals姣旇緝鏃跺鏋滆繑鍥瀟rue,閭d箞瀹冧滑鐨刪ashcode瑕佹眰榪斿洖鐩哥瓑鐨勫箋?
銆銆濂戒簡錛屼紤鎭紝浼戞伅涓涓嬨傘傘傘傘傘傘傘傘傘傘傘傘傘傘傘?
銆銆杞澆鑷猟ev2dev緗戝弸axman鐨?a target="_blank">go deep into java涓撴爮銆?/strong>
涓涓敺浜?
涓涓啓紼嬪簭鐨勭敺浜?
涓涓啓紼嬪簭騫舵鍦ㄤ粠紼嬪簭涓鎵懼揩涔愮殑鐢蜂漢.
涓涓啓紼嬪簭騫舵鍦ㄤ粠紼嬪簭涓鎵懼揩涔愬茍鎶婂揩涔愪紶閫掔粰澶у鐨勭敺浜?
涓涓功鐢?
涓涓瘋瀵炵殑涔︾敓.
涓涓瘋瀵炵殑姊呴绔瑰獎涓嬫暡澹板啓闊電殑涔︾敓.
涓涓瘋瀵炵殑姊呴绔瑰獎涓嬫暡澹板啓闊墊櫒閽熸毊榧撲腑閫告皵鎵墤鐨勪功鐢?
閭d釜鐢蜂漢鏄綅涔︾敓銆傛病鏈変漢鐭ラ亾浠栫殑濮撳悕錛屽眳鏃犲畾鎵錛岃鏃犲畾韙紝浜﹁曞彉璇伙紝鎴栨笖鎴栨ǖ銆?br />鎵浠ユ湁浜哄彨浠栨ǖ澶?Axman)錛屾湁浜哄彨浠栨笖閮?fisher)銆?/p>
聽聽聽聽聽聽聽 SWT 鍦ㄥ瑙傚拰鎬ц兘涓婇兘瓚呰繃浜?/span> awt/swing 錛屼負浠涔堣繖鏍瘋鍛紵涓嬮潰綆鍗曠殑嫻嬭瘯紼嬪簭浼氳浣犱竴鐩簡鐒躲傚簾璇濅篃涓嶅璇達紝璁╂垜浠湅紼嬪簭銆?/span>
聽聽聽 涓嬮潰璁╂垜浠啓涓涓畝鍗曠殑紼嬪簭鏉ユ祴璇曚竴涓嬶紝紼嬪簭鍙仛涓浠朵簨錛屽氨鏄敤
Label
鏄劇ず
鈥滺ello World!鈥?/span>
錛屾垜鐨勬祴璇曠幆澧冩槸
JDK
AWT_CODE:
import java.awt.Frame;
import java.awt.Label;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class awtTest {
聽聽聽聽聽聽 public static void main(String[] args) {
聽聽聽聽聽聽聽聽聽聽聽聽聽 long memory =
聽聽聽聽聽聽聽聽聽聽聽聽聽 long time =
聽聽聽聽聽聽聽聽聽聽聽聽聽 memory = Runtime.getRuntime().freeMemory();
聽聽聽聽聽聽聽聽聽聽聽聽聽 time = System.currentTimeMillis();
聽聽聽聽聽聽聽聽聽聽聽聽聽 Frame frame = new Frame();
聽聽聽聽聽聽聽聽聽聽聽聽聽 Label label = new Label();
聽聽聽聽聽聽聽聽聽聽聽聽聽 label.setText("Hello World!");
聽聽聽聽聽聽聽聽聽聽聽聽聽 frame.add(label);
聽聽聽聽聽聽聽聽聽聽聽聽聽 frame.setVisible(true);
聽聽聽聽聽聽聽聽聽聽聽聽聽 frame.addWindowListener(new WindowAdapter() {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 public void windowClosing(WindowEvent we) {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 System.exit(0);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽聽聽聽聽聽聽 });
聽聽聽聽聽聽聽聽聽聽聽聽聽 frame.pack();
聽聽聽聽聽聽聽聽聽聽聽聽聽 System.out.println(System.currentTimeMillis() - time);
聽聽聽聽聽聽聽聽聽聽聽聽聽 System.out.println(memory - Runtime.getRuntime().freeMemory());
聽聽聽聽聽聽 }
}
榪愯鏁堟灉鍙婃墍鐢ㄧ殑鏃墮棿鍜屽唴瀛樺鹼細
聽
SWING_CODE:
import javax.swing.JFrame;
import javax.swing.JLabel;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class swingTest {
聽聽聽聽聽聽 public static void main(String[] args) {
聽聽聽聽聽聽聽聽聽聽聽聽聽 long memory =
聽聽聽聽聽聽聽聽聽聽聽聽聽 long time =
聽聽聽聽聽聽聽聽聽聽聽聽聽 memory = Runtime.getRuntime().freeMemory();
聽聽聽聽聽聽聽聽聽聽聽聽聽 time = System.currentTimeMillis();
聽聽聽聽聽聽聽聽聽聽聽聽聽 JFrame frame = new JFrame();
聽聽聽聽聽聽聽聽聽聽聽聽聽 JLabel label = new JLabel();
聽聽聽聽聽聽聽聽聽聽聽聽聽 label.setText("Hello World!");
聽聽聽聽聽聽聽聽聽聽聽聽聽 frame.add(label);
聽聽聽聽聽聽聽聽聽聽聽聽聽 frame.setVisible(true);
聽聽聽聽聽聽聽聽聽聽聽聽聽 frame.addWindowListener(new WindowAdapter() {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 public void windowClosing(WindowEvent we) {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 System.exit(0);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽聽聽聽聽聽聽 });
聽聽聽聽聽聽聽聽聽聽聽聽聽 frame.pack();
聽聽聽聽聽聽聽聽聽聽聽聽聽 System.out.print("Time:");
聽聽聽聽聽聽聽聽聽聽聽聽聽 System.out.println(System.currentTimeMillis() - time);
聽聽聽聽聽聽聽聽聽聽聽聽聽 System.out.print("Memory:");
聽聽聽聽聽聽聽聽聽聽聽聽聽 System.out.println(memory - Runtime.getRuntime().freeMemory());
聽聽聽聽聽聽 }
}
榪愯鏁堟灉鍙婃墍鐢ㄧ殑鏃墮棿鍜屽唴瀛樺鹼細
聽
SWT_CODE:
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.SWT;
public class swtTest {
聽聽聽聽聽聽 public static void main(String[] args) {
聽聽聽聽聽聽聽聽聽聽聽聽聽 long memory =
聽聽聽聽聽聽聽聽聽聽聽聽聽 long time =
聽聽聽聽聽聽聽聽聽聽聽聽聽 memory = Runtime.getRuntime().freeMemory();
聽聽聽聽聽聽聽聽聽聽聽聽聽 time = System.currentTimeMillis();
聽聽聽聽聽聽聽聽聽聽聽聽聽 Display display = new Display();
聽聽聽聽聽聽聽聽聽聽聽聽聽 Shell shell = new Shell(display);
聽聽聽聽聽聽聽聽聽聽聽聽聽 Label label = new Label(shell, SWT.NONE);
聽聽聽聽聽聽聽聽聽聽聽聽聽 label.setText("Hello World!");
聽聽聽聽聽聽聽聽聽聽聽聽聽 shell.pack();
聽聽聽聽聽聽聽聽聽聽聽聽聽 label.pack();
聽聽聽聽聽聽聽聽聽聽聽聽聽 shell.open();
聽聽聽聽聽聽聽聽聽聽聽聽聽 System.out.print("Time:");
聽聽聽聽聽聽聽聽聽聽聽聽聽 System.out.println(System.currentTimeMillis() - time);
聽聽聽聽聽聽聽聽聽聽聽聽聽 System.out.print("Memory:");
聽聽聽聽聽聽聽聽聽聽聽聽聽 System.out.println(Runtime.getRuntime().freeMemory() - memory);
聽聽聽聽聽聽聽聽聽聽聽聽聽 while(!shell.isDisposed()) {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 if(!display.readAndDispatch()) {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 display.sleep();
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽聽聽聽聽聽聽 display.dispose();
聽聽聽聽聽聽聽聽聽聽聽聽聽 label.dispose();
聽聽聽聽聽聽 }
}
榪愯鏁堟灉鍙婃墍鐢ㄧ殑鏃墮棿鍜屽唴瀛樺鹼細
聽
濡傛灉浣犱粩緇嗙湅浠g爜錛屼綘浼氬彂鐜板湪 SWT 鐨勪唬鐮佷腑錛屾垜娉ㄨВ涓?/span> 鈥?**鈥?/span> 浠g爜澶勶紝涓庡墠涓よ呮湁鎵涓嶅悓錛岃繖涔熸垜鐤戞儜鐨勫湴鏂癸紝鍦ㄦ暣涓▼搴忚繍琛屼腑錛岃繍琛屽悗鐨勫墿浣欏唴瀛樺眳鐒舵瘮榪愯鍓嶇殑鍓╀綑鍐呭瓨鍊煎ぇ銆傛帴鐫錛屾垜鍦ㄨ皟璇曡紼嬪簭鐨勬椂鍊欙紝鎴戝彂鐜板湪 Shell shell = new Shell(display) 璇彞鎵ц鍚庯紝鍐呭瓨鍊兼湁鏄庢樉鐨勫鍔狅紝濡傛灉浣犵煡閬?/span> SWT 搴曞眰鏄浣曟搷浣滅殑錛岀煡閬撹繖鏄粈涔堝師鍥犲紩璧風殑錛岃浣?/span> 鑱旂郴鎴?/font> 騫跺憡璇夋垜榪欐槸涓轟粈涔堬紝鎴戝ソ鍋氬嚭淇銆?/span>
濡傛灉浣犳槸鍒濆鑰咃紝涓嶇煡閬撴庝箞榪愯
SWT
紼嬪簭錛屽叾瀹炲緢綆鍗曠殑錛屽彧闇瑕佸湪浣犵殑宸ョ▼鐨?/span>
Libraries
娣誨姞涓涓悕涓?/span>
org.eclipse.swt.win32.win32.x86_
聽聽聽聽聽聽聽"D:\\Program Files\\Microsoft Office\\Office10\\powerpnt.exe /s 1.pps");
聽聽聽// "C:\\WINDOWS\\system32\\rundll32.exe jpg.jpg");
聽聽} catch (Exception e) {
聽聽聽e.printStackTrace();
聽聽}
聽}
}
絎?1 姝ワ紝瀹夎 ADF 榪愯鏃跺簱
姝ゆ楠や笌灝嗚繍琛屾椂搴撳畨瑁呭埌 OC4J 鐨勬楠ょ被浼箋傚湪榪愯瀹夎紼嬪簭鏃惰紜繚鏈嶅姟鍣ㄥ浜庡仠姝㈢姸鎬併?/span>
絎?2 姝ワ紝鍒涘緩涓庡簲鐢ㄦ湇鍔″櫒鐨勮繛鎺?/span>
鎸夌収鍓嶉潰鎵榪板垱寤轟竴涓柊榪炴帴銆傛偍鏃犳硶嫻嬭瘯姝よ繛鎺ャ?/span>
絎?3 姝ワ紝鍒涘緩閮ㄧ講鎻忚堪鏂囦歡
鎮ㄥ敮涓闇瑕佺殑鎻忚堪鏂囦歡灝辨槸 web.xml錛屽畠鐢?JDeveloper10g 鍦ㄥ垱寤?web 欏甸潰鏃剁敓鎴愩?/span>
絎?4 姝ワ紝涓烘瘡涓灞傚垱寤洪儴緗查厤緗枃浠?/span>
緙栬緫 web 瀹㈡埛绔殑閮ㄧ講閰嶇疆鏂囦歡銆傜‘淇濆皢鐩爣榪炴帴璁劇疆涓烘偍鍦ㄧ 2 姝ヤ腑鍒涘緩鐨?tomcat 榪炴帴銆傝緭鍏ユ紜殑 war 鏂囦歡鍚嶃傚湪 Tomcat 涓紝涓婁笅鏂囨牴鍩轟簬 web 搴旂敤紼嬪簭鐨勬枃浠跺す鍚嶇О銆?/span>
絎?5 姝ワ紝鍒涘緩涓涓叏灞閮ㄧ講閰嶇疆鏂囦歡錛堜粎闄愪笁灞傚簲鐢ㄧ▼搴忥級
璺寵繃姝ゆ楠ゃ?/span>
絎?6 姝ワ紝閮ㄧ講搴旂敤紼嬪簭
鍙抽敭鍗曞嚮鈥渨ebapp.deploy鈥?/span>銆?
閫夋嫨鈥渄eploy to tomcat鈥?/span>
絎?7 姝ワ紝嫻嬭瘯搴旂敤紼嬪簭
閫氳繃鍦ㄦ祻瑙堝櫒涓敭鍏?http://localhost:8080/[warfilename]/departments.jsp錛屾祴璇曞簲鐢ㄧ▼搴忕殑閮ㄧ講銆?/span>
聽聽聽聽聽聽 javac 鈥揹 . *.java
2錛氬湪%APP_HOME%/webapp/WEB-INF鐩綍涓嬪垱寤簊erver-config.wsdd錛圓XIS閰嶇疆鏂囦歡錛屾墍鏈墂eb鏈嶅姟閮借鍦ㄨ鏂囦歡涓敞鍐岋級鏂囦歡銆傚艦濡傦細
<?xml version="1.0" encoding="UTF-8"?>
<deployment xmlns="聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <parameter name="attachments.implementation" value="org.apache.axis.attachments.AttachmentsImpl"/>聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <parameter name="sendXsiTypes" value="true"/>聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <parameter name="sendMultiRefs" value="true"/>聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <parameter name="sendXMLDeclaration" value="true"/>聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <parameter name="axis.sendMinimizedElements" value="true"/>聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <requestFlow>聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <handler type="java:org.apache.axis.handlers.JWSHandler">聽聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <parameter name="scope" value="session"/>聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 </handler>聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <handler type="java:org.apache.axis.handlers.JWSHandler">聽聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <parameter name="scope" value="request"/>聽聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <parameter name="extension" value=".jwr"/>聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 </handler>聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 </requestFlow>
聽聽聽聽聽聽聽聽聽 </globalConfiguration>
聽聽聽聽聽聽聽聽聽 <handler name="LocalResponder" type="java:org.apache.axis.transport.local.LocalResponder"/>
聽聽聽聽聽聽聽聽聽 <handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper"/>
聽聽聽聽聽聽聽聽聽 <handler name="Authenticate" type="java:org.apache.axis.handlers.SimpleAuthenticationHandler"/>聽聽
聽
聽聽聽聽聽聽聽聽聽 <service name="login" provider="java:RPC">聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <!-- 鏈嶅姟綾誨悕 -->聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <parameter name="className" value="com.test.service.loginService"/>聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <!-- 鍏佽璁塊棶鎵鏈夋柟娉?-->聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <parameter name="allowedMethods" value="*"/>
聽聽聽聽聽聽聽聽聽 </service>聽
聽聽聽聽聽聽聽聽聽 <transport name="http">聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <requestFlow>聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <handler type="URLMapper"/>聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler"/>聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 </requestFlow>
聽聽聽聽聽聽聽聽聽 </transport>
聽聽聽聽聽聽聽聽聽 <transport name="local">聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <responseFlow>聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 <handler type="LocalResponder"/>聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 </responseFlow>
聽聽聽聽聽聽聽聽聽 </transport>
</deployment>
聽
聽
娉細server-config.wsdd鏂囦歡涔熷彲浠ラ氳繃緙栧啓deploy.wsdd鏂囦歡鐢熸垚錛屽叿浣撴柟娉曚負錛屽湪%APP_HOME%/webapp/WEB-INF鐩綍涓嬪垱寤篸eploy.wsdd鏂囦歡錛圫OAP鍙戝竷鎻忚堪鏂囦歡錛夛紝褰㈠錛?/p>
<deployment xmlns="聽聽聽聽聽聽聽 <parameter name="className" value="LoginService"/>
聽聽聽聽聽聽聽 <parameter name="allowedMethods" value="*"/>
聽聽聽 </service>
</deployment>
鐒跺悗灝嗙浉搴旀湇鍔″櫒绔痗lass緙栬瘧鍚庡湪鍛戒護琛岃緭鍏ワ細
java -cp %AXISCLASSPATH% org.apache.axis.client.AdminClient deploy.wsdd
灝嗗湪褰撳墠鐩綍涓嬬敓鎴恠erver-config.wsdd鏂囦歡銆?/p>
瀹屾垚浠ヤ笂鎿嶄綔鍚庯紝鍙湪嫻忚鍣ㄤ腑閫氳繃http://localhost:8080/axis/services/login?wsdl 璁塊棶璇ユ湇鍔°?br />聽
3錛欽AVA瀹㈡埛绔疄鐜幫細
鍙互閫氳繃AXIS涓殑org.apache.axis.wsdl.WSDL2Java綾誨皢宸插彂甯冪殑web鏈嶅姟榪涜瀹㈡埛绔疄渚嬪寲錛屽叿浣撳懡浠や負錛氬湪%APP_HOME%/webapp/WEB-INF鐩綍涓嬪懡浠よ杈撳叆錛?/p>
Java -Djava.ext.dirs=lib org.apache.axis.wsdl.WSDL2Java url[YiWang1]
聽
鍛戒護鎵ц鍚庝細鍦ㄦ湰鍦板綋鍓嶇洰褰曚笅鐢熸垚浠rl涓烘ā鐗堢殑package鐩綍灞傛緇撴瀯(濡傦細local.axis.service.*),璇ョ洰褰曚腑閽堝姣忎釜鏈嶅姟鍣ㄧ鎺ュ彛浼氳嚜鍔ㄧ敓鎴?涓湰鍦扮被銆?/p>
鍏朵腑錛?/p>
聽聽聽聽聽聽 inferface LoginService鍦ㄥ鎴風鏈湴瀹氫箟鏈嶅姟鍣ㄦ帴鍙g殑鏄犲皠銆?/p>
聽聽聽聽聽聽 interface LoginServiceService瀹氫箟浜嗙敤浜庤幏寰梬eb鏈嶅姟鐨刧etter鏂規硶銆?/p>
聽聽聽聽聽聽 class LoginServiceServiceLocator鍏蜂綋瀹炵幇LoginServiceService鎺ュ彛錛屼繚瀛樹簡鏈嶅姟鍣ㄧ殑url絳夌浉鍏充俊鎭?/p>
聽聽聽聽聽聽 class LoginSoapBindingStub 鍏蜂綋瀹炵幇LoginService錛岃礋璐f湇鍔″櫒浜や簰銆?/p>
聽
錛堥儴緗蹭簡web鏈嶅姟涔嬪悗錛屽鏋滄帴鍙d笉鍙樿寀rl鍙戠敓鏀瑰彉錛屽彲浠ョ洿鎺ュ湪瀹㈡埛绔洿鏂癓oginServiceServiceLocator涓湁鍏蟲湇鍔″櫒鍦板潃鐨勭浉鍏充俊鎭紝鎴栬呯敤閰嶇疆鏂囦歡鐨勫艦寮忎慨鏀癸級
緙栬瘧浠ヤ笂鍑犱釜綾繪椂闇瑕乤xis.jar錛宩axrpc.jar涓や釜鍖咃紝鍛戒護涓猴細
聽 javac -classpath lib\axis.jar;lib\jaxrpc.jar 鈥揹 . *.java
緙栬瘧鎴恈lass鍚庡彲浠ラ氳繃jar鍛戒護鎵撳寘浣滀負鎺ュ彛閮ㄧ講鍦ㄥ鎴風銆?/p>
瀹㈡埛绔祴璇曚緥紼嬶細
聽聽聽聽聽聽 濡傛灉閫氳繃java搴旂敤紼嬪簭褰㈠紡榪涜嫻嬭瘯錛屽懡浠や負錛?/p>
聽聽聽聽聽聽聽 java -Djava.ext.dirs=lib -cp . package.class
--------------------------------------------------------------------------------
聽[YiWang1]鏈嶅姟鍣ㄩ氳繃Wsdl褰㈠紡鍙戝竷鐨剋eb鏈嶅姟鐨勫畬鏁磚rl鍦板潃銆?br />