SmileFace
与java一起走过的日子
posts - 41,  comments - 8,  trackbacks - 0

今天看了一篇文章,觉得说的很有道理,现摘录如下:

80% 的软件缺陷常常生存在软件 20% 的空间里。这个原则告诉我们,如果你想使软件测试有效地话,记住常常光临其高危多发 “ 地段 ” 。在那里发现软件缺陷的可能性会大的多。这一原则对于软件测试人员提高测试效率及缺陷发现率有着重大的意义。聪明的测试人员会根据这个原则很快找出较多的缺陷而愚蠢的测试人员却仍在漫无目的地到处搜寻。

80-20 原则的另外一种情况是,我们在系统分析、系统设计、系统实现阶段的复审,测试工作中能够发现和避免 80% 的软件缺陷,此后的系统测试能够帮助我们找出剩余缺陷中的 80% ,最后的 5% 的软件缺陷可能只有在系统交付使用后用户经过大范围、长时间使用后才会曝露出来。因为软件测试只能够保证尽可能多地发现软件缺陷,却无法保证能够发现所有的软件缺陷。

80-20 原则还能反映到软件测试的自动化方面上来,实践证明 80% 的软件缺陷可以借助人工测试而发现, 20% 的软件缺陷可以借助自动化测试能够得以发现。由于这二者间具有交叉的部分,因此尚有 5% 左右的软件缺陷需要通过其他方式进行发现和修正。 

为效益而测试

为什么我们要实施软件测试,是为了提高项目的质量效益最终以提高项目的总体效益。为此我们不难得出我们在实施软件测试应该掌握的度。软件测试应该在软件测试成本和软件质量效益两者间找到一个平衡点。这个平衡点就是我们在实施软件测试时应该遵守的度。单方面的追求都必然损害软件测试存在的价值和意义。一般说来,在软件测试中我们应该尽量地保持软件测试简单性,切勿将软件测试过度复杂化,拿物理学家爱因斯坦的话说就是: Keep it simple but not too simple 。

•  缺陷的必然性

软件测试中,由于错误的关联性,并不是所有的软件缺陷都能够得以修复。某些软件缺陷虽然能够得以修复但在修复的过程中我们会难免引入新的软件缺陷。很多软件缺陷之间是相互矛盾的,一个矛盾的消失必然会引发另外一个矛盾的产生。比如我们在解决通用性的缺陷后往往会带来执行效率上的缺陷。更何况在缺陷的修复过程中,我们常常还会受时间、成本等方面的限制因此无法有效、完整地修复所有的软件缺陷。因此评估软件缺陷的重要度、影响范围,选择一个折中的方案或是从非软件的因素(比如提升硬件性能)考虑软件缺陷成为我们在面对软件缺陷时一个必须直面的事实。

•  软件测试必须有预期结果

没有预期结果的测试是不可理喻的。软件缺陷是经过对比而得出来的。这正如没有标准无法进行度量一样。如果我们事先不知道或是无法肯定预期的结果,我们必然无法了解测试正确性。这很容易然人感觉如盲人摸象一般,不少测试人员常常凭借自身的感觉去评判软件缺陷的发生,其结果往往是把似是而非的东西作为正确的结果来判断,因此常常出现误测的现象。

•  软件测试的意义 - 事后分析

软件测试的目的单单是发现缺陷这么简单吗?如果是 “ 是 ” 的话,我敢保证,类似的软件缺陷在下一次新项目的软件测试中还会发生。古语说得好, “ 不知道历史的人必然会重蹈覆辙 ” 。没有对软件测试结果进行认真的分析,我们就无法了解缺陷发生的原因和应对措施,结果是我们不得不耗费的大量的人力和物力来再次查找软件缺陷。很可惜,目前大多测试团队都没有意识到这一点,测试报告中缺乏测试结果分析这一环节。

结论:

软件测试是一个需要 “ 自觉 ” 的过程,作为一个测试人员,遇事沉着,把持尺度,从根本上应对软件测试有着正确的认识,希望本文对读者对软件测试的认识有所帮助

