锘??xml version="1.0" encoding="utf-8" standalone="yes"?>在线综合亚洲中文精品,亚洲人成人网站在线观看,亚洲AV成人精品日韩一区http://m.tkk7.com/aiyoyoyo/category/7534.html榪欐槸鎴戠殑鎴愰暱錛岃繖鏄垜鐨勫ぉ鍦幫紝瀛︿範JAVA錛屽彧鍥犲揩涔愩?/description>zh-cnThu, 01 Mar 2007 18:24:59 GMTThu, 01 Mar 2007 18:24:59 GMT60Java Servlet榪炴帴姹犵殑鏂規硶http://m.tkk7.com/aiyoyoyo/articles/31225.htmlaiyoyoyoaiyoyoyoFri, 17 Feb 2006 08:43:00 GMThttp://m.tkk7.com/aiyoyoyo/articles/31225.htmlhttp://m.tkk7.com/aiyoyoyo/comments/31225.htmlhttp://m.tkk7.com/aiyoyoyo/articles/31225.html#Feedback0http://m.tkk7.com/aiyoyoyo/comments/commentRss/31225.htmlhttp://m.tkk7.com/aiyoyoyo/services/trackbacks/31225.html

涓銆佸疄鐜拌繛鎺ユ睜鐨勬剰涔?nbsp;

鍔ㄦ乄eb绔欑偣寰寰鐢ㄦ暟鎹簱瀛樺偍鐨勪俊鎭敓鎴怶eb欏甸潰錛屾瘡涓涓〉闈㈣姹傚鑷翠竴嬈℃暟鎹簱璁塊棶銆傝繛鎺ユ暟鎹簱涓嶄粎瑕佸紑閿涓瀹氱殑閫氳鍜屽唴瀛樿祫婧愶紝榪樺繀欏誨畬鎴愮敤鎴烽獙璇併佸畨鍏ㄤ笂涓嬫枃閰嶇疆榪欑被浠誨姟錛屽洜鑰屽線寰鎴愪負鏈涓鴻楁椂鐨勬搷浣溿傚綋鐒訛紝瀹為檯鐨勮繛鎺ユ椂闂村紑閿鍗冨彉涓囧寲錛屼絾1鍒?縐掑歡榪熷茍闈炰笉甯歌銆傚鏋滄煇涓熀浜庢暟鎹簱鐨刉eb搴旂敤鍙渶寤虹珛涓嬈″垵濮嬭繛鎺ワ紝涓嶅悓欏甸潰璇鋒眰鑳藉鍏變韓鍚屼竴榪炴帴錛屽氨鑳借幏寰楁樉钁楃殑鎬ц兘鏀瑰杽銆?nbsp;
Servlet鏄竴涓狫ava綾匯係ervlet寮曟搸錛堝畠鍙兘鏄疻eb鏈嶅姟杞歡鐨勪竴閮ㄥ垎錛屼篃鍙兘鏄竴涓嫭绔嬬殑闄勫姞妯″潡錛夊湪緋葷粺鍚姩鎴朣ervlet絎竴嬈¤璇鋒眰鏃跺皢璇ョ被瑁呭叆Java铏氭嫙鏈哄茍鍒涘緩瀹冪殑涓涓疄渚嬨備笉鍚岀敤鎴瘋姹傜敱鍚屼竴Servlet瀹炰緥鐨勫涓嫭绔嬬嚎紼嬪鐞嗐傞偅浜涜姹傚湪涓嶅悓璇鋒眰涔嬮棿鎸佺畫鏈夋晥鐨勬暟鎹棦鍙互鐢⊿ervlet鐨勫疄渚嬪彉閲忔潵淇濆瓨錛屼篃鍙互淇濆瓨鍦ㄧ嫭绔嬬殑杈呭姪瀵硅薄涓?nbsp;
鐢↗DBC璁塊棶鏁版嵁搴撻鍏堣鍒涘緩涓庢暟鎹簱涔嬮棿鐨勮繛鎺ワ紝鑾峰緱涓涓繛鎺ュ璞★紙Connection錛夛紝鐢辮繛鎺ュ璞℃彁渚涙墽琛孲QL璇彞鐨勬柟娉曘傛湰鏂囦粙緇嶇殑鏁版嵁搴撹繛鎺ユ睜鍖呮嫭涓涓鐞嗙被DBConnectionManager錛岃礋璐f彁渚涗笌澶氫釜榪炴帴姹犲璞★紙DBConnectionPool綾伙級涔嬮棿鐨勬帴鍙c傛瘡涓涓繛鎺ユ睜瀵硅薄綆$悊涓緇凧DBC榪炴帴瀵硅薄錛屾瘡涓涓繛鎺ュ璞″彲浠ヨ浠繪剰鏁伴噺鐨凷ervlet鍏變韓銆?nbsp;
綾籇BConnectionPool鎻愪緵浠ヤ笅鍔熻兘錛?nbsp;

1) 浠庤繛鎺ユ睜鑾峰彇錛堟垨鍒涘緩錛夊彲鐢ㄨ繛鎺ャ?nbsp;
2) 鎶婅繛鎺ヨ繑鍥炵粰榪炴帴姹犮?nbsp;
3) 鍦ㄧ郴緇熷叧闂椂閲婃斁鎵鏈夎祫婧愶紝鍏抽棴鎵鏈夎繛鎺ャ?nbsp;

姝ゅ錛?nbsp;DBConnectionPool綾昏繕鑳藉澶勭悊鏃犳晥榪炴帴錛堝師鏉ョ櫥璁頒負鍙敤鐨勮繛鎺ワ紝鐢變簬鏌愮鍘熷洜涓嶅啀鍙敤錛屽瓚呮椂錛岄氳闂錛夛紝騫惰兘澶熼檺鍒惰繛鎺ユ睜涓殑榪炴帴鎬繪暟涓嶈秴榪囨煇涓瀹氬箋?nbsp;
綆$悊綾籇BConnectionManager鐢ㄤ簬綆$悊澶氫釜榪炴帴姹犲璞★紝瀹冩彁渚涗互涓嬪姛鑳斤細 

1) 瑁呰澆鍜屾敞鍐孞DBC椹卞姩紼嬪簭銆?nbsp;
2) 鏍規嵁鍦ㄥ睘鎬ф枃浠朵腑瀹氫箟鐨勫睘鎬у垱寤鴻繛鎺ユ睜瀵硅薄銆?nbsp;
3) 瀹炵幇榪炴帴姹犲悕瀛椾笌鍏跺疄渚嬩箣闂寸殑鏄犲皠銆?nbsp;
4) 璺熻釜瀹㈡埛紼嬪簭瀵硅繛鎺ユ睜鐨勫紩鐢紝淇濊瘉鍦ㄦ渶鍚庝竴涓鎴風▼搴忕粨鏉熸椂瀹夊叏鍦板叧闂墍鏈夎繛鎺ユ睜銆?nbsp;

鏈枃浣欎笅閮ㄥ垎灝嗚緇嗚鏄庤繖涓や釜綾伙紝鏈鍚庣粰鍑轟竴涓ず渚嬫紨紺篠ervlet浣跨敤榪炴帴姹犵殑涓鑸繃紼嬨?nbsp;


浜屻佸叿浣撳疄鐜?nbsp;

DBConnectionManager.java紼嬪簭娓呭崟濡備笅錛?nbsp;

