2006年10月18日
#
还不错,只是很多blog支持不好,汗了~规范还是很重要的。
spaces.live.com很简单,按照向导输入live id和密码即可,其他日志,需要指定一些参数。整理了一些配置参数放在这里,随时更新:
博客园
日志网址:http://www.cnblogs.com/54powerman/
日志类型:Metaweblog API
日志远程发布url:http://www.cnblogs.com/54powerman/services/metablogapi.aspx
BlogJava.net
日志网址:http://www.blogjava.net/54powerman/
日志类型:Metaweblog API
日志远程发布url:http://www.blogjava.net/54powerman/services/metablogapi.aspx
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 用一个例子来说明问题,本例要求统计tomcat启动的次数,并保存在d:/test.txt中。一个很简单的逻辑,重点在于tomcat启动自动加载一个类来实现一定的操作。
2 首先编写一个servlet类--Startup.java
3 将需要自动运行的操作代码写在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 这样,当Tomcat加载这个Context路径的时候,就会自动相应的操作了。
说明:一般这个操作用于Tomcat启动后自动加载一些全局变量,初始化信息等,当然你可以象本例中做一些其他操作。
1
、
Cannot create JDBC driver of class '' for connect URL ''
问题:找不到
jdbc
驱动,但是提示信息里的
class
值为
null
,所以,可以断定
Tomcat
没有找到
Server.xml
里的
Resource
配置信息。可能的原因包括:
(
1
)没有配置
Resource
;
(
2
)
Resource
配置信息放置的位置错误。
(
3
)一个不容易发现的错误,
driverClassName
和
url
拼写错误。
解决办法:确认
Resource
配置正确,并且必须放在
DefaultContext
或者
Context
配置节内。
2
、
Cannot create JDBC driver of class 'xxx' for connect URL ''
解决办法:配置的数据库驱动类名
xxx
是错误的,检查并修改即可;如果确认正确,那就是找不到驱动库,拷贝一个
jar
到
Tomcat/common/lib
中即可。
3
、
Cannot create JDBC driver of class '' for connect URL 'xxx'
解决办法:配置的
url
字符串语法是错误的,检查后修改即可。
4
、
Cannot create PoolableConnectionFactory, cause: Io
异常
: Connection refused
问题:无法创建连接池工厂对象,原因是连接被拒绝。
解决办法:检查
url
字符串,可能服务器地址、端口、数据库名或者数据库实例名等信息错误。修改。
5
、
No suitable driver
没有匹配的驱动
分析:驱动程序配置错误,请确认
Tomcat
的
common/lib
子目录中是否有数据库驱动
jar
。
6
、
Cannot create resource instance
无法创建数据源实例
问题:找不到
commons-dbcp-1.1.jar
(版本可能不同)
解决办法:复制
commons-dbcp-1.1.jar
库文件到
Tomcat/Common/lib
子目录中。
7
、
root cause
:
java.lang.NoClassDefFoundError: org/apache/commons/collections/CursorableLinkedList
问题:找不到
commons-collections.jar
。
解决办法:复制
commons-collections.jar
库文件到
Tomcat/Common/lib
子目录中。
8
、
root cause
:
java.lang.NoClassDefFoundError: org/apache/commons/pool/impl/GenericObjectPool
问题:找不到
commons-pool-1.1.jar
(版本可能不同)。
解决办法:复制
commons-pool-1.1.jar
库文件到
Tomcat/Common/lib
子目录中。
错误说明:用JbuilderX编译工程,运行没有问题,debug调试就出现错误。记得前几天还好好的啊。奇怪?~!!
折磨了我好几天。错误如下。
错误现象:
-- 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中的启动程序路径不同造成的。
检查了一下,没错啊。就是这么设置的啊。还是不行。
后来干脆把Path变量中的jdk路径删除,ok了。
原来,前几天,为了手动编译单个java文件方便,把jdk的bin目录加到了path中,结果,脱裤子放屁,多此一举。提示大家注意。
另外,安装jre5以后,它可能会自动把它的bin目录加到path中,注意。
在Jbuilder安装目录的
bin文件夹下
修改
jbuilder.config文件,
添加下面一行:
vmparam -Dprimetime.editor.useVariableWidthFont=true
关闭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());
}