posted @ 2006-05-29 05:40 SmileFace 阅读(524) | 评论 (0)编辑 收藏
SWT是一个IBM开发的跨平台GUI开发工具包。一个SWT应用程序的基本组成部分为显示界面(Display)、命令界面(Shell,使命令进入并使运行初始化)和窗口部件(Widgets)。Display负责管理事件循环和控制UI线程和其他线程之间的通讯。Shell是应用程序中被操作系统窗口管理器管理的窗口。每个SWT应用程序至少需要一个Display和大于等于1个的Shell实例。

如果一个应用程序使用了多个线程,那么每个线程都使用的是Display对象分配给它自己的实例。程序员可以使用静态方法Display.getCurent()来得到Display对象的当前活动的实例。

  Shell用于在特定的操作系统中表现窗口。Shell有两种类型。第1种是高层shell,它是Display的子窗口,同时它也是一个主窗口。第2类是对话shell,这种shell要依赖于其他的shell窗口存在。shell窗口最终成为上述那种类型,要看在创建shell时传递给shell构造函数的是什么风格位(style bits)。一个shell的默认值是DialogShell。也就是说,如果不带参数,那默认就是一个对话shell。而如果给参数赋予了一个Display对象,则该shell将是一个高层shell。

  进行SWT开发前的环境设置

  为了进行SWT应用开发,你需要把SWT库添加到类路径(classpath)上,并设置必要的环境变量。

        首先,你要在ECLIPSE_HOMEeclipsepluginsorg.eclipse.swt.win32_2.1.0wswin32目录下找到swt.jar库文件。注意这里的“org.eclipse.swt.win32_2.1.0”目录是和Eclipse的版本有关的。实在找不到你就用文件搜索功能吧。然后依次打开下面窗口Project-〉Properies-〉JavaBuildPath-〉Libraries-〉Add Variable -〉 Eclipse Home -〉Extend将swt.jar文件加到类路径中。

接着,你肯定想编译这个SWT应用了。但是会出现下面所示的运行异常。出现这个异常的原因是swt.jar库使用的是原生库。你需要设置java.library.path环境变量来使用Java中的原生库。

  控制台(Console )的输出如下:

    java.lang.UnsatisfiedLinkError: no swt-win32-2136 in java.library.path 
    at java.lang.ClassLoader.loadLibrary(Unknown Source) 
    at java.lang.Runtime.loadLibrary0(Unknown Source) 
    at java.lang.System.loadLibrary(Unknown Source) 
    at org.eclipse.swt.internal.Library.loadLibrary(Library.java:108) 
    at org.eclipse.swt.internal.win32.OS.〈clinit〉(OS.java:46) 
    at org.eclipse.swt.widgets.Display.internal_new_GC(Display.java:1291) 
    at org.eclipse.swt.graphics.Device.init(Device.java:547) 
    at org.eclipse.swt.widgets.Display.init(Display.java:1316) 
    at org.eclipse.swt.graphics.Device.〈init〉(Device.java:96) 
    at org.eclipse.swt.widgets.Display.〈init〉(Display.java:291) 
    at org.eclipse.swt.widgets.Display.〈init〉(Display.java:287) 
    at com.swtdesigner.trytry.main(trytry.java:24) 
    Exception in thread "main"

  按下面的步骤设置java.library.path变量:依次打开Run-〉 Run...-〉 Java Applicaton-〉 "Project" -〉Arguments -〉 VM Arguments。在“VM Arguments”中输入

-Djava.library.path=c:eclipsepluginsorg.eclipse.swt.win32_2.1.0oswin32†

  注意要输入你自己的swt.jar所在的路径。
posted @ 2006-05-25 12:11 SmileFace 阅读(634) | 评论 (1)编辑 收藏
以Hello World为例, 其基本步骤是:


1.  选择File->New->Project

2.  在对话框中选择Tomcat Project,然后next

3.  输入Project Name,这里可以写HelloWorld,继续next