001 import java.io.*;
002 import java.sql.*;
003 import java.util.*;
004 import java.util.Date;
005 
006 /** 
007 * 綆$悊綾籇BConnectionManager鏀寔瀵逛竴涓垨澶氫釜鐢卞睘鎬ф枃浠跺畾涔夌殑鏁版嵁搴撹繛鎺?nbsp;
008 * 姹犵殑璁塊棶.瀹㈡埛紼嬪簭鍙互璋冪敤getInstance()鏂規硶璁塊棶鏈被鐨勫敮涓瀹炰緥. 
009 */ 
010 public class DBConnectionManager { 
011 static private DBConnectionManager instance;// 鍞竴瀹炰緥 
012 static private int clients;
013 
014 private Vector drivers = new Vector();
015 private PrintWriter log;
016 private Hashtable pools = new Hashtable();
017 
018 /** 
019 * 榪斿洖鍞竴瀹炰緥.濡傛灉鏄涓嬈¤皟鐢ㄦ鏂規硶,鍒欏垱寤哄疄渚?nbsp;
020 * 
021 * @return DBConnectionManager 鍞竴瀹炰緥 
022 */ 
023 static synchronized public DBConnectionManager getInstance() { 
024 if (instance == null) { 
025 instance = new DBConnectionManager();
026 } 
027 clients++;
028 return instance;
029 } 
030 
031 /** 
032 * 寤烘瀯鍑芥暟縐佹湁浠ラ槻姝㈠叾瀹冨璞″垱寤烘湰綾誨疄渚?nbsp;
033 */ 
034 private DBConnectionManager() { 
035 init();
036 } 
037 
038 /** 
039 * 灝嗚繛鎺ュ璞¤繑鍥炵粰鐢卞悕瀛楁寚瀹氱殑榪炴帴姹?nbsp;
040 * 
041 * @param name 鍦ㄥ睘鎬ф枃浠朵腑瀹氫箟鐨勮繛鎺ユ睜鍚嶅瓧 
042 * @param con 榪炴帴瀵硅薄 
043 */ 
044 public void freeConnection(String name, Connection con) { 
045 DBConnectionPool pool = (DBConnectionPool) pools.get(name);
046 if (pool != null) { 
047 pool.freeConnection(con);
048 } 
049 } 
050 
051 /** 
052 * 鑾峰緱涓涓彲鐢ㄧ殑(絀洪棽鐨?榪炴帴.濡傛灉娌℃湁鍙敤榪炴帴,涓斿凡鏈夎繛鎺ユ暟灝忎簬鏈澶ц繛鎺ユ暟 
053 * 闄愬埗,鍒欏垱寤哄茍榪斿洖鏂拌繛鎺?nbsp;
054 * 
055 * @param name 鍦ㄥ睘鎬ф枃浠朵腑瀹氫箟鐨勮繛鎺ユ睜鍚嶅瓧 
056 * @return Connection 鍙敤榪炴帴鎴杗ull 
057 */ 
058 public Connection getConnection(String name) { 
059 DBConnectionPool pool = (DBConnectionPool) pools.get(name);
060 if (pool != null) { 
061 return pool.getConnection();
062 } 
063 return null;
064 } 
065 
066 /** 
067 * 鑾峰緱涓涓彲鐢ㄨ繛鎺?鑻ユ病鏈夊彲鐢ㄨ繛鎺?涓斿凡鏈夎繛鎺ユ暟灝忎簬鏈澶ц繛鎺ユ暟闄愬埗, 
068 * 鍒欏垱寤哄茍榪斿洖鏂拌繛鎺?鍚﹀垯,鍦ㄦ寚瀹氱殑鏃墮棿鍐呯瓑寰呭叾瀹冪嚎紼嬮噴鏀捐繛鎺? 
069 * 
070 * @param name 榪炴帴姹犲悕瀛?nbsp;
071 * @param time 浠ユ縐掕鐨勭瓑寰呮椂闂?nbsp;
072 * @return Connection 鍙敤榪炴帴鎴杗ull 
073 */ 
074 public Connection getConnection(String name, long time) { 
075 DBConnectionPool pool = (DBConnectionPool) pools.get(name);
076 if (pool != null) { 
077 return pool.getConnection(time);
078 } 
079 return null;
080 } 
081 
082 /** 
083 * 鍏抽棴鎵鏈夎繛鎺?鎾ら攢椹卞姩紼嬪簭鐨勬敞鍐?nbsp;
084 */ 
085 public synchronized void release() { 
086 // 絳夊緟鐩村埌鏈鍚庝竴涓鎴風▼搴忚皟鐢?nbsp;
087 if (--clients != 0) { 
088 return;
089 } 
090 
091 Enumeration allPools = pools.elements();
092 while (allPools.hasMoreElements()) { 
093 DBConnectionPool pool = (DBConnectionPool) allPools.nextElement();
094 pool.release();
095 } 
096 Enumeration allDrivers = drivers.elements();
097 while (allDrivers.hasMoreElements()) { 
098 Driver driver = (Driver) allDrivers.nextElement();
099 try { 
100 DriverManager.deregisterDriver(driver);
101 log("鎾ら攢JDBC椹卞姩紼嬪簭 " + driver.getClass().getName()+"鐨勬敞鍐?);
102 } 
103 catch (SQLException e) { 
104 log(e, "鏃犳硶鎾ら攢涓嬪垪JDBC椹卞姩紼嬪簭鐨勬敞鍐? " + driver.getClass().getName());
105 } 
106 } 
107 } 
108 
109 /** 
110 * 鏍規嵁鎸囧畾灞炴у垱寤鴻繛鎺ユ睜瀹炰緥. 
111 * 
112 * @param props 榪炴帴姹犲睘鎬?nbsp;
113 */ 
114 private void createPools(Properties props) { 
115 Enumeration propNames = props.propertyNames();
116 while (propNames.hasMoreElements()) { 
117 String name = (String) propNames.nextElement();
118 if (name.endsWith(".url")) { 
119 String poolName = name.substring(0, name.lastIndexOf("."));
120 String url = props.getProperty(poolName + ".url");
121 if (url == null) { 
122 log("娌℃湁涓鴻繛鎺ユ睜" + poolName + "鎸囧畾URL");
123 continue;
124 } 
125 String user = props.getProperty(poolName + ".user");
126 String password = props.getProperty(poolName + ".password");
127 String maxconn = props.getProperty(poolName + ".maxconn", "0");
128 int max;
129 try { 
130 max = Integer.valueOf(maxconn).intValue();
131 } 
132 catch (NumberFormatException e) { 
133 log("閿欒鐨勬渶澶ц繛鎺ユ暟闄愬埗: " + maxconn + " .榪炴帴姹? " + poolName);
134 max = 0;
135 } 
136 DBConnectionPool pool = 
137 new DBConnectionPool(poolName, url, user, password, max);
138 pools.put(poolName, pool);
139 log("鎴愬姛鍒涘緩榪炴帴姹? + poolName);
140 } 
141 } 
142 } 
143 
144 /** 
145 * 璇誨彇灞炴у畬鎴愬垵濮嬪寲 
146 */ 
147 private void init() { 
148 InputStream is = getClass().getResourceAsStream("/db.properties");
149 Properties dbProps = new Properties();
150 try { 
151 dbProps.load(is);
152 } 
153 catch (Exception e) { 
154 System.err.println("涓嶈兘璇誨彇灞炴ф枃浠? " + 
155 "璇風‘淇漝b.properties鍦–LASSPATH鎸囧畾鐨勮礬寰勪腑");
156 return;
157 } 
158 String logFile = dbProps.getProperty("logfile", "DBConnectionManager.log");
159 try { 
160 log = new PrintWriter(new FileWriter(logFile, true), true);
161 } 
162 catch (IOException e) { 
163 System.err.println("鏃犳硶鎵撳紑鏃ュ織鏂囦歡: " + logFile);
164 log = new PrintWriter(System.err);
165 } 
166 loadDrivers(dbProps);
167 createPools(dbProps);
168 } 
169 
170 /** 
171 * 瑁呰澆鍜屾敞鍐屾墍鏈塉DBC椹卞姩紼嬪簭 
172 * 
173 * @param props 灞炴?nbsp;
174 */ 
175 private void loadDrivers(Properties props) { 
176 String driverClasses = props.getProperty("drivers");
177 StringTokenizer st = new StringTokenizer(driverClasses);
178 while (st.hasMoreElements()) { 
179 String driverClassName = st.nextToken().trim();
180 try { 
181 Driver driver = (Driver) 
182 Class.forName(driverClassName).newInstance();
183 DriverManager.registerDriver(driver);
184 drivers.addElement(driver);
185 log("鎴愬姛娉ㄥ唽JDBC椹卞姩紼嬪簭" + driverClassName);
186 } 
187 catch (Exception e) { 
188 log("鏃犳硶娉ㄥ唽JDBC椹卞姩紼嬪簭: " + 
189 driverClassName + ", 閿欒: " + e);
190 } 
191 } 
192 } 
193 
194 /** 
195 * 灝嗘枃鏈俊鎭啓鍏ユ棩蹇楁枃浠?nbsp;
196 */ 
197 private void log(String msg) { 
198 log.println(new Date() + ": " + msg);
199 } 
200 
201 /** 
202 * 灝嗘枃鏈俊鎭笌寮傚父鍐欏叆鏃ュ織鏂囦歡 
203 */ 
204 private void log(Throwable e, String msg) { 
205 log.println(new Date() + ": " + msg);
206 e.printStackTrace(log);
207 } 
208 
209 /** 
210 * 姝ゅ唴閮ㄧ被瀹氫箟浜嗕竴涓繛鎺ユ睜.瀹冭兘澶熸牴鎹姹傚垱寤烘柊榪炴帴,鐩村埌棰勫畾鐨勬渶 
211 * 澶ц繛鎺ユ暟涓烘.鍦ㄨ繑鍥炶繛鎺ョ粰瀹㈡埛紼嬪簭涔嬪墠,瀹冭兘澶熼獙璇佽繛鎺ョ殑鏈夋晥鎬? 
212 */ 
213 class DBConnectionPool { 
214 private int checkedOut;
215 private Vector freeConnections = new Vector();
216 private int maxConn;
217 private String name;
218 private String password;
219 private String URL;
220 private String user;
221 
222 /** 
223 * 鍒涘緩鏂扮殑榪炴帴姹?nbsp;
224 * 
225 * @param name 榪炴帴姹犲悕瀛?nbsp;
226 * @param URL 鏁版嵁搴撶殑JDBC URL 
227 * @param user 鏁版嵁搴撳笎鍙?鎴?nbsp;null 
228 * @param password 瀵嗙爜,鎴?nbsp;null 
229 * @param maxConn 姝よ繛鎺ユ睜鍏佽寤虹珛鐨勬渶澶ц繛鎺ユ暟 
230 */ 
231 public DBConnectionPool(String name, String URL, String user, String password, 
232 int maxConn) { 
233 this.name = name;
234 this.URL = URL;
235 this.user = user;
236 this.password = password;
237 this.maxConn = maxConn;
238 } 
239 
240 /** 
241 * 灝嗕笉鍐嶄嬌鐢ㄧ殑榪炴帴榪斿洖緇欒繛鎺ユ睜 
242 * 
243 * @param con 瀹㈡埛紼嬪簭閲婃斁鐨勮繛鎺?nbsp;
244 */ 
245 public synchronized void freeConnection(Connection con) { 
246 // 灝嗘寚瀹氳繛鎺ュ姞鍏ュ埌鍚戦噺鏈熬 
247 freeConnections.addElement(con);
248 checkedOut--;
249 notifyAll();
250 } 
251 
252 /** 
253 * 浠庤繛鎺ユ睜鑾峰緱涓涓彲鐢ㄨ繛鎺?濡傛病鏈夌┖闂茬殑榪炴帴涓斿綋鍓嶈繛鎺ユ暟灝忎簬鏈澶ц繛鎺?nbsp;
254 * 鏁伴檺鍒?鍒欏垱寤烘柊榪炴帴.濡傚師鏉ョ櫥璁頒負鍙敤鐨勮繛鎺ヤ笉鍐嶆湁鏁?鍒欎粠鍚戦噺鍒犻櫎涔? 
255 * 鐒跺悗閫掑綊璋冪敤鑷繁浠ュ皾璇曟柊鐨勫彲鐢ㄨ繛鎺? 
256 */ 
257 public synchronized Connection getConnection() { 
258 Connection con = null;
259 if (freeConnections.size()>
0) { 
260 // 鑾峰彇鍚戦噺涓涓涓彲鐢ㄨ繛鎺?nbsp;
261 con = (Connection) freeConnections.firstElement();
262 freeConnections.removeElementAt(0);
263 try { 
264 if (con.isClosed()) { 
265 log("浠庤繛鎺ユ睜" + name+"鍒犻櫎涓涓棤鏁堣繛鎺?);
266 // 閫掑綊璋冪敤鑷繁,灝濊瘯鍐嶆鑾峰彇鍙敤榪炴帴 
267 con = getConnection();
268 } 
269 } 
270 catch (SQLException e) { 
271 log("浠庤繛鎺ユ睜" + name+"鍒犻櫎涓涓棤鏁堣繛鎺?);
272 // 閫掑綊璋冪敤鑷繁,灝濊瘯鍐嶆鑾峰彇鍙敤榪炴帴 
273 con = getConnection();
274 } 
275 } 
276 else if (maxConn == 0 || checkedOut
<maxConn) { 
277 con = newConnection(); 
278 } 
279 if (con != null) { 
280 checkedOut++; 
281 } 
282 return con; 
283 } 
284 
285 /** 
286 * 浠庤繛鎺ユ睜鑾峰彇鍙敤榪炴帴.鍙互鎸囧畾瀹㈡埛紼嬪簭鑳藉絳夊緟鐨勬渶闀挎椂闂?nbsp;
287 * 鍙傝鍓嶄竴涓猤etConnection()鏂規硶. 
288 * 
289 * @param timeout 浠ユ縐掕鐨勭瓑寰呮椂闂撮檺鍒?nbsp;
290 */ 
291 public synchronized Connection getConnection(long timeout) { 
292 long startTime = new Date().getTime(); 
293 Connection con; 
294 while ((con = getConnection()) == null) { 
295 try { 
296 wait(timeout); 
297 } 
298 catch (InterruptedException e) {} 
299 if ((new Date().getTime() - startTime)>
= timeout) { 
300 // wait()榪斿洖鐨勫師鍥犳槸瓚呮椂 
301 return null;
302 } 
303 } 
304 return con;
305 } 
306 
307 /** 
308 * 鍏抽棴鎵鏈夎繛鎺?nbsp;
309 */ 
310 public synchronized void release() { 
311 Enumeration allConnections = freeConnections.elements();
312 while (allConnections.hasMoreElements()) { 
313 Connection con = (Connection) allConnections.nextElement();
314 try { 
315 con.close();
316 log("鍏抽棴榪炴帴姹? + name+"涓殑涓涓繛鎺?);
317 } 
318 catch (SQLException e) { 
319 log(e, "鏃犳硶鍏抽棴榪炴帴姹? + name+"涓殑榪炴帴");
320 } 
321 } 
322 freeConnections.removeAllElements();
323 } 
324 
325 /** 
326 * 鍒涘緩鏂扮殑榪炴帴 
327 */ 
328 private Connection newConnection() { 
329 Connection con = null;
330 try { 
331 if (user == null) { 
332 con = DriverManager.getConnection(URL);
333 } 
334 else { 
335 con = DriverManager.getConnection(URL, user, password);
336 } 
337 log("榪炴帴姹? + name+"鍒涘緩涓涓柊鐨勮繛鎺?);
338 } 
339 catch (SQLException e) { 
340 log(e, "鏃犳硶鍒涘緩涓嬪垪URL鐨勮繛鎺? " + URL);
341 return null;
342 } 
343 return con;
344 } 
345 } 
346 } 


涓夈佺被DBConnectionPool璇存槑 

璇ョ被鍦?09鑷?45琛屽疄鐜幫紝瀹冭〃紺烘寚鍚戞煇涓暟鎹簱鐨勮繛鎺ユ睜銆傛暟鎹簱鐢盝DBC URL鏍囪瘑銆備竴涓狫DBC URL鐢變笁閮ㄥ垎緇勬垚錛氬崗璁爣璇嗭紙鎬繪槸jdbc錛夛紝椹卞姩紼嬪簭鏍囪瘑錛堝 odbc銆乮db銆乷racle絳夛級錛屾暟鎹簱鏍囪瘑錛堝叾鏍煎紡渚濊禆浜庨┍鍔ㄧ▼搴忥級銆備緥濡傦紝jdbc:odbc:demo錛屽嵆鏄竴涓寚鍚慸emo鏁版嵁搴撶殑JDBC URL錛岃屼笖璁塊棶璇ユ暟鎹簱瑕佷嬌鐢↗DBC-ODBC椹卞姩紼嬪簭銆傛瘡涓繛鎺ユ睜閮芥湁涓涓緵瀹㈡埛紼嬪簭浣跨敤鐨勫悕瀛椾互鍙婂彲閫夌殑鐢ㄦ埛甯愬彿銆佸瘑鐮併佹渶澶ц繛鎺ユ暟闄愬埗銆傚鏋淲eb搴旂敤紼嬪簭鎵鏀寔鐨勬煇浜涙暟鎹簱鎿嶄綔鍙互琚墍鏈夌敤鎴鋒墽琛岋紝鑰屽叾瀹冧竴浜涙搷浣滃簲鐢辯壒鍒鍙殑鐢ㄦ埛鎵ц錛屽垯鍙互涓轟袱綾繪搷浣滃垎鍒畾涔夎繛鎺ユ睜錛屼袱涓繛鎺ユ睜浣跨敤鐩稿悓鐨凧DBC URL錛屼絾浣跨敤涓嶅悓鐨勫笎鍙峰拰瀵嗙爜銆?nbsp;
綾籇BConnectionPool鐨勫緩鏋勫嚱鏁伴渶瑕佷笂榪版墍鏈夋暟鎹綔涓哄叾鍙傛暟銆傚222鑷?38琛屾墍紺猴紝榪欎簺鏁版嵁琚繚瀛樹負瀹冪殑瀹炰緥鍙橀噺錛?nbsp;
濡?52鑷?83琛屻?85鑷?05琛屾墍紺猴紝 瀹㈡埛紼嬪簭鍙互浣跨敤DBConnectionPool綾繪彁渚涚殑涓や釜鏂規硶鑾峰彇鍙敤榪炴帴銆備袱鑰呯殑鍏卞悓涔嬪鍦ㄤ簬錛氬榪炴帴姹犱腑瀛樺湪鍙敤榪炴帴錛屽垯鐩存帴榪斿洖錛屽惁鍒欏垱寤烘柊鐨勮繛鎺ュ茍榪斿洖銆傚鏋滄病鏈夊彲鐢ㄨ繛鎺ヤ笖宸叉湁榪炴帴鎬繪暟絳変簬鏈澶ч檺鍒舵暟錛岀涓涓柟娉曞皢鐩存帴榪斿洖null錛岃岀浜屼釜鏂規硶灝嗙瓑寰呯洿鍒版湁鍙敤榪炴帴涓烘銆?nbsp;
鎵鏈夌殑鍙敤榪炴帴瀵硅薄鍧囩櫥璁板湪鍚嶄負freeConnections鐨勫悜閲忥紙Vector錛変腑銆傚鏋滃悜閲忎腑鏈夊浜庝竴涓殑榪炴帴錛実etConnection()鎬繪槸閫夊彇絎竴涓傚悓鏃訛紝鐢變簬鏂扮殑鍙敤榪炴帴鎬繪槸浠庡熬閮ㄥ姞鍏ュ悜閲忥紝浠庤屼嬌寰楁暟鎹簱榪炴帴鐢變簬闀挎椂闂撮棽緗岃鍏抽棴鐨勯闄╁噺浣庡埌鏈灝忕▼搴︺?nbsp;
絎竴涓猤etConnection()鍦ㄨ繑鍥炲彲鐢ㄨ繛鎺ョ粰瀹㈡埛紼嬪簭涔嬪墠錛岃皟鐢ㄤ簡isClosed()鏂規硶楠岃瘉榪炴帴浠嶆棫鏈夋晥銆傚鏋滆榪炴帴琚叧闂垨瑙﹀彂寮傚父錛実etConnection()閫掑綊鍦拌皟鐢ㄨ嚜宸變互灝濊瘯鑾峰彇鍙﹀鐨勫彲鐢ㄨ繛鎺ャ傚鏋滃湪鍚戦噺freeConnections涓笉瀛樺湪浠諱綍鍙敤榪炴帴錛実etConnection()鏂規硶媯鏌ユ槸鍚﹀凡緇忔寚瀹氭渶澶ц繛鎺ユ暟闄愬埗銆傚宸茬粡鎸囧畾錛屽垯媯鏌ュ綋鍓嶈繛鎺ユ暟鏄惁宸茬粡鍒拌揪鏋侀檺銆傛澶刴axConn涓?琛ㄧず娌℃湁闄愬埗銆傚鏋滄病鏈夋寚瀹氭渶澶ц繛鎺ユ暟闄愬埗鎴栧綋鍓嶈繛鎺ユ暟灝忎簬璇ュ鹼紝璇ユ柟娉曞皾璇曞垱寤烘柊鐨勮繛鎺ャ傚鍒涘緩鎴愬姛錛屽垯澧炲姞宸蹭嬌鐢ㄨ繛鎺ョ殑璁℃暟騫惰繑鍥烇紝鍚﹀垯榪斿洖絀哄箋?nbsp;
濡?25鑷?45琛屾墍紺猴紝鍒涘緩鏂拌繛鎺ョ敱newConnection()鏂規硶瀹炵幇銆傚垱寤鴻繃紼嬩笌鏄惁宸茬粡鎸囧畾鏁版嵁搴撳笎鍙楓佸瘑鐮佹湁鍏熾?nbsp;
JDBC鐨凞riverManager綾繪彁渚涘涓猤etConnection()鏂規硶錛岃繖浜涙柟娉曡鐢ㄥ埌JDBC URL涓庡叾瀹冧竴浜涘弬鏁幫紝濡傜敤鎴峰笎鍙峰拰瀵嗙爜絳夈侱riverManager灝嗕嬌鐢ㄦ寚瀹氱殑JDBC URL紜畾閫傚悎浜庣洰鏍囨暟鎹簱鐨勯┍鍔ㄧ▼搴忓強寤虹珛榪炴帴銆?nbsp;
鍦?85鑷?05琛屽疄鐜扮殑絎簩涓猤etConnection()鏂規硶闇瑕佷竴涓互姣涓哄崟浣嶇殑鏃墮棿鍙傛暟錛岃鍙傛暟琛ㄧず瀹㈡埛紼嬪簭鑳藉絳夊緟鐨勬渶闀挎椂闂淬傚緩绔嬭繛鎺ョ殑鍏蜂綋鎿嶄綔浠嶆棫鐢辯涓涓猤etConnection()鏂規硶瀹炵幇銆?nbsp;
璇ユ柟娉曟墽琛屾椂鍏堝皢startTime鍒濆鍖栦負褰撳墠鏃墮棿銆傚湪while寰幆涓皾璇曡幏寰椾竴涓繛鎺ャ傚鏋滃け璐ワ紝鍒欎互緇欏畾鐨勬椂闂村間負鍙傛暟璋冪敤wait()銆倃ait()鐨勮繑鍥炲彲鑳芥槸鐢變簬鍏跺畠綰跨▼璋冪敤notify()鎴杗otifyAll()錛屼篃鍙兘鏄敱浜庨瀹氭椂闂村凡鍒般備負鎵懼嚭wait()榪斿洖鐨勭湡姝e師鍥狅紝紼嬪簭鐢ㄥ綋鍓嶆椂闂村噺寮濮嬫椂闂達紙startTime錛夛紝濡傚樊鍊煎ぇ浜庨瀹氭椂闂村垯榪斿洖絀哄鹼紝鍚﹀垯鍐嶆璋冪敤getConnection()銆?nbsp;
鎶婄┖闂茬殑榪炴帴鐧昏鍒拌繛鎺ユ睜鐢?40鑷?50琛岀殑freeConnection()鏂規硶瀹炵幇錛屽畠鐨勫弬鏁頒負榪斿洖緇欒繛鎺ユ睜鐨勮繛鎺ュ璞°傝瀵硅薄琚姞鍏ュ埌freeConnections鍚戦噺鐨勬湯灝撅紝鐒跺悗鍑忓皯宸蹭嬌鐢ㄨ繛鎺ヨ鏁般傝皟鐢╪otifyAll()鏄負浜嗛氱煡鍏跺畠姝e湪絳夊緟鍙敤榪炴帴鐨勭嚎紼嬨?nbsp;
璁稿Servlet寮曟搸涓哄疄鐜板畨鍏ㄥ叧闂彁渚涘縐嶆柟娉曘傛暟鎹簱榪炴帴姹犻渶瑕佺煡閬撹浜嬩歡浠ヤ繚璇佹墍鏈夎繛鎺ヨ兘澶熸甯稿叧闂侱BConnectionManager綾昏礋鍗忚皟鏁翠釜鍏抽棴榪囩▼錛屼絾鍏抽棴榪炴帴姹犱腑鎵鏈夎繛鎺ョ殑浠誨姟鍒欑敱DBConnectionPool綾昏礋璐c傚湪307鑷?23琛屽疄鐜扮殑release()鏂規硶渚汥BConnectionManager璋冪敤銆傝鏂規硶閬嶅巻freeConnections鍚戦噺騫跺叧闂墍鏈夎繛鎺ワ紝鐒跺悗浠庡悜閲忎腑鍒犻櫎榪欎簺榪炴帴銆?nbsp;


鍥涖佺被DBConnectionManager 璇存槑 

璇ョ被鍙兘鍒涘緩涓涓疄渚嬶紝鍏跺畠瀵硅薄鑳藉璋冪敤鍏墮潤鎬佹柟娉曪紙涔熺О涓虹被鏂規硶錛夎幏寰楄鍞竴瀹炰緥鐨勫紩鐢ㄣ傚031鑷?36琛屾墍紺猴紝DBConnectionManager綾葷殑寤烘瀯鍑芥暟鏄鏈夌殑錛岃繖鏄負浜嗛伩鍏嶅叾瀹冨璞″垱寤鴻綾葷殑瀹炰緥銆?nbsp;
DBConnectionManager綾葷殑瀹㈡埛紼嬪簭鍙互璋冪敤getInstance()鏂規硶鑾峰緱瀵硅綾誨敮涓瀹炰緥鐨勫紩鐢ㄣ傚018鑷?29琛屾墍紺猴紝綾葷殑鍞竴瀹炰緥鍦╣etInstance()鏂規硶絎竴嬈¤璋冪敤鏈熼棿鍒涘緩錛屾鍚庡叾寮曠敤灝變竴鐩翠繚瀛樺湪闈欐佸彉閲廼nstance涓傛瘡嬈¤皟鐢╣etInstance()閮藉鍔犱竴涓狣BConnectionManager鐨勫鎴風▼搴忚鏁般傚嵆錛岃璁℃暟浠h〃寮曠敤DBConnectionManager鍞竴瀹炰緥鐨勫鎴風▼搴忔繪暟錛屽畠灝嗚鐢ㄤ簬鎺у埗榪炴帴姹犵殑鍏抽棴鎿嶄綔銆?nbsp;
璇ョ被瀹炰緥鐨勫垵濮嬪寲宸ヤ綔鐢?46鑷?68琛屼箣闂寸殑縐佹湁鏂規硶init()瀹屾垚銆傚叾涓?nbsp;getResourceAsStream()鏂規硶鐢ㄤ簬瀹氫綅騫舵墦寮澶栭儴鏂囦歡銆傚閮ㄦ枃浠剁殑瀹氫綅鏂規硶渚濊禆浜庣被瑁呰澆鍣ㄧ殑瀹炵幇銆傛爣鍑嗙殑鏈湴綾昏杞藉櫒鏌ユ壘鎿嶄綔鎬繪槸寮濮嬩簬綾繪枃浠舵墍鍦ㄨ礬寰勶紝涔熻兘澶熸悳绱LASSPATH涓0鏄庣殑璺緞銆俤b.properties鏄竴涓睘鎬ф枃浠訛紝瀹冨寘鍚畾涔夎繛鎺ユ睜鐨勯敭-鍊煎銆傚彲渚涘畾涔夌殑鍏敤灞炴у涓嬶細 

drivers 浠ョ┖鏍煎垎闅旂殑JDBC椹卞姩紼嬪簭綾誨垪琛?nbsp;
logfile 鏃ュ織鏂囦歡鐨勭粷瀵硅礬寰?nbsp;

鍏跺畠鐨勫睘鎬у拰鐗瑰畾榪炴帴姹犵浉鍏籌紝鍏跺睘鎬у悕瀛楀墠搴斿姞涓婅繛鎺ユ睜鍚嶅瓧錛?BR><poolname>
.url 鏁版嵁搴撶殑 JDBC URL
<poolname>
.maxconn 鍏佽寤虹珛鐨勬渶澶ц繛鎺ユ暟錛?琛ㄧず娌℃湁闄愬埗
<poolname>
.user 鐢ㄤ簬璇ヨ繛鎺ユ睜鐨勬暟鎹簱甯愬彿
<poolname>
.password 鐩稿簲鐨勫瘑鐮?nbsp;

鍏朵腑url灞炴ф槸蹇呴渶鐨勶紝鑰屽叾瀹冨睘鎬у垯鏄彲閫夌殑銆傛暟鎹簱甯愬彿鍜屽瘑鐮佸繀欏誨悎娉曘傜敤浜嶹indows騫沖彴鐨刣b.properties鏂囦歡紺轟緥濡備笅錛?nbsp;

drivers=sun.jdbc.odbc.JdbcOdbcDriver jdbc.idbDriver 
logfile=D:\\user\\src\\java\\DBConnectionManager\\log.txt 

idb.url=jdbc:idb:c:\\local\\javawebserver1.1\\db\\db.prp 
idb.maxconn=2 

access.url=jdbc:odbc:demo 
access.user=demo 
access.password=demopw 

娉ㄦ剰鍦╓indows璺緞涓殑鍙嶆枩鏉犲繀欏昏緭鍏?涓紝榪欐槸鐢變簬灞炴ф枃浠朵腑鐨勫弽鏂滄潬鍚屾椂涔熸槸涓涓漿涔夊瓧絎︺?nbsp;
init()鏂規硶鍦ㄥ垱寤哄睘鎬у璞″茍璇誨彇db.properties鏂囦歡涔嬪悗錛屽氨寮濮嬫鏌ogfile灞炴с傚鏋滃睘鎬ф枃浠朵腑娌℃湁鎸囧畾鏃ュ織鏂囦歡錛屽垯榛樿涓哄綋鍓嶇洰褰曚笅鐨凞BConnectionManager.log鏂囦歡銆傚鏃ュ織鏂囦歡鏃犳硶浣跨敤錛屽垯鍚慡ystem.err杈撳嚭鏃ュ織璁板綍銆?nbsp;
瑁呰澆鍜屾敞鍐屾墍鏈夊湪drivers灞炴т腑鎸囧畾鐨凧DBC椹卞姩紼嬪簭鐢?70鑷?92琛屼箣闂寸殑loadDrivers()鏂規硶瀹炵幇銆傝鏂規硶鍏堢敤StringTokenizer灝哾rivers灞炴у煎垎鍓蹭負瀵瑰簲浜庨┍鍔ㄧ▼搴忓悕縐扮殑瀛楃涓詫紝鐒跺悗渚濇瑁呰澆榪欎簺綾誨茍鍒涘緩鍏跺疄渚嬶紝鏈鍚庡湪 DriverManager涓敞鍐岃瀹炰緥騫舵妸瀹冨姞鍏ュ埌涓涓鏈夌殑鍚戦噺drivers銆傚悜閲廳rivers灝嗙敤浜庡叧闂湇鍔℃椂浠嶥riverManager鍙栨秷鎵鏈塉DBC 椹卞姩紼嬪簭鐨勬敞鍐屻?nbsp;
init()鏂規硶鐨勬渶鍚庝竴涓換鍔℃槸璋冪敤縐佹湁鏂規硶createPools()鍒涘緩榪炴帴姹犲璞°傚109鑷?42琛屾墍紺猴紝createPools()鏂規硶鍏堝垱寤烘墍鏈夊睘鎬у悕瀛楃殑鏋氫婦瀵硅薄錛堝嵆Enumeration瀵硅薄錛岃瀵硅薄鍙互鎯寵薄涓轟竴涓厓绱犵郴鍒楋紝閫愭璋冪敤鍏秐extElement()鏂規硶灝嗛『搴忚繑鍥炲悇鍏冪礌錛夛紝鐒跺悗鍦ㄥ叾涓悳绱㈠悕瀛椾互鈥?url鈥濈粨灝劇殑灞炴с傚浜庢瘡涓涓鍚堟潯浠剁殑灞炴э紝鍏堟彁鍙栧叾榪炴帴姹犲悕瀛楅儴鍒嗭紝榪涜岃鍙栨墍鏈夊睘浜庤榪炴帴姹犵殑灞炴э紝鏈鍚庡垱寤鴻繛鎺ユ睜瀵硅薄騫舵妸瀹冧繚瀛樺湪瀹炰緥鍙橀噺pools涓傛暎鍒楄〃錛圚ashtable綾?nbsp;錛塸ools瀹炵幇榪炴帴姹犲悕瀛楀埌榪炴帴姹犲璞′箣闂寸殑鏄犲皠錛屾澶勪互榪炴帴姹犲悕瀛椾負閿紝榪炴帴姹犲璞′負鍊箋?nbsp;
涓轟究浜庡鎴風▼搴忎粠鎸囧畾榪炴帴姹犺幏寰楀彲鐢ㄨ繛鎺ユ垨灝嗚繛鎺ヨ繑鍥炵粰榪炴帴姹狅紝綾籇BConnectionManager鎻愪緵浜嗘柟娉昰etConnection()鍜宖reeConnection()銆傛墍鏈夎繖浜涙柟娉曢兘瑕佹眰鍦ㄥ弬鏁頒腑鎸囧畾榪炴帴姹犲悕瀛楋紝鍏蜂綋鐨勮繛鎺ヨ幏鍙栨垨榪斿洖鎿嶄綔鍒欒皟鐢ㄥ搴旂殑榪炴帴姹犲璞″畬鎴愩傚畠浠殑瀹炵幇鍒嗗埆鍦?51鑷?64琛屻?66鑷?80琛屻?38鑷?49琛屻?nbsp;
濡?82鑷?07琛屾墍紺猴紝涓哄疄鐜拌繛鎺ユ睜鐨勫畨鍏ㄥ叧闂紝DBConnectionManager鎻愪緵浜嗘柟娉時elease()銆傚湪涓婇潰鎴戜滑宸茬粡鎻愬埌錛屾墍鏈塂BConnectionManager鐨勫鎴風▼搴忛兘搴旇璋冪敤闈欐佹柟娉昰etInstance()浠ヨ幏寰楄綆$悊鍣ㄧ殑寮曠敤錛屾璋冪敤灝嗗鍔犲鎴風▼搴忚鏁般傚鎴風▼搴忓湪鍏抽棴鏃惰皟鐢╮elease()鍙互閫掑噺璇ヨ鏁般傚綋鏈鍚庝竴涓鎴風▼搴忚皟鐢╮elease()錛岄掑噺鍚庣殑寮曠敤璁℃暟涓?錛屽氨鍙互璋冪敤鍚勪釜榪炴帴姹犵殑release()鏂規硶鍏抽棴鎵鏈夎繛鎺ヤ簡銆傜鐞嗙被release()鏂規硶鏈鍚庣殑浠誨姟鏄挙閿鎵鏈塉DBC椹卞姩紼嬪簭鐨勬敞鍐屻?nbsp;


浜斻丼ervlet浣跨敤榪炴帴姹犵ず渚?nbsp;

Servlet API鎵瀹氫箟鐨凷ervlet鐢熷懡鍛ㄦ湡綾誨錛?nbsp;

1) 鍒涘緩騫跺垵濮嬪寲Servlet錛坕nit()鏂規硶錛夈?nbsp;
2) 鍝嶅簲瀹㈡埛紼嬪簭鐨勬湇鍔¤姹傦紙service()鏂規硶錛夈?nbsp;
3) Servlet緇堟榪愯錛岄噴鏀炬墍鏈夎祫婧愶紙destroy()鏂規硶錛夈?nbsp;

鏈緥婕旂ず榪炴帴姹犲簲鐢紝涓婅堪鍏抽敭姝ラ涓殑鐩稿叧鎿嶄綔涓猴細 

1) 鍦╥nit()錛岀敤瀹炰緥鍙橀噺connMgr 淇濆瓨璋冪敤DBConnectionManager.getInstance()鎵榪斿洖鐨勫紩鐢ㄣ?nbsp;
2) 鍦╯ervice()錛岃皟鐢╣etConnection()錛屾墽琛屾暟鎹簱鎿嶄綔錛岀敤freeConnection()灝嗚繛鎺ヨ繑鍥炵粰榪炴帴姹犮?nbsp;
3) 鍦╠estroy()錛岃皟鐢╮elease()鍏抽棴鎵鏈夎繛鎺ワ紝閲婃斁鎵鏈夎祫婧愩?nbsp;

