2009年2月6日
#
還不錯,只是很多blog支持不好,汗了~規(guī)范還是很重要的。
spaces.live.com很簡單,按照向?qū)л斎雔ive id和密碼即可,其他日志,需要指定一些參數(shù)。整理了一些配置參數(shù)放在這里,隨時更新:
博客園
日志網(wǎng)址:http://www.cnblogs.com/54powerman/
日志類型:Metaweblog API
日志遠(yuǎn)程發(fā)布url:http://www.cnblogs.com/54powerman/services/metablogapi.aspx
BlogJava.net
日志網(wǎng)址:http://www.tkk7.com/54powerman/
日志類型:Metaweblog API
日志遠(yuǎn)程發(fā)布url:http://www.tkk7.com/54powerman/services/metablogapi.aspx
2006年10月18日
#
???string fileName="e:\\test.txt";
???System.IO.StreamWriter sw=new System.IO.StreamWriter(fileName);
???sw.WriteLine(System.DateTime.Now);
???sw.Close();
???if(System.IO.File.Exists(fileName))
???{
????System.IO.StreamReader sr=new System.IO.StreamReader(fileName);
????String line=null;
????while((line=sr.ReadLine())!=null)
????{
?????System.Console.WriteLine(line);
????}
????sr.Close();
???}
1 用一個例子來說明問題,本例要求統(tǒng)計tomcat啟動的次數(shù),并保存在d:/test.txt中。一個很簡單的邏輯,重點(diǎn)在于tomcat啟動自動加載一個類來實(shí)現(xiàn)一定的操作。
2 首先編寫一個servlet類--Startup.java
3 將需要自動運(yùn)行的操作代碼寫在init方法中。
4 如下配置web.xml
? <servlet>
??? <servlet-name>startup</servlet-name>
??? <servlet-class>com.usease.Startup</servlet-class>
??? <load-on-startup>1</load-on-startup>
? </servlet>
5 附servlet全代碼:
package com.usease;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
public class Startup extends HttpServlet {
??? private static final String CONTENT_TYPE = "text/html; charset=GBK";
??? //Initialize global variables
??? public void init() throws ServletException {
??????? try {
??????????? File file = new File("d:/test.txt");
??????????? int count = 0;
??????????? if (file.exists()) {
??????????????? BufferedReader in = new BufferedReader(new FileReader(file));
??????????????? String inString = in.readLine();
??????????????? count = Integer.parseInt(inString);
??????????????? in.close();
??????????? }
??????????? count++;
??????????? PrintWriter out = new PrintWriter(new FileOutputStream("d:/test.txt"));
??????????? out.print(count);
??????????? out.close();
??????? }
?catch (IOException e) {}
??????? System.out.println("Count completed!");
??? }
??? //Process the HTTP Get request
??? public void doGet(HttpServletRequest request, HttpServletResponse response) throws
??????????? ServletException, IOException {
??? }
??? //Clean up resources
??? public void destroy() {
??? }
}
6 這樣,當(dāng)Tomcat加載這個Context路徑的時候,就會自動相應(yīng)的操作了。
?
說明:一般這個操作用于Tomcat啟動后自動加載一些全局變量,初始化信息等,當(dāng)然你可以象本例中做一些其他操作。
1
、
Cannot create JDBC driver of class '' for connect URL ''
問題:找不到
jdbc
驅(qū)動,但是提示信息里的
class
值為
null
,所以,可以斷定
Tomcat
沒有找到
Server.xml
里的
Resource
配置信息。可能的原因包括:
(
1
)沒有配置
Resource
;
(
2
)
Resource
配置信息放置的位置錯誤。
(
3
)一個不容易發(fā)現(xiàn)的錯誤,
driverClassName
和
url
拼寫錯誤。
解決辦法:確認(rèn)
Resource
配置正確,并且必須放在
DefaultContext
或者
Context
配置節(jié)內(nèi)。
?
2
、
Cannot create JDBC driver of class 'xxx' for connect URL ''
解決辦法:配置的數(shù)據(jù)庫驅(qū)動類名
xxx
是錯誤的,檢查并修改即可;如果確認(rèn)正確,那就是找不到驅(qū)動庫,拷貝一個
jar
到
Tomcat/common/lib
中即可。
?
3
、
Cannot create JDBC driver of class '' for connect URL 'xxx'
解決辦法:配置的
url
字符串語法是錯誤的,檢查后修改即可。
?
4
、
Cannot create PoolableConnectionFactory, cause: Io
異常
: Connection refused
問題:無法創(chuàng)建連接池工廠對象,原因是連接被拒絕。
解決辦法:檢查
url
字符串,可能服務(wù)器地址、端口、數(shù)據(jù)庫名或者數(shù)據(jù)庫實(shí)例名等信息錯誤。修改。
?
5
、
No?suitable?driver?
沒有匹配的驅(qū)動
分析:驅(qū)動程序配置錯誤,請確認(rèn)
Tomcat
的
common/lib
子目錄中是否有數(shù)據(jù)庫驅(qū)動
jar
。
?
6
、
Cannot create resource instance
無法創(chuàng)建數(shù)據(jù)源實(shí)例
問題:找不到
commons-dbcp-1.1.jar
(版本可能不同)
解決辦法:復(fù)制
commons-dbcp-1.1.jar
庫文件到
Tomcat/Common/lib
子目錄中。
?
7
、
root cause
:
java.lang.NoClassDefFoundError: org/apache/commons/collections/CursorableLinkedList
問題:找不到
commons-collections.jar
。
解決辦法:復(fù)制
commons-collections.jar
庫文件到
Tomcat/Common/lib
子目錄中。
?
8
、
root cause
:
?java.lang.NoClassDefFoundError: org/apache/commons/pool/impl/GenericObjectPool
問題:找不到
commons-pool-1.1.jar
(版本可能不同)。
解決辦法:復(fù)制
commons-pool-1.1.jar
庫文件到
Tomcat/Common/lib
子目錄中。
錯誤說明:用JbuilderX編譯工程,運(yùn)行沒有問題,debug調(diào)試就出現(xiàn)錯誤。記得前幾天還好好的啊。奇怪?~!!
折磨了我好幾天。錯誤如下。
錯誤現(xiàn)象:
-- Cannot start Java debug process VM --
com.sun.jdi.connect.VMStartException: VM initialization failed for: C:\JBuilderX\jdk1.4\bin\javaw -classpath "C:\JBuilderX\thirdparty\jakarta-tomcat-4.0.6-LE-jdk14\bin\bootstrap.jar;C:\JBuilderX\jdk1.4\lib\tools.jar"? -Dcatalina.home="C:/JBuilderX/thirdparty/jakarta-tomcat-4.0.6-LE-jdk14"? -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=sensky-200:1076,suspend=y org.apache.catalina.startup.Bootstrap -config D:\Project\ResourceManage\Tomcat\conf\server8083.xml start
Transport dt_socket failed to initialize, rc = 509.
查了半天資料,大部分文章都說是Path中java.exe的路徑與Jbuilder中的啟動程序路徑不同造成的。
檢查了一下,沒錯啊。就是這么設(shè)置的啊。還是不行。
后來干脆把Path變量中的jdk路徑刪除,ok了。
原來,前幾天,為了手動編譯單個java文件方便,把jdk的bin目錄加到了path中,結(jié)果,脫褲子放屁,多此一舉。提示大家注意。
另外,安裝jre5以后,它可能會自動把它的bin目錄加到path中,注意。
在Jbuilder安裝目錄的
bin文件夾下
修改
jbuilder.config文件,
添加下面一行:
?
?vmparam -Dprimetime.editor.useVariableWidthFont=true
?
關(guān)閉Jbuilder重新打開,看看效果吧。
//Dictionary
System.Collections.DictionaryEntry dic=new System.Collections.DictionaryEntry("key1","value1");
//ArrayList
System.Collections.ArrayList list=new System.Collections.ArrayList();
list.Add(1);
list.Add(2);
for(int i=0;i<list.Count;i++)
{
?System.Console.WriteLine(list[i]);
}
//HashTable
System.Collections.Hashtable table=new System.Collections.Hashtable();
table.Add("table1",1);
table.Add("table2",2);
System.Collections.IDictionaryEnumerator d=table.GetEnumerator();
while(d.MoveNext())
{
?System.Console.WriteLine(d.Entry.Key);
}
//Queue
System.Collections.Queue queue=new System.Collections.Queue();
queue.Enqueue(1);
queue.Enqueue(2);
System.Console.WriteLine(queue.Peek());
while(queue.Count>0)
{
?System.Console.WriteLine(queue.Dequeue());
}
//SortedList
System.Collections.SortedList list=new System.Collections.SortedList();
list.Add("key2",2);
list.Add("key1",1);
for(int i=0;i<list.Count;i++)
{
?System.Console.WriteLine(list.GetKey(i));
}
//Stack
System.Collections.Stack stack=new System.Collections.Stack();
stack.Push(1);
stack.Push(2);
System.Console.WriteLine(stack.Peek());
while(stack.Count>0)
{
?System.Console.WriteLine(stack.Pop());
}