4.  勾上can update server.xml file选项,finish,好了,一个Poject已经创建好了。

5.  打开new class 向导,在Name中填入HelloWorld,在Superclass中填入javax.servlet.http.HttpServlet,按下finish,好了,一个servlet就创建好了

6.  在HelloWorld.java中重载doGet方法,代码如下:
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;

public class HelloWorld extends HttpServlet {
       public void doGet(HttpServletRequest request,HttpServletResponse response)
      throws IOException, ServletException {
       response.setContentType("text/html");
       PrintWriter writer = response.getWriter();
       writer.println("Hello World!");
      }
}

7.在WEB-INF目录下新建web.xml文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">

<web-app>
<servlet>
<servlet-name>TestServlet</servlet-name>
<servlet-class>HelloWorld</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>TestServlet</servlet-name>
<url-pattern>servlet/HelloWorld</url-pattern>
</servlet-mapping>
</web-app>

8.Ctrl+S保存,右键HelloWorld project,选择Tomcat Project->update context to server.xml
  注意:这里很重要,此步骤eclipse会自动修改了server.xml文件,添加HelloWorld项目。

9.在Eclipse中启动Tomcat

10.在用浏览器访问http://localhost:8080/HelloWorld/servlet/HelloWorld

posted @ 2006-05-25 04:14 SmileFace 阅读(1926) | 评论 (2)编辑 收藏
1. 在Eclipse项目中双击HTML文件时,可能希望是用Notepad打开,而不是用系统缺省的IE浏览器打开。实现的方法是打开菜单栏中的Windows->Preferences对话框,之后在对话框中选择General->Editors -> file associations,然后添加文件类型,如*.html,再为其指定编辑器即可。

2. 在Eclipse在工具栏上提供了一个切换按钮,可以在"显示全部代码"和"只显示所选单元"(这里的单元指的是单个方法、变量、导入的包等)之间切换。

3.about view: 
       navigator和package exploror是核心部分。前者和Windows的浏览器差不多,能浏览项目文件夹中的所有文件,后者用来浏览项目中的Java包,包中的类,类中的变量和方法等信息。Hierarchy窗口非常实用,它能非常清晰的查看类的层次结构。类中的编译出错信息可以在task view中查到,同时它也可以成为名符其实的任务view:向其中添加新的任务描述信息,来跟踪项目的进度。console则主要用来显示程序的输出信息。在调试程序的时候,会有更丰富的观察view来帮助程序员进行调试,如变量值察看view,断点view等等。

4.about perspective:
 
     一个perspective包括一个或多个editor和view。在开发环境的最右侧的快捷栏中的上部分显示的就是当前所打开的视图图标。可以自定义一个新视图。这些功能都被包括在"Perspective" 菜单中。

5 在Java perspective中,工具栏中有两个按钮,分别用来进行调试和运行。并且可能由于安装的插件不同Eclipse会存在多种运行/调试程序的方式,为了确定当前项目用那一种方式运行,需要在项目的属性选项中的设置LauncheràRun/Debug选项。通常我们需要用的是"Java Applicantion"方式。在这种方式下,如果当前位置是包含main()方法的Java程序,点击调试/运行按钮就会立即开始执行调试/运行功能。如果当前位置是在包或项目上,Eclipse会搜索出当前位置所包含的所有可执行程序,然后由程序员自己选择运行那一个。

在目前的Eclipse的Release和Stable版本中缺省安装了插件开发环境(Plug-in Development Environment,即PDE,它本身也是一个插件),此时系统除了"Java Applicantion" 运行方式,可能还有另外两种方式:"Run-time WorkBench"和"Run-time WorkBench with Tracing",当用PDE开发插件的时候会用到这两种运行方式

6 使用插件

下面将介绍如何应用插件来嵌入Tomcat服务器。这个插件并不是Eclipse项目组开发的,而是一家叫sysdeo的公司开发,非常小巧,只有27.8K。你可以到http://www.sysdeo.com/eclipse/tomcatPlugin.html去免费下载。另外,这个插件只支持Tomat4.0以上的版本,可以在www.apache.org得到Tomcat的最新版本。