紺轟緥紼嬪簭娓呭崟濡備笅錛?nbsp;

import java.io.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class TestServlet extends HttpServlet { 
private DBConnectionManager connMgr;

public void init(ServletConfig conf) throws ServletException { 
super.init(conf);
connMgr = DBConnectionManager.getInstance();


public void service(HttpServletRequest req, HttpServletResponse res) 
throws IOException { 

res.setContentType("text/html");
PrintWriter out = res.getWriter();
Connection con = connMgr.getConnection("idb");
if (con == null) { 
out.println("涓嶈兘鑾峰彇鏁版嵁搴撹繛鎺?");
return;

ResultSet rs = null;
ResultSetMetaData md = null;
Statement stmt = null;
try { 
stmt = con.createStatement();
rs = stmt.executeQuery("SELECT * FROM EMPLOYEE");
md = rs.getMetaData();
out.println("
<H1>
鑱屽伐鏁版嵁
</H1>
");
while (rs.next()) { 
out.println("
<BR>
");
for (int i = 1;i"
<md.getColumnCount();i++) { 
out.print(rs.getString(i) + ", ");


stmt.close();
rs.close();

catch (SQLException e) { 
e.printStackTrace(out);

connMgr.freeConnection("idb", con);


public void destroy() { 
connMgr.release();
super.destroy();

}


涓嶈錛岃繖涓嶆槸鎴戣鎵劇殑錛屾垜瑕佸啀浠?A HREF="/searchInternet.asp?query=鐢ㄨ繛鎺ユ睜鎻愰珮Servlet璁塊棶鏁版嵁搴撶殑鏁堢巼" target=_blank>浠庝簰鑱旂綉涓婃悳绱笌姝ょ浉鍏崇殑鍐呭


aiyoyoyo 2006-02-17 16:43 鍙戣〃璇勮
]]>
java瑙e喅鍥介檯鍖栭棶棰橈紙ResourceBundle錛?/title><link>http://m.tkk7.com/aiyoyoyo/articles/31215.html</link><dc:creator>aiyoyoyo</dc:creator><author>aiyoyoyo</author><pubDate>Fri, 17 Feb 2006 08:12:00 GMT</pubDate><guid>http://m.tkk7.com/aiyoyoyo/articles/31215.html</guid><wfw:comment>http://m.tkk7.com/aiyoyoyo/comments/31215.html</wfw:comment><comments>http://m.tkk7.com/aiyoyoyo/articles/31215.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/aiyoyoyo/comments/commentRss/31215.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/aiyoyoyo/services/trackbacks/31215.html</trackback:ping><description><![CDATA[<H3 class=title>    鍦ㄧ敤Java瑙e喅鍥介檯鍖栭棶棰樼殑榪囩▼涓紝鍙兘鍒╃敤鍒扮殑涓昏鐨勭被閮芥槸鐢眏ava.util鍖呮彁渚涚殑銆傝綾誨寘涓浉鍏崇殑綾繪湁Locale銆丷esourceBundle銆丩istResourceBundle銆丳ropertyResourceBundle絳夈?BR>    Locale錛氳綾誨寘鍚涓昏鍦扮悊鍖哄煙鐨勫湴鍩熷寲鐗瑰緛鐨勫皝瑁呫傚叾鐗瑰畾瀵硅薄琛ㄧず鏌愪竴鐗瑰畾鐨勫湴鐞嗐佹斂娌繪垨鏂囧寲鍖哄煙銆傞氳繃璁懼畾Locale錛屾垜浠彲浠ヤ負鐗瑰畾鐨勫浗瀹舵垨鍦板尯鎻愪緵絎﹀悎褰撳湴鏂囧寲涔犳儻鐨勫瓧浣撱佺鍙楓佸浘鏍囧拰琛ㄨ揪鏍煎紡銆備緥濡傦紝鎴戜滑鍙互閫氳繃鑾峰緱鐗瑰畾Locale涓嬬殑Calendar綾葷殑瀹炰緥錛屾樉紺虹鍚堢壒瀹氳〃杈炬牸寮忕殑鏃ユ湡銆?BR>    ResourceBundle錛氳綾繪槸涓涓娊璞$被錛岄渶瑕侀氳繃闈欐佹柟娉昍esourceBundle.getBundle()鎸囧畾鍏蜂綋瀹炵幇綾繪垨灞炴ф枃浠剁殑鍩烘湰鍚嶇О銆傚熀鏈悕縐頒細鍗忓悓鎸囧畾鐨勬垨榛樿鐨凩ocale綾伙紝鍐沖畾鍏蜂綋璋冪敤鐨勭被鎴栧睘鎬ф枃浠剁殑鍞竴鍚嶇О銆備緥濡傦細鎸囧畾鍩烘湰綾繪垨灞炴ф枃浠跺悕縐頒負TestBundle錛岃屾寚瀹氱殑Locale鏄疌HINESE錛岄偅涔堟渶閫傚悎鍖歸厤鐨勭被鍚嶇О涓篢estBundle_zh_CN.class錛岃屾渶浣沖尮閰嶅睘鎬ф枃浠跺悕縐頒負TestBundle_zh_CN.properties銆傛寜鐓ava Doc鍜岀浉鍏蟲枃妗g殑瑕佹眰錛屽鏋滆綾繪垨灞炴ф枃浠舵病鏈夋壘鍒幫紝緋葷粺浼氭煡鎵捐繎浼煎尮閰嶏紙涓繪枃浠跺悕渚濇涓篢estBundle_zh鍜孴estBundle鐨勭被鎴栧睘鎬ф枃浠訛級銆傝綾繪彁渚涚殑getKeys()鏂規硶鐢ㄤ簬鑾峰緱鎵鏈夋垚鍛樼殑閿悕錛屽茍鎻愪緵handleGetObject鏂規硶鑾峰緱鎸囧畾閿殑瀵瑰簲鍏冪礌銆?BR>    ListResourceBundle錛氳綾葷戶鎵縍esourceBundle綾伙紝涓昏鏄鍔犱簡涓浜涗究浜庢搷浣滅殑鎴愬垎錛屼絾榪樻槸鎶借薄綾匯傚鏋滃笇鏈涗嬌鐢ㄧ被鐨勬柟寮忓疄鐜板叿浣撶殑ResourceBundle錛屼竴鑸儏鍐典笅鏈濂界戶鎵胯繖涓被銆?BR>    PropertyResourceBundle錛氳綾諱篃緇ф壙ResourceBundle綾伙紝鍙互瀹炰緥鍖栥傝綾葷殑琛屼負鐗瑰緛濡傚悓java.util.properties綾伙紝鍙互浠庤緭鍏ユ祦涓幏寰楀叿浣撳睘鎬у銆?BR>    浣跨敤PropertyResourceBundle綾昏幏寰楀綋鍦扮増鏈殑鍥介檯鍖栦俊鎭紝閮ㄥ垎浠g爜濡備笅鈥︹?BR>    public static final String BASE_PROP_FILE = 鈥淒ISP鈥?<BR>銆銆public static final String SUFFIX = 鈥?properties鈥?<BR>銆銆locale = Locale.getDefault();<BR>銆銆String propFile = BASE_PROP_FILE 錛?鈥淿鈥?錛?locale.toString()錛?SUFFIX;<BR>銆銆ResourceBundle rb;<BR>銆銆try {<BR>銆銆銆File file = new File(propFile);<BR>銆銆銆if (file.exists()) {<BR>  銆銆銆is = new FileInputStream(file);<BR>   銆銆 rb = new PropertyResourceBundle(is);<BR>   銆銆 if (rb == null) System.out.println(鈥淣o Resource鈥?;<BR>銆銆銆}<BR>銆銆} catch (IOException ioe) {<BR>銆銆銆System.out.println(鈥淓rror open file named 鈥?錛?propFile);<BR>銆銆}<BR>銆銆Enumeration e = rb.getKeys();<BR>銆銆while (e.hasMoreElements()){<BR>銆銆銆key = (String)e.nextElement();<BR>銆銆銆value = (String)rb.handleGetObject(key); <BR>銆銆銆System.out.println(鈥淜EY: 鈥?錛?key 錛嬧?Value: 鈥?錛?value);<BR>銆銆}<BR>銆銆鈥︹?BR>銆銆DISP_zh_TW.properties鏂囦歡鐨勫叿浣撳唴瀹瑰涓嬶細<BR>銆銆Key1=鍙互<BR>銆銆Key2=鎾ら攢<BR>    絳夊彿鍚庨潰鏄埄鐢╪ative2ascii紼嬪簭杞寲鍚庣殑綣佷綋姹夊瓧錛屽鏋滀笉榪涜杞寲錛岀郴緇熷彲鑳芥樉紺轟貢鐮併?BR>     <BR>    澶勭悊鎻愮ず鍜屽府鍔?BR>    瀵逛簬鎻愮ず璇█鍜屽府鍔╂枃浠墮儴鍒嗭紝鍙互鎶婅璦鏄犲皠鏀懼湪灞炴ф枃浠舵垨鑰匧istResourceBundle綾葷殑瀛愮被涓備笅闈㈢▼搴忔槸涓涓猄ervlet錛屽畠閫氳繃鎺ュ彈瀹㈡埛绔殑閫夋嫨錛屾妸鐗瑰畾璇█鍜屽瓧絎︾増鏈殑淇℃伅榪斿洖鍒板鎴風銆傘銆public class ProcessServlet extends HttpServlet <BR>銆銆{ //榛樿璇█涓轟腑鏂?BR>銆銆銆public static final String DEFAULT_LANGUAGE = 鈥渮h鈥? <BR>銆銆銆//榛樿瀛楃闆嗕負綆浣撲腑鏂?BR>銆銆銆public static final String DEFAULT_COUNTRY = 鈥淐N鈥? <BR>銆銆銆public void service(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException {<BR>銆銆 HttpSession session = req.getSession(true);<BR>銆銆 // 浠庡鎴風鏀跺埌鐨勬寚瀹氳璦鍜屽瓧絎︾殑鍙傛暟搴斿綋涓嶴un鍏徃鐩稿叧瑙勫畾涓鑷?BR>銆銆 String lang = req.getParameter(鈥渓anguage鈥?;<BR>銆銆 String country = req.getParameter(鈥渃ountry鈥?;<BR>銆銆 if (lang == null) {<BR>       //濡傛灉娌℃湁鏀跺埌鍙傛暟錛屽氨璇曞浘浠嶴ession閲岃幏寰?BR>  銆銆 lang = (String) session.getAttribute(鈥渓anguage鈥?;<BR>  銆銆 country = (String) session.getAttribute(鈥渃ountry鈥?;<BR>銆銆 } else {<BR>  銆銆 session.setAttribute(鈥渓anguage鈥? lang);<BR>  銆銆 session.setAttribute(鈥渃ountry鈥? country);<BR>銆銆 }<BR>銆銆 if (lang == null){<BR>       //濡傛灉鏃犳硶浠庝笂榪版墜孌靛緱鍒拌璦鍜屽瓧絎︿俊鎭紝灝變嬌鐢ㄩ粯璁ゅ?BR>  銆銆 lang = DEFAULT_LANGUAGE;<BR>  銆銆 country = DEFAULT_COUNTRY<BR>  銆銆 session.setAttribute(鈥渓anguage鈥? lang);<BR>銆 銆銆session.setAttribute(鈥渃ountry鈥? country);<BR>銆銆 }<BR>銆銆 Locale locale = null;<BR>銆銆 ResourceBundle bundle = null;<BR>銆銆 try {<BR>  銆銆 locale = new Locale(lang, country);<BR>  銆 } catch (Exception e) {<BR>    銆 System.out.println(鈥淣o locale with鈥?錛?country 錛?鈥淿鈥?錛?lang);<BR>  銆銆 locale = Locale.getDefault();<BR>  銆 }<BR>  銆 try {<BR>       bundle = ResourceBundle.getBundle(鈥淒isplayList鈥? locale);<BR>銆銆 } catch( MissingResourceException e) {<BR>  銆銆 System.out.println( 鈥淣o resources available for locale 鈥?錛?locale);<BR>  銆銆 bundle = ResourceBundle.getBundle(鈥淒isplayList鈥? Locale.US);<BR>銆銆 }<BR>銆銆 res.setContentType(鈥渢ext/html鈥?;<BR>銆銆 PrintWriter out = res.getWriter();<BR>銆銆 out.println(鈥?amp;lt;html&gt;鈥?;<BR>銆銆 out.println(鈥?amp;lt;head&gt;鈥?;<BR>銆銆 String title = bundle.getString(鈥渢itle鈥?;<BR>  銆 String welcome =bundle.getString(鈥渨elcome鈥?;<BR>銆銆 String notice = bundle.getString(鈥渘otice鈥?;<BR>銆銆 out.println(鈥?amp;lt;title&gt;鈥濓紜 title 錛嬧?amp;lt;/title&gt;鈥?;<BR>銆銆 out.println(鈥?amp;lt;/head&gt;鈥?;<BR>銆銆 out.println(鈥?amp;lt;body bgcolor=鈥漺hite鈥?amp;gt;鈥?;<BR>銆銆 out.println(鈥?amp;lt;h3&gt;鈥?錛?welcome 錛?鈥?amp;lt;/h3&gt;鈥?;<BR>銆銆 out.println(鈥?amp;lt;br&gt;鈥?;<BR>銆銆 out.println(鈥?amp;lt;b&gt;鈥?錛?notice 錛嬧?amp;lt;/b&gt;鈥?;<BR>銆銆 out.println(鈥?amp;lt;/body&gt;鈥?;<BR>銆銆 out.println(鈥?amp;lt;/html&gt;鈥?;<BR>銆 }<BR>  }<BR>涓婅堪Servlet浣跨敤鐨勫睘鎬ф枃浠訛紙DisplayList_zh_CN.properties錛夊唴瀹瑰涓嬶細<BR>title=涓枃鐗?BR>welcome=榪欐槸綆浣撲腑鏂囩増闈?BR>notice=綆浣撲腑鏂囨祴璇曟垚鍔?BR>娉ㄦ剰錛氳鏂囦歡鐩存帴閲囩敤浜嗕腑鏂囷紝鑰屼笉鏄粡榪囪漿鍖栫殑Unicode緙栫爜錛岃繖鏄敱浜庡ぇ澶氭暟Web鏈嶅姟鍣ㄤ笉闇瑕佷笂榪拌漿鍖栥?BR>    鍦ㄥ疄闄呬嬌鐢ㄤ腑錛屽鏋淲eb鏈嶅姟鍣ㄦ敮鎸丼ervlet 2.3瑙勮寖錛堝jakarta錛峵omcate 4.0錛夛紝閭d箞涓婇潰鎻愬埌鐨凷ervlet搴斿綋紼嶅姞鏀瑰彉錛屼互浣滀負鍏朵粬Servlet鐨勫鐞嗗櫒浣跨敤銆傚彟澶栵紝濡傛灉鎶奟esourceBundle鐨勭壒瀹氱増鏈瓨鏀懼湪鏃犵姸鎬佷細璇滲ean涓紝灝卞彲浠ュ湪涓瀹氱▼搴︿笂鎻愰珮紼嬪簭鏁堢巼銆?BR>    瀵逛簬鏄劇ず瀛楃鍑虹幇涔辯爜鐨勯棶棰橈紝濡傛灉鏄氳繃灞炴ф枃浠跺疄鐜板浗闄呭寲瑙e喅鏂規錛岄偅涔堝彲鑳芥槸鐩存帴鍦ㄥ睘鎬ф枃浠朵腑鍐欏叆浜嗛潪鏍囧噯ASCII鏂囧瓧銆傝В鍐蟲柟娉曟槸鍒╃敤JDK鎻愪緵鐨勫伐鍏穘ative2ascii.exe鎵弿鎵鏈夊睘鎬ф枃浠訛紝鐢ㄦ壂鎻忕粨鏋滆鐩栧師鏈夋枃浠跺唴瀹廣傚鏋滄垜浠槸鍒╃敤綾繪枃浠跺疄鐜拌漿鎹㈡柟妗堬紝閭d箞闇瑕侀噸鏂扮紪璇戠浉鍏崇被鏂囦歡錛屽茍鍦ㄧ紪璇戞椂鎸囧畾緙栫爜闆嗐備緥濡傦紝緙栬瘧浣跨敤鍥芥爣鐮佺殑綾繪枃浠訛紝閲囩敤鐨勭紪璇戝懡浠ゅ涓嬶細<BR>javac 錛峞ncoding GB2312 your_java_file</H3><img src ="http://m.tkk7.com/aiyoyoyo/aggbug/31215.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/aiyoyoyo/" target="_blank">aiyoyoyo</a> 2006-02-17 16:12 <a href="http://m.tkk7.com/aiyoyoyo/articles/31215.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>JSP涔辯爜瑙e喅錛堣繃铏戝櫒EncodingFilter錛?/title><link>http://m.tkk7.com/aiyoyoyo/articles/31211.html</link><dc:creator>aiyoyoyo</dc:creator><author>aiyoyoyo</author><pubDate>Fri, 17 Feb 2006 08:06:00 GMT</pubDate><guid>http://m.tkk7.com/aiyoyoyo/articles/31211.html</guid><wfw:comment>http://m.tkk7.com/aiyoyoyo/comments/31211.html</wfw:comment><comments>http://m.tkk7.com/aiyoyoyo/articles/31211.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/aiyoyoyo/comments/commentRss/31211.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/aiyoyoyo/services/trackbacks/31211.html</trackback:ping><description><![CDATA[<P>鍋欽SP紼嬪簭鏃墮〉闈紶鐨勬枃瀛楃粡甯告槸涔辯爜錛屽浣曡В鍐沖憿錛?/P> <P>涓縐嶆柟娉曟槸鎶妕omcat涓墍鏈夌殑<Connector>鏍囩鐨刄RIEncoding灞炴ц繘琛岃緗?濡? <Connector port="8000" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GBK" /></P> <P>鑰屽彟涓縐嶆柟娉曞氨鏄啓榪囨護鍣?/P> <P>import javax.servlet.*;<BR>import javax.servlet.http.HttpServletRequest;<BR>import java.io.IOException;</P> <P>public class EncodingFilter implements Filter {<BR>    FilterConfig config = null;<BR>    // default to GBK<BR>    private String targetEncoding = "GBK";</P> <P>    public void init(FilterConfig config) throws ServletException {<BR>        this.config = config;<BR>        this.targetEncoding = config.getInitParameter("encoding");<BR>    }</P> <P>    public void destroy() {<BR>        config = null;<BR>        targetEncoding = null;<BR>    }</P> <P>    public void doFilter(ServletRequest srequest, ServletResponse sresponse,<BR>                         FilterChain chain) throws IOException, ServletException {</P> <P>        HttpServletRequest request = (HttpServletRequest)srequest;<BR>        request.setCharacterEncoding(targetEncoding);<BR>        chain.doFilter(srequest, sresponse);<BR>    }<BR>}</P> <P>閰嶇疆錛氬湪web.xml涓坊鍔?BR>    <filter><BR>        <filter-name>encodingFilter</filter-name><BR>        <filter-class>xx.xx.xx.EncodingFilter</filter-class><BR>        <init-param><BR>            <param-name>encoding</param-name><BR>            <param-value>Shift_JIS</param-value><BR>        </init-param><BR>        <init-param><BR>            <param-name>useragents</param-name><BR>            <param-value>Mac</param-value><BR>        </init-param><BR>    </filter><BR><BR>    <filter-mapping><BR>        <filter-name>encodingFilter</filter-name><BR>        <url-pattern>/*</url-pattern><BR>    </filter-mapping><BR><BR>鑷充簬鏉ヨ嚜浣曞錛屽繕璁頒簡銆傚樋鍢褲傘傘?/P><img src ="http://m.tkk7.com/aiyoyoyo/aggbug/31211.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/aiyoyoyo/" target="_blank">aiyoyoyo</a> 2006-02-17 16:06 <a href="http://m.tkk7.com/aiyoyoyo/articles/31211.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>感谢您访问我们的网站,您可能还对以下资源感兴趣:</p> <a href="http://m.tkk7.com/" title="亚洲av成人片在线观看">亚洲av成人片在线观看</a> <div class="friend-links"> </div> </div> </footer> 主站蜘蛛池模板: <a href="http://kkk28.com" target="_blank">91精品导航在线网址免费</a>| <a href="http://044242.com" target="_blank">久久久久久av无码免费看大片 </a>| <a href="http://137499.com" target="_blank">亚洲国产精品一区第二页</a>| <a href="http://zfjhw.com" target="_blank">eeuss影院www天堂免费</a>| <a href="http://9527paotui.com" target="_blank">亚洲中文字幕无码中文字在线 </a>| <a href="http://shaonvfushi.com" target="_blank">日本免费电影一区二区</a>| <a href="http://cn-zggx.com" target="_blank">亚洲成a人片77777kkkk</a>| <a href="http://cn-zggx.com" target="_blank">久久香蕉国产线看免费</a>| <a href="http://bdyls.com" target="_blank">亚洲第一成年网站大全亚洲</a>| <a href="http://langya2255.com" target="_blank">99国产精品永久免费视频 </a>| <a href="http://shunfk.com" target="_blank">在线观看亚洲成人</a>| <a href="http://222941.com" target="_blank">野花香高清视频在线观看免费</a>| <a href="http://2030188.com" target="_blank">亚洲va久久久噜噜噜久久 </a>| <a href="http://5s6b.com" target="_blank">国产午夜免费福利红片</a>| <a href="http://my77789.com" target="_blank">无忧传媒视频免费观看入口</a>| <a href="http://xy996688.com" target="_blank">国产偷国产偷亚洲高清日韩</a>| <a href="http://ahsuibao.com" target="_blank">国产一区二区三区免费</a>| <a href="http://128313.com" target="_blank">亚洲1区1区3区4区产品乱码芒果 </a>| <a href="http://wwwp784.com" target="_blank">国产成人免费ā片在线观看</a>| <a href="http://www2019rz.com" target="_blank">国产三级在线免费观看</a>| <a href="http://0888qb.com" target="_blank">亚洲AV天天做在线观看</a>| <a href="http://hn-hshb.com" target="_blank">亚洲精品动漫免费二区</a>| <a href="http://kelingdq.com" target="_blank">一级片在线免费看</a>| <a href="http://805ios.com" target="_blank">99久久亚洲综合精品成人网</a>| <a href="http://xsdggzs.com" target="_blank">毛片高清视频在线看免费观看</a>| <a href="http://8654123.com" target="_blank">黄页视频在线观看免费</a>| <a href="http://shadaiym.com" target="_blank">国产精品亚洲A∨天堂不卡</a>| <a href="http://www1688mz.com" target="_blank">国产免费丝袜调教视频</a>| <a href="http://ettedia.com" target="_blank">在线看亚洲十八禁网站</a>| <a href="http://5shitou.com" target="_blank">亚洲国产精品一区第二页 </a>| <a href="http://jsjumei.com" target="_blank">成年女人免费碰碰视频</a>| <a href="http://ivy-fund.com" target="_blank">一区在线免费观看</a>| <a href="http://240842.com" target="_blank">亚洲美女免费视频</a>| <a href="http://zg8k.com" target="_blank">亚洲VA综合VA国产产VA中</a>| <a href="http://cytanhuang.com" target="_blank">无码日韩精品一区二区免费暖暖 </a>| <a href="http://5079157.com" target="_blank">h视频在线免费观看</a>| <a href="http://jiuse54.com" target="_blank">337p欧洲亚洲大胆艺术</a>| <a href="http://sao350.com" target="_blank">一区国严二区亚洲三区</a>| <a href="http://468862.com" target="_blank">91香蕉国产线在线观看免费</a>| <a href="http://66qiqi.com" target="_blank">色偷偷噜噜噜亚洲男人</a>| <a href="http://998wc.com" target="_blank">亚洲欧洲第一a在线观看</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>