要安装插件只需将下载的zip文件按原路径解压到"你的Eclipse的安装路径plugins"下面,然后重新启动Eclipse。启动后在菜单栏上选择Perspective---->Customize,在打开的对话框中选中Other-->Tomcat。之后马上会发现Eclipse有了两处变化:菜单栏中多了一个Tomcat选项,工具栏中多了两个按钮,上面是大家可能非常熟悉的Tomcat小猫。除此之外,在菜单栏中选择:Windows-->Preferences,打开对话框后会发现这也多了一个Tomcat选项,在这里要求指定你的Tomcat安装根路径。之后还要检查一下在Preferences对话框中的Java-->Installed JRE所指定的JRE和启动Tomcat的JRE是否为同一个JRE,如果不是,可能会导致Tomat不能正常启动。如果以上检查没有问题,就可以用工具栏上的"小猫"直接起动Tomcat了。要注意的是,启动过程很慢. 之后就可以在外部浏览器(如IE)中输入http://localhost:8080来测试Tomcat是否正常。

7. 尝试在Eclipse中调试Servlet或JSP程序:
 
我们将用Tomcat自带的Servlet例程HelloWorldExample.java来示范一下如何在Eclipse中调试Sevlet程序。首先要在Java视图中新建一个Java项目,为了方便,可以直接将项目路径指定到HelloWorldExmaple程序所在路径,之后按"Next",进入Java Settings对话框,选择Libraries标签,并用Add External JARs按钮来指定Servlet.jar包的位置。这里直接用了Tomcat中的Servlet.jar包。

最后,点击"Finish"完成项目的生成。在新生成项目中的default package可以找到HelloWorldExample.java,双击打开文件,并可尝试给HelloWorldExample加上一个断点(双击编辑窗口左侧边界)。之后在外部浏览器中输入http://localhost:8080/examples/servlet/HelloWorldExample,再回过来看Eclipse发生了什么变化,是一个调试窗口呀!

8 Eclipse插件体系中重要的概念是扩展点(extension points),也就是为插件提供的接口。每一个插件都是在现有的扩展点上开发,并可能还留有自己的扩展点,以便在这个插件上继续开发。

Eclipse系统的核心部分在启动的时候要完成的工作十分简单:启动平台的基础部分和查找系统的插件。在Eclipse中实现的绝大部分功能是由相应的插件完成的,比如WrokBench UI插件完成界面的外观显示,Resource Management插件完成维护或生成项目或文件等资源管理工作(在下面的第二个例子就会用到这个插件),而Version and Configuration Management (VCM)插件则负责完成版本控制功能,等等。虽然以上提到的每一个功能都是绝大多数IDE环境所必备的功能,Eclipse却也把它们都做成了插件模式,甚至用来开发Java程序的开发环境(Java development tooling,JDT)也只不过是Eclipse系统中的一个普通插件而已。整个Eclipse体系结构就象一个大拼图,可以不断的向上加插件,同时,现有插件上还可以再加插件。

9 由于软件本身升级比较频繁,经常需要重新设置使用的环境变量或者重新配置,例如把JDK版本从1.3升级到1.4,即JDK目录名可能要从“j2sdk1.3”改为“j2sdk1.4”,如果是这样的话,那么eclipse可能会无法再启动了(它要从环境变量中寻找JAVA_HOME变量,而JAVA_HOME变量值已经从“j2sdk1.3”改为“j2sdk1.4”了)。解决的方法很简单,只要把默认的软件安装目录名去掉版本号即可(如果担心忘记版本号,只要在目录中添加一个readme文件加以说明即可)。例如: jdk安装路径是:D:\Program Files\Java\j2sdk;  eclipse 安装的路径是:D:\Program Files\Java\eclipse
posted @ 2006-05-25 01:37 SmileFace 阅读(247) | 评论 (0)编辑 收藏

1 Web服务器

通常,一个完整的Web服务器包含一个或多个“虚拟主机”.所谓虚拟主机,就是在一个物理的服务器上配置多个域名,每个域名对应相同或不同的应用.这样,客户端看起来好像是有多个主机;Web容器在收到请求时,根据客户端给出的域名来确定处理该请求的虚拟主机.在每个虚拟主机中又可以部署一个或多个Web应用.每个部署在服务器上的Web应用要提供对本应用的生命周期管理等功能.尽管不同的Web服务器的实现各不相同,但都按照服务器-虚拟主机-应用的层次结构进行设计和管理.
 
2 Tomcat结构分析

Apache Tomcat是Servlet/JSP标准的参考实现,作为一个成功的、有着广泛应用的Web容器,Tomcat有着整齐而清晰的内部结构。其中关键的模块有:

Server.一个Server模块代表了整个Tomcat容器.它的属性代表了Web容器作为一个整体的特征.一个Server模块主要包括一个或多个Service模块以及顶层的命名资源.在运行期间,Server模块应监听port属性所指定的端口,并对于该端口接受的每一个连接读入其所传入的第1行信息并与shutdown属性所指定的字串进行比较:如果两者相吻合,则执行关闭服务器的步骤;否则,不执行任何操作并断开连接.这种机制为容器的远程管理提供了可能.

Service.一个Service模块代表了共享同一个Container实例(通常是Engine实例)的一个或多个Connector实例所组成的逻辑整体.该Container负责处理这个Service中所有Connector接受的请求.Service模块最主要的职责在于:允许加密的Connector以及普通的Connector连接到同一组Web应用.同一个Connector不能同时存在于两个不同的Service中.在同一个Java虚拟机中可以同时存在多个Service实例,但这些实例除了共享最基本的Java运行时类库以外,相互之间是完全独立的. 

Connector.Connector模块负责接受来自网络客户端的请求,并将请求的处理结果反馈给客户端.每个Connector实例实际上实现的是一种网络传输协议,它将通过这种协议传入的客户端请求进行分析,构造相应的Request和Response实例,找出适合相应该请求的Container实例,调用该Container的invoke方法,并将Request和Response实例作为参数传入,最终将处理结果或者错误信息反馈给客户端.

Engine.Engine是Container的子接口,它代表了整个Servlet引擎.在运行中,Engine永远是Container层次结构的最高级,所以,其setParent()方法若如被调用将总是抛出IllegalArgumentException异常.一个Engine的子Container通常是一个或多个的Host实例.

Host.Host代表的实际上就是常说的“虚拟主机”的概念.在一个Tomcat Web服务器中可以同时运行多个Host,每个Host都与一个特定的主机名以及任意个“别名”相绑定.每个客户端的请求都会根据主机名映射到相应的Host进行处理.Host的下级Container通常是一些Context实例.

Context.一个Context就是一个独立的Web应用.它包括了Web应用的所有Servlet类、JSP 文件、静态页面和图片、Jar包、环境变量、各种配置参数以及其他各种资源.Context的下级Container通常是Wrapper的实例。



原文参见: http://www.jos.org.cn/1000-9825/17/1195.pdf

posted @ 2006-05-24 04:08 SmileFace 阅读(917) | 评论 (0)编辑 收藏

这2天tomcat总是出问题,不能正常启动,错误如下: org.xml.sax.SAXParseException: The content of element type "web-app" must match "(icon?,display-name?,description?,distributable?,context-param*,filter*,filter-mapping*,listener*,servlet*,servlet-mapping*,session-config?,mime-mapping*,welcome-file-list?,error-page*,taglib*,resource-env-ref*,resource-ref*,security-constraint*,login-config?,security-role*,env-entry*,ejb-ref*,ejb-local-ref*)".

后来发现原因竟然和DTD 的格式要求有关,原文在:

我copy了基本要点:

===================================================

So for the 2.3 version of the DTD, you have to put the tags in the correct order. You have:
<web-app>
  <servlet></servlet>
  <servlet-mapping></servlet-mapping>
  <servlet></servlet>
  <servlet-mapping></servlet-mapping>
  <servlet></servlet>
  <servlet-mapping></servlet-mapping>
  <!-- ... -->
  <listener></listener>
</web-app>


But the DTD says it must be:
<web-app>
  <listener></listener>
  <servlet></servlet>
  <servlet></servlet>
  <servlet></servlet>
  <!-- ... -->
  <servlet-mapping></servlet-mapping>
  <servlet-mapping></servlet-mapping>
  <servlet-mapping></servlet-mapping>
  <!-- ... -->
</web-app>

======================================

The error message tells you the order they must be in:

 content of element type "web-app" must match "(icon?,display-name?,description?,distributable?,context-param*,
filter*,filter-mapping*,listener*,servlet*,servlet-mapping*,
session-config?,mime-mapping*,welcome-file-list?,error-page*,
taglib*,resource-env-ref*,resource-ref*,security-constraint*,
login-config?,security-role*,env-entry*,ejb-ref*,ejb-local-ref*)"

Means the order is:
icon (0 or 1 times)
display-name (0 or 1 times)
description (0 or 1 times)
distributable (0 or 1 times)
context-param (0 or more times)
filter (0 or more times)
filter-mapping (0 or more times)
listener (0 or more times)
servlet (0 or more times)
servlet-mapping (0 or more times)
session-config (0 or 1 times)
mime-mapping (0 or more times)
welcome-file-list (0 or 1 times)
error-page (0 or more times)
taglib (0 or more times)
resource-env-ref (0 or more times)
resource-ref (0 or more times)
security-constraint (0 or more times)
login-config (0 or 1 times)
security-role (0 or more times)
env-entry (0 or more times)
ejb-ref (0 or more times)
ejb-local-ref (0 or more times)

==============================

i also want to know that
are tags supposed to be in some order in version 2.4, or i can have them in any order ?


Answer:   

The 2.4 spec can be in any order.

posted @ 2006-05-22 13:02 SmileFace 阅读(1783) | 评论 (1)编辑 收藏

(说明:我用的是tomccat4.1+mysql4.1+mysql_connector_java_3.1.12)

关于mysql的JDBC 配置,我在网上至少找到3种方法,总结如下:

方法一 : 使用数据库连接池。 做法是:修改tomcat的配置文件server.xml和web.xml。因为有大段的配置信息要输入,感觉很容易出错。参见:http://vod.sjtu.edu.cn/help/Article_Show.asp?ArticleID=2169

方法二: 使用JNDI 服务。做法是:直接在tomcat的管理器localhost:8080/admin/下添加新的JNDI实例。我认为这种方法和前一种方法实质是一样的,只是这个简化为直接输入配置的内容。参见:http://www.cnxuexi.com/computer/chengxusheji/Java/4285.html  。(备注:此方法需要一点配置的。不过有大侠在http://www.blogjava.net/konhon/archive/2005/07/29/8757.aspx 中基本没有配置即可,我还需要验证一下。)

方法三: 不修改任何东西,直接在程序中体现。类似的文章参见:http://www.chinalinuxpub.com/read.php?wid=157

我认为第三种方法最简单直观,对于初学mysql者很好。推荐。

以下就是方法三的实现,从JDBC驱动安装开始吧:

1、解压缩mysql_connector_java_3.1.12.zip;要用到的是mysql-connector-java-3.1.10-bin-g.jardebug目录下的mysql-connector-java-3.1.10-bin.jar;
2、在C:\Program Files\Java目录下建立mysqlforjdbc子目录,将mysql-connector-java-3.1.12-bin.jar到该目录下;mysql-connector-java-3.1.12-bin-g.jar拷贝到%JAVA_HOME%\lib下。
3、配置classpath,追加%JAVA_HOME%\lib\mysql-connector-java-3.1.10-bin-g.jar;C:\Program Files\Java\mysqlforjdbc\mysql-connector-java-3.1.10-bin.jar;到该环境变量中去;
4、Tomcat4.1\webapps目录下,用记事本编写一个文件保存为first.jsp,如下:

<%@ page contentType="text/html"%>
<%@ page import="java.sql.*"%>
<html>
<body> 
  <%out.print("test begin");%> <br>
  <%Class.forName("org.gjt.mm.mysql.Driver").newInstance();
 String url ="jdbc:mysql://localhost/first?user=root&password=123456"; 
//以上的first是我在mysql中建立的数据库名,我使用用户是root,password是123456
 Connection conn= DriverManager.getConnection(url);
 Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
 String sql="select * from test;"; 
//上面的test是数据库first中的表;
 ResultSet rs=stmt.executeQuery(sql);
 while(rs.next()) {%>
 the first is: <%=rs.getString(1)%> 
 the second is: <%=rs.getString(2)%> <br>
<%}%>
<%out.print("congratulations!");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>


在浏览器中输入http://127.0.0.1:8080/first.jsp
出现test begin和你的数据库基表内容,就是ok了。

说明:

1、这里的驱动程序使用的是Class.forName("org.gjt.mm.mysql.Driver").newInstance(); 据说这种代码是为了兼容mysql的老版本而用的;还有一种代码,Class.forName("com.mysql.jdbc.Driver"); 也可以用。效果一样。

2、如果上述程序没有结果,还有一招,是我在用eclipse时用的:可以将mysql-connector-java-3.1.10-bin.jar拷贝到C:\Tomcat 5.0\common\lib 路径下,把 Tomcat 服务Stop/start 就可以了。文件名可以改,不影响使用,因为这是个压缩包,Tomcat 能自动认识到包里的内容,并把有关类注册进来。


注:作者水平欠佳,如有表达不恰当的地方,见谅。


posted @ 2006-05-20 01:07 SmileFace 阅读(3427) | 评论 (0)编辑 收藏

使用windows这么久了,其实很多的功能还不知道,今天就学了一招:windows服务管理器。

例如,想查看并启动MySQL服务:Windows XP下,可以通过Windows的服务管理器查看。“开始”-“运行”,输入“services.msc”,回车,这时就弹出Windows的服务管理器,然后就可以看见服务名为“mysql”的服务项了,其右边标明“已启动”。

posted @ 2006-05-19 00:25 SmileFace 阅读(374) | 评论 (0)编辑 收藏


JavaScript and Java are often confused due to their similar names. But that's where most of the similarity ends. JavaScript does resemble Java in a few general ways, but it's a lot looser in terms of data typing, and it's an interpreted language, which means that JavaScript code is compiled at runtime by the client. A Java developer using the Java Developer Kit or a built-in compiler in a Java editor compiles Java, and the compiled code is sent to the client machine to be executed by the Java Virtual Machine (JVM) on the client.

Java and JavaScript are both based on object-oriented models, but Java's compiling requirements, specific data typing restrictions, and object hierarchy requirements, as well as the Java syntax, make Java harder to code, but more powerful. Consequently, JavaScript is more widely adopted for simple development requirements, whereas Java is implemented for more complex functionality.
posted @ 2006-05-18 00:21 SmileFace 阅读(277) | 评论 (1)编辑 收藏
前一阵子做volunteer(data entry),发现生活中的street type比我们想象的多,现将名称和缩写录入如下:

Avenue —  Ave
Boulevard —  Blvd
Center  — Ctr
Circle  — Cir
Concession — Conc
Court — Crt
Crescent — Cres
Drive — Dr
Gardens — Gdns
Heights — Hts
Highway — Hwy
Park — Pk
Parkway — Pkwy
Place  — Pl
Point — Pt
Road — Rd
Square — Sq
Street — St
Terrace — Terr
Village — Villge

怎么样,多吧!而且实际中确实都用着呢:)

对了,还有一个相关的: Rural Routes — RR
posted @ 2006-05-13 02:12 SmileFace 阅读(9037) | 评论 (2)编辑 收藏
仅列出标题
共5页: 上一页 1 2 3 4 5 下一页 

<2024年12月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

常用链接

留言簿(2)

随笔分类

随笔档案

文章档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