konhon

忘掉過去,展望未來。找回自我,超越自我。
逃避不一定躲的过, 面对不一定最难过, 孤单不一定不快乐, 得到不一定能长久, 失去不一定不再拥有, 可能因为某个理由而伤心难过, 但我却能找个理由让自己快乐.

Google

BlogJava 首页 新随笔 联系 聚合 管理
  203 Posts :: 0 Stories :: 61 Comments :: 0 Trackbacks

#


        第一,谈谈final, finally, finalize的区别。

第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,
          是否可以implements(实现)interface(接口)?

第三,Static Nested Class 和 Inner Class的不同,说得越多越好(面试题有的很笼统)。

第四,&和&&的区别。

第五,HashMap和Hashtable的区别。

第六,Collection 和 Collections的区别。

第七,什么时候用assert.

第八,GC是什么? 为什么要有GC?

第九,String s = new String("xyz");创建了几个String Object?

第十,Math.round(11.5)等於多少? Math.round(-11.5)等於多少?

第十一,short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?

第十二,sleep() 和 wait() 有什么区别?

第十三,Java有没有goto?

第十四,数组有没有length()这个方法? String有没有length()这个方法?

第十五,Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?

第十六,Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()?
            它们有何区别?

第十七,给我一个你最常见到的runtime exception.

第十八,error和exception有什么区别?

第十九,List, Set, Map是否继承自Collection接口?

第二十,abstract class和interface有什么区别?

第二十一,abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?

第二十二,接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类
             (concrete class)?

第二十三,启动一个线程是用run()还是start()?

第二十四,构造器Constructor是否可被override?

第二十五,是否可以继承String类?

第二十六,当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?

第二十七,try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么
              时候被执行,在return前还是后?

第二十八,编程题: 用最有效率的方法算出2乘以8等於几?

第二十九,两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?

第三十,当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的
            结果,那么这里到底是值传递还是引用传递?

第三十一,swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?

第三十二,编程题: 写一个Singleton出来。

以下是答案

第一,谈谈final, finally, finalize的区别。

final?修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被
           承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,
           可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用
           中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载finally?再异常处理时
           供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然
           后控制就会进入 finally 块(如果有的话)。

finalize?方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前
    做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在
    Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行
    其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。

第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以
          implements(实现)interface(接口)?

匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类可以作为一个接口,
    由另一个内部类实现。

第三,Static Nested Class 和 Inner Class的不同,说得越多越好(面试题有的很笼统)。

Nested Class (一般是C++的说法),Inner Class (一般是JAVA的说法)。Java内部类与C++嵌套类最大
    的不同就在于是否有指向外部的引用上。
    具体可见http: //www.frontfree.net/articles/services/view.asp?id=704&page=1

注: 静态内部类(Inner Class)意味着1创建一个static内部类的对象,不需要一个外部类对象,
         2不能从一个static内部类的一个对象访问一个外部类对象

第四,&和&&的区别。

&是位运算符。&&是布尔逻辑运算符。

第五,HashMap和Hashtable的区别。

都属于Map接口的类,实现了将惟一键映射到特定的值上。

HashMap 类没有分类或者排序。它允许一个 null 键和多个 null 值。

Hashtable 类似于 HashMap,但是不允许 null 键和 null 值。它也比 HashMap 慢,因为它是同步的。

第六,Collection 和 Collections的区别。

Collections是个java.util下的类,它包含有各种有关集合操作的静态方法。

Collection是个java.util下的接口,它是各种集合结构的父接口。

第七,什么时候用assert。 

  断言是一个包含布尔表达式的语句,在执行这个语句时假定该表达式为 true。如果表达式计算为 false,
    那么系统会报告一个 AssertionError。它用于调试目的: 
assert(a > 0); // throws an AssertionError if a <= 0 

  断言可以有两种形式: 

  assert Expression1 ; 
  assert Expression1 : Expression2 ; 

  Expression1 应该总是产生一个布尔值。 
  Expression2 可以是得出一个值的任意表达式。这个值用于生成显示更多调试信息的 String 消息。 
断言在默认情况下是禁用的。要在编译时启用断言,需要使用 source 1.4 标记: 

  javac -source 1.4 Test.java 

  要在运行时启用断言,可使用 -enableassertions 或者 -ea 标记。 
  要在运行时选择禁用断言,可使用 -da 或者 -disableassertions 标记。 
  要系统类中启用断言,可使用 -esa 或者 -dsa 标记。还可以在包的基础上启用或者禁用断言。 

  可以在预计正常情况下不会到达的任何位置上放置断言。断言可以用于验证传递给私有方法的参数。
    不过,断言不应该用于验证传递给公有方法的参数,因为不管是否启用了断言,公有方法都必须检查其
    参数。不过,既可以在公有方法中,也可以在非公有方法中利用断言测试后置条件。另外,断言不应该
    以任何方式改变程序的状态。 

  第八,GC是什么? 为什么要有GC? (基础)。 

  GC是垃圾收集器。Java 程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,
    可以调用下面的方法之一: 

  System.gc() 
  Runtime.getRuntime().gc() 

  第九,String s = new String("xyz");创建了几个String Object? 

  两个对象,一个是“xyx”,一个是指向“xyx”的引用对象s。 

  第十,Math.round(11.5)等於多少? Math.round(-11.5)等於多少? 

  Math.round(11.5)返回(long)12,Math.round(-11.5)返回(long)-11; 

  第十一,short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错? 

  short s1 = 1; s1 = s1 + 1;有错,s1是short型,s1+1是int型,不能显式转化为short型。
    可修改为s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正确。 

  第十二,sleep() 和 wait() 有什么区别? 搞线程的最爱 

  sleep()方法是使线程停止一段时间的方法。在sleep 时间间隔期满后,线程不一定立即恢复执行。
    这是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非(a)“醒来”的线程
    具有更高的优先级,(b)正在运行的线程因为其它原因而阻塞。 

  wait()是线程交互时,如果线程对一个同步对象x 发出一个wait()调用,该线程会暂停执行,被调对
    象进入等待状态,直到被唤醒或等待时间到。 

  第十三,Java有没有goto? 

  Goto?java中的保留字,现在没有在java中使用。 

  第十四,数组有没有length()这个方法? String有没有length()这个方法? 

  数组没有length()这个方法,有length的属性。 
  String有有length()这个方法。 

  第十五,Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型? 

  方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之
    间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其
    父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用
    子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,
    它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法
    是可以改变返回值的类型。 

  第十六,Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们
            有何区别? 

  Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。 
  equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内
    容和类型相配的话,返回真值。 

  第十七,给我一个你最常见到的runtime exception。 

  ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException,
    CannotRedoException, CannotUndoException, ClassCastException, CMMException,
    ConcurrentModificationException, DOMException, EmptyStackException,
    IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException,
    IllegalStateException, ImagingOpException, IndexOutOfBoundsException,
    MissingResourceException, NegativeArraySizeException, NoSuchElementException,
    NullPointerException, ProfileDataException, ProviderException, RasterFormatException,
    SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException,
    UnsupportedOperationException

  第十八,error和exception有什么区别? 

  error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处
    理这样的情况。

  exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。 

  第十九,List, Set, Map是否继承自Collection接口? 

  List,Set是 

  Map不是 

  第二十,abstract class和interface有什么区别? 

  声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基
    本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。
    然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。
    不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,
    否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。 

  接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口
    而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。
    接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义
   (即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口
    的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。
    引用可以转换到接口类型或从接口类型转换,
    instanceof 运算符可以用来决定某对象的类是否实现了接口。 

  第二十一,abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized? 

  都不能 

  第二十二,接口是否可继承接口? 抽象类是否可实现(implements)接口?
    抽象类是否可继承实体类(concrete class)? 

  接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实体类,
    但前提是实体类必须有明确的构造函数。 

  第二十三,启动一个线程是用run()还是start()? 

  启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,
    这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。
    run()方法可以产生必须退出的标志来停止一个线程。 

  第二十四,构造器Constructor是否可被override? 

  构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。 

  第二十五,是否可以继承String类? 

  String类是final类故不可以继承。 

  第二十六,当一个线程进入一个对象的一个synchronized方法后,
              其它线程是否可进入此对象的其它方法? 

  不能,一个对象的一个synchronized方法只能由一个线程访问。 

  第二十七,try {}里有一个return语句,那么紧跟在这个try后的finally {}
    里的code会不会被执行,什么时候被执行,在return前还是后? 

  会执行,在return前执行。 

  第二十八,编程题: 用最有效率的方法算出2乘以8等於几? 

  有C背景的程序员特别喜欢问这种问题。 

  2 << 3 

  第二十九,两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对? 

  不对,有相同的hash code。 

  第三十,当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,
    并可返回变化后的结果,那么这里到底是值传递还是引用传递? 

  是值传递。Java 编程语言只由值传递参数。当一个对象实例作为一个参数被传递到方法中时,
    参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的。 

  第三十一,swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上? 

  switch(expr1)中,expr1是一个整数表达式。因此传递给 switch 和 case 语句的参数应该是
    int、 short、 char 或者 byte。long,string 都不能作用于swtich。 

  第三十二,编程题: 写一个Singleton出来。

  Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。 

  一般Singleton模式通常有几种种形式: 

  第一种形式: 定义一个类,它的构造函数为private的,它有一个static的private的该类变量,
    在类初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。 

public class Singleton { 
  private Singleton(){} 
  //在自己内部定义自己一个实例,是不是很奇怪? 
  //注意这是private 只供内部调用 
  private static Singleton instance = new Singleton(); 
  //这里提供了一个供外部访问本class的静态方法,可以直接访问   
  public static Singleton getInstance() { 
    return instance;    
   } 

  第二种形式: 

public class Singleton { 
  private static Singleton instance = null; 
  public static synchronized Singleton getInstance() { 
  //这个方法比上面有所改进,不用每次都进行生成对象,只是第一次      
  //使用时生成实例,提高了效率! 
  if (instance==null) 
    instance=new Singleton(); 
return instance;   } 

  其他形式: 

  定义一个类,它的构造函数为private的,所有方法为static的。 

  一般认为第一种形式要更加安全些 

  第三十三 Hashtable和HashMap 

  Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现 

  HashMap允许将null作为一个entry的key或者value,而Hashtable不允许 

  还有就是,HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。
    因为contains方法容易让人引起误解。 

  最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,
    不需要自己为它的方法实现同步,而HashMap就必须为之提供外同步。 

  Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。

posted @ 2005-08-09 19:57 konhon 优华 阅读(324) | 评论 (0)编辑 收藏

 

在配置jsp开发环境的过程中会碰到不少问题,感谢网上的许多前辈的经验总结,作者cl41的JSP连接Mysql数据库攻略和作者Saulzy的MySQL学习笔记等文章对我来说简直是雪中送碳,为了帮助象我一样的初学者在此总结了不少作者的经验,非常感谢他们的无私奉献精神,也希望更多的人把这种精神发扬光大,呵呵,再次对所参考文章的作者表示最崇高的敬意!
以下软件下载连接地址无法显示的话,请直接到官方网站下载即可!
 
软件下载
Mysql
下载版本:mysql-4.1.13-win32.zip(Windows downloads)
http://dev.mysql.com/downloads/mysql/4.1.html

JDBC驱动
下载版本:mysql-connector-java-3.1.10.zip
http://dev.mysql.com/downloads/connector/j/3.1.html

下载j2sdk
下载版本:jdk-1_5_0_04-windows-i586-p.exe
http://java.sun.com/j2se/1.5.0/download.jsp

下载tomcat
下载版本: jakarta-tomcat-5.5.9.exe
http://jakarta.apache.org/site/downloads/downloads_tomcat-5.cgi

安装,配置j2sdk:

执行j2sdk安装程序,按默认设置进行安装,也可自定义路径,但需修改下面的配置

配置j2sdk:

配置环境变量:

我的电脑->属性->高级->环境变量->系统变量中添加以下环境变量:
JAVA_HOME=C:\Program Files\Java\jdk1.5.0_04
CLASSPATH=%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
path=%JAVA_HOME%\bin;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem

写一个简单的java程序来测试J2SDK是否已安装成功:
public class hello
{
 public static void main(String args[])
 {
 System.out.println("Hello");
 }
}

将程序保存为文件名为hello.java的文件。

打开命令提示符窗口,进入到hello.java所在目录,键入下面的命令
javac hello.java
java hello
此时若打印出来hello则安装成功,若没有打印出这句话,仔细检查以上配置是否正确。
注意系统文件夹选项中应确定“隐藏已知文件类型的扩展名”不勾选(我的电脑—工具—查看)

安装,配置tomcat
执行tomcat安装程序,按默认设置进行安装,也可自定义路径,但需修改下面的配置

我的电脑->属性->高级->环境变量->系统变量中添加以下环境变量
CATALINA_HOME=C:\Program Files\Apache Software Foundation\Tomcat 5.5
CATALINA_BASE=C:\Program Files\Apache Software Foundation\Tomcat 5.5

修改环境变量中的classpath,把tomat安装目录下的common\lib下的servlet-api.jar添加到classpath中去,
修改后的classpath如下:
classpath=%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;C:\Program Files\Apache Software Foundation\Tomcat 5.5\common\lib\servlet-api.jar;

启动tomcat,在IE中访问http://localhost:8080,若看到tomcat的欢迎页面的话说明安装成功。

安装mysql
解压缩mysql-4.1.13-win32.zip,运行setup.exe
首先出现的是安装向导欢迎界面,直接点击“Next”
继续,选择安装类型,选择“自定义”custom安装,然后点“Next”下一步,出现自定义安装界面
选择安装路径:C:\MySQL Server 4.1(可自定义)
点“OK”返回到自定义安装界面,路径已改为设置的路径
点“Next”,准备开始安装
点“Install”开始安装
完成后出现创建MySQL.com帐号的界面
如果是首次使用MySQL,选“Create anew free MySQL.com accout”
点“Next”,输入你的Email地址和自己设定的用于登录MySQL.com的密码
填完后点“Next”进入第二步
填写姓名等相关信息,填完点“Next”,进入第三步
填完电话号码、公司名称等信息后,点“Next”,
然后出现预览你刚才填的信息的界面,点“Next”出现安装完成界面
注意,这里有个配置向导的选项(Configure the MySQL Server now),
建议勾选立即配置你的MySQL。许多说安装完MySQL后无法启动,原因就在于没有配置MySQL。
点击“Finish”完成安装,并开始配置MySQL
点“Next”,进入配置类型选择页面。选“Detailed configuration”(详细配置)
点“Next”,进入服务类型选择页面。选“Developer Machine”(开发者机器),这样占用系统的资源不会很多
点“Next”后,进入数据库用法选择页面。选择“Multifunctional Database”
点“Next”,进入选择InnoDB数据存放位置页面
不用更改设置,直接放在Installation Path安装目录里即可,然后点“Next”,选择MySQL的同时联接数
选择“Manual Setting”,设置为100(根据自己需要,酌情设置)
点“Next”,配置MySQL在TCP/IP通讯环境中的端口选择默认的3306端口即可。
点“Next”,选择MySQL中的字符设置
注意,这里的选择将会影响你是否能在MySQL中使用中文。选择gb2312字符集以便支持简体中文
点“Next”,设置Windows服务选项
注意,这里的选择很关键。
“Install As Windows Service”一定要勾选,这是将MySQL作为Windows的服务运行。
“Service Name”就用默认的“MySQL”
下面的“Launch the MySQL Server automatically”一定要勾选,这样Windows启动时,MySQL就会自动启动服务,要不然就要手工启动MySQL。
许多人说安装MySQL后无法启动、无法连接、出现10061错误,原因就在这里。
点“Next”,设置根帐号root的登录密码
“Modify Security Settings”是设置根帐号的密码,输入你设定的密码即可。
“Create An Anonymous Account”是创建一个匿名帐号,这样会导致未经授权的用户非法访问你的数据库,有安全隐患,建议不要勾选。
点“Next”,MySQL配置向导将依据你上面的所有设定配置MySQL,以便MySQL的运行符合你的需要
点“Execute”开始配置,当出现“Service started successfully”时,说明你的配置完成,MySQL服务启动成功
点“Finish”完成,整个MySQL的配置完成,剩下的就是用MySQL客户端连接MySQL服务器,然后使用了。


安装JDBC驱动:
解压缩mysql-connector-java-3.1.10.zip
将要使用的是mysql-connector-java-3.1.10-bin-g.jar和mysql-connector-java-3.1.10-bin.jar

配置
在C:\Program Files\Java目录下建立mysqlforjdbc子目录,进入该目录将mysql-connector-java-3.1.10-bin.jar到该目录下
进入C:\Program Files\Java\jdk1.5.0_04\lib目录将mysql-connector-java-3.1.10-bin-g.jar拷贝到该目录下
然后配置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;到该环境变量中去
追加以后环境变量如下:
CLASSPATH=%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;C:\Program Files\Apache Software Foundation\Tomcat5.5\common\lib\servlet-api.jar;%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;
配置这个的目的是让java应用程序找到连接mysql的驱动.


查看并启动MySQL服务
在Windows XP下安装完MySQL后,它就已经自动启动服务了,并且在开始菜单中有其客户端的快捷方式连接
可以通过Windows的服务管理器查看。“开始”-“运行”,输入“services.msc”,回车。
弹出Windows的服务管理器,然后就可以看见服务名为“mysql”的服务项了,其右边标明“已启动”
在开始菜单-所有程序-MySQL-MySQL Server 4.1-MySQL Command Line Client用客户端的快捷方式连接
输入安装是设置的密码即可


数据库的使用

Mysql安装完毕以后,在开始菜单-所有程序-MySQL-MySQL Server 4.1-MySQL Command Line Client用客户端的快捷方式连接
输入安装时设置的密码

使用mysql的基本命令(在mysql命令行编辑每输入完命令后最后一定要有分号)
显示数据库:show databases;
使用数据库:use 数据库名;


建库
在mysql里建一个数据库first,以及在数据库里建一个表about
命令:create database first;

为数据库设置权限(用户和密码)
命令:grant all privileges on first.* to test@localhost identified by  “123456”;
当你执行完这个命令以后,只要你再以用户名:test,密码:123456登录时你就只可以对first这个数据库操作,这样避开使用root
输入命令:use first;
使用first数据库;

在first库中建表
命令:create table about(id int(8) primary key,name varchar(10));

在表中假如数据:
命令:insert into  about values('xyw1026','laojiang');

退出
命令:exit

JSP连接mysql
在C:\Program Files\Apache Software Foundation\Tomcat5.5\webapps目录下建立子目录myapp
进入C:\Program Files\Apache Software Foundation\Tomcat5.5\webapps\myapp目录下
用记事本编写一个文件保存为first.jsp
代码如下:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<html>
<body>
<%Class.forName("org.gjt.mm.mysql.Driver").newInstance();
String url ="jdbc:mysql://localhost/softforum?user=soft&password=soft1234&useUnicode=true&characterEncoding=8859_1"
//first为你的数据库名
Connection conn= DriverManager.getConnection(url);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from first";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%>
您的第一个字段内容为:<%=rs.getString(1)%>
您的第二个字段内容为:<%=rs.getString(2)%>
<%}%>
<%out.print("数据库操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>

在浏览器中输入:
http://127.0.0.1:8080/myapp/first.jsp
若出现:
id|num
0 |laojiang

数据库操作成功,恭喜你

表示配置成功


进入C:\Program Files\Apache Software Foundation\Tomcat5.5\webapps\myapp目录
在myapp目录下新建一个目录WEB-INF,注意,目录名称是区分大小写的;
在WEB-INF下用记事本新建一个文件,命名为web.xml,内容如下:

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
<display-name>My Web Application</display-name>
<description>
A application for test.
</description>
</web-app>

在myapp下用记事本新建一个测试的jsp页面,文件名为index.jsp,文件内容如下:

<html><body><center>
Now time is: <%=new java.util.Date()%>
</center></body></html>


重启Tomcat
打开浏览器,输入http://localhost:8080/myapp/index.jsp
看到当前时间的话说明成功安装。

建立自己的Servlet:
用记事本新建一个servlet程序,文件名为HelloWorld.java,文件内容如下:

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWorld extends HttpServlet
{
public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException
{

response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html><head><title>");
out.println("This is my first Servlet");
out.println("</title></head><body>");
out.println("<h1>Hello,World!</h1>");
out.println("</body></html>");

}
}


编译
将HelloWorld.java剪切到C:\Program Files\Apache Software Foundation\Tomcat5.5\common\classes目录下
命令行方式下输入:
cd C:\Program Files\Apache Software Foundation\Tomcat5.5\common\classes
javac HelloWorld.java
用javac HelloWorld.java来编译这个文件,如果出现无法import javax.servlet.*
则将C:\Program Files\Apache Software Foundation\Tomcat5.5\common\lib目录下的servlet-api.jar文件拷贝并添加到
C:\Program Files\Java\jre1.5.0_04\lib\ext目录中去就可以了

然后在C:\Program Files\Apache Software Foundation\Tomcat5.5\common\classes下会产生一个编译后的servlet文件:HelloWorld.class
用记事本打开C:\Program Files\Apache Software Foundation\Tomcat5.5\webapps\ROOT\WEB-INF目录下的web.xml如下所示,添加后的内容如下:
.
.
.
<!-- JSPC servlet mappings start -->

    <servlet>
        <servlet-name>org.apache.jsp.index_jsp</servlet-name>
        <servlet-class>org.apache.jsp.index_jsp</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>org.apache.jsp.index_jsp</servlet-name>
        <url-pattern>/index.jsp</url-pattern>
    </servlet-mapping>

   
    <servlet>
        <servlet-name>HelloWorld</servlet-name>
        <servlet-class>HelloWorld</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>HelloWorld</servlet-name>
        <url-pattern>/servlet/HelloWorld</url-pattern>
    </servlet-mapping>

<!-- JSPC servlet mappings end -->

</web-app>

这段话中的servlet这一段声明了你要调用的Servlet,而servlet-mapping则是将声明的servlet“映射”到/servlet/HelloWorld地址上

启动Tomcat,启动浏览器,输入http://localhost:8080//servlet/HelloWorld 如果看到输出HelloWorld!就说明编写的servlet成功了。
注意:修改了web.xml以及新加了class,都要重启Tomcat


也可以在自己创建的目录下测试如:
将HelloWorld.class拷贝到C:\Program Files\Apache Software Foundation\Tomcat5.5\webapps\myapp\WEB-INF\classes目录下
其中classes目录若没有就创建一个
用记事本打开C:\Program Files\Apache Software Foundation\Tomcat5.5\webapps\myapp\WEB-INF目录下的web.xml如下所示,修改后的内容如下:
.
.
.
<!-- JSPC servlet mappings start -->
   
    <servlet>
        <servlet-name>HelloWorld</servlet-name>
        <servlet-class>HelloWorld</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>HelloWorld</servlet-name>
        <url-pattern>/servlet/HelloWorld</url-pattern>
    </servlet-mapping>

<!-- JSPC servlet mappings end -->

</web-app>


启动Tomcat,启动浏览器,输入http://localhost:8080/myapp/servlet/HelloWorld 如果看到输出HelloWorld!就说明编写的servlet成功了。
注意:修改了web.xml以及新加了class,都要重启Tomcat


建立自己的javaBean:

用记事本新建一个java程序,文件名为TestBean.java,文件内容如下:
package test;
public class TestBean{
private String name = null;
public TestBean(String strName_p){
this.name=strName_p;
}
public void setName(String strName_p){
this.name=strName_p;
}
public String getName(){
return this.name;
}
}

编译
将TestBean.java放在c:\test下,使用如下命令编译:
C:\test>javac TestBean.java
然后在c:\Test下会产生一个编译后的bean文件:TestBean.class
将TestBean.class文件剪切到C:\Program Files\Apache Software Foundation\Tomcat5.5\webapps\myapp\WEB-INF\classes\test目录下,
若无某些子目录则创建一个

新建一个TestBean.jsp文件,文件内容为:
<%@ page import="test.TestBean" %>
<html><body><center>
<%
TestBean testBean=new TestBean("This is a test java bean.");
%>
Java bean name is: <%=testBean.getName()%>
</center></body></html>

重启Tomcat,启动浏览器,输入http://localhost:8080/myapp/TestBean.jsp 如果看到输出Java bean name is: This is a test java bean
就说明编写的javaBean成功了。


(特别注明:本文内容均来自互联网)

posted @ 2005-08-09 19:54 konhon 优华 阅读(944) | 评论 (0)编辑 收藏

http://www.javajia.com

Hibernate入门容易,掌握精通我也不敢自夸。我第一遍看Hibernate文档的时候也觉得很吃力,但不是因为Hibernate难掌握而感到吃力,是因为Hibernate文档处处都是持久层设计的经验和最佳实践。Hibernate文档准确的来说,绝大部分内容都在讲对象的持久层设计,而不是简单的Hibernate使用,使用问题查Java doc就够了。所以学习Hibernate,主要是在学习持久层的设计模式,如果你把Hibernate文档都看完了,还整天只会提那些 Hibernate的配置问题,Hibernate的类调用问题,我觉得这样的人还没有真正的入门,算是白学了。 

我对Hibernate 的那些配置也不是特别纯熟,每次写hbm,都要对照文档一点点的检查;类调用参数也不太记得,写代码也要Java doc随时备查。但是我在学习Hibernate的时候即集中所有精力来理解Hibernate的运行原理,集中精力来掌握持久层设计应该把握的原则和技巧,这些才对我是最重用的东西。毫不夸张的说,学习完Hibernate,我对JDBC的编程也提高了一大截,更不要说对于J2EE架构的持久层的框架设计,基本上是了然于胸了,即使将来换了API,不用Hibernate的,改用JDO,Castor什么的,这些经验一样照用。 

学习Hibernate主要不是在学习Hibernat怎么配置,用工具怎么生成hbm文件,如果你把重点放在这里,基本上等于白学了Hibernate。Hibernate的精华在于无与伦比的灵巧的对象持久层设计,这些持久层设计经验不会因为你不用Hibernate而丧失掉,我自己学习Hibernate,已经明显感觉到对持久层设计能力已经长了很多经验值了,这些经验甚至不光可以用在Java上,用在.net上也是一样。所以Hibernate配置的学习,我只是简单看看,用的时候知道到那里去查就行了,一堆复杂的生成工具我根本就看都不去看,这样算下来,掌握Hibernate的配置,可以用Hibernate来替代JDBC写程序,不过花上3天时间就足够了。我想3天时间对你来说不算很奢侈的学习代价吧。 

为什么我这么强调学习Hibernate的对象持久层设计理念呢?那就看你的理想是想一辈子做一个程序员呢?还是想向更高的方向发展呢?从纯做技术的角度来说,职业发展的最高点是“系统架构师”,Bill Gates不是还叫做微软的首席系统架构师吗?System Architect职位需要的是你的学习和领悟能力,如果你不能把学习Hibernate得到的设计经验运用到其它地方,那么你是失败的,也没有资格做 System Architect。 

不管JDO也好,Hibernate也好,TopLink也好,CocoBase也好,还是 Castor,还是什么Torque,OJB,软件的使用和配置方法可以各异,但本质上都是ORM,都是对JDBC的对象持久层封装,所以万变不离其宗,如果你完整的学习和掌握Hibernate花了1个月的时间,那么你再学习OJB的时间不应该超过1个星期,因为你已经把对象持久层设计都了然于胸了,你需要的只是熟悉一下OJB的API和配置罢了,至于怎么运用OJB进行持久层的开发你早就已经熟悉了。 

所以当你掌握了两种以上的ORM,你应该能够不拘于使用的ORM软件的限制,设计出适合于你的项目的持久层来,这才是System Architect的水准。用金庸小说来打个比方来说吧,张无忌学太极剑,只记剑意,不记剑招,这才是真正的高手,而低手就只会去学习剑招,而不去领会剑招背后蕴含的剑意,所以一辈子都是低手,永远不能真正学会太极剑。所以周颠看到张三丰第二次演示太极剑,招式完全不同就以为是另一套东西,其实本质上都一样。学习Hibernate也不要舍本逐末的去学各种五花八门的工具,重点掌握它的对象持久层设计理念。
posted @ 2005-08-09 03:14 konhon 优华 阅读(359) | 评论 (0)编辑 收藏

public class HelloWorld
{
    
static
    
{
        System.
out.println("Hello, World");
        System.exit(
0);
     }

}

該程序雖然沒有main函數, 但仍然能顯示出"Hello, World"
posted @ 2005-08-07 20:06 konhon 优华 阅读(246) | 评论 (0)编辑 收藏

下午下載了Compiere的源程序, 准備花點時間研究下, 學Java快一個月啦, 因自己之前有C++和Delphi基礎, 學習Java的語法還算順利.目前感覺自己最缺的就是實戰項目經驗啦.
posted @ 2005-08-03 04:03 konhon 优华 阅读(291) | 评论 (0)编辑 收藏

今天上午因工作需要, 寫了一個在SQL Server中批量修改字段類型的小程序, 功能不是很完善, 尚未考慮字段的默認值.但該程序涉及到了修改主鍵的字段類型, 修改有默認值的字段跟修改主鍵字段的類型原理是一樣的.這裡只是對有默認值的字段修改提供一些參考, 如果有興趣自己可以完善.
關於修改有默認值的字段的一些參考資料
/*
從SysColumns表中cdefault字段是否為0可以判斷出是否有默認值
查詢出字段的默認值
Select text From SysComments
Where id = (Select cdefault from SysColumns where name = '字段')
修改有默認值的字段時要先將對就的Default or DEFAULT constraint先刪除才行, 當然在修改完字段時要重建啦.
Select Name From SysObjects Where xType = 'D'
       and Parent_Obj = (Select id From SysObjects Where Name = '表名')
*/

程序代碼如下:
/*
    此程序沒有考慮字段的默認值
*/
-- xtype = '167' 字段類型為 varchar 可用 select * from systypes 查看
Declare  curAlterInfo Cursor For Select a.Name AlterFieldName, a.Length, a.IsNullable, b.Name AlterTableName
                                                    From SysColumns a, SysObjects b Where a.id = b.id and a.xType = '167'
                                                    and b.xType = 'u' and a.cdefault = 0
declare @AlterFieldName nvarchar(50),  -- 修改的字段
            @AlterTableName nvarchar(50),  -- 修改的表名
            @Length int, -- 字段以長度
            @IsNullable bit, -- 字段是否允許為空
            @PkName nvarchar(50), -- 主鍵名
            @PkFieldName nvarchar(500), --主鍵字段名
            @TmpFieldName nvarchar(50),
            @TmpTableName nvarchar(50),
            @Sql nvarchar(500)

Set NoCount On
Begin Tran
open curAlterInfo
Fetch curAlterInfo Into @AlterFieldName, @Length, @IsNullable, @AlterTableName
While @@Fetch_Status=0
Begin
    print @AlterTableName
    --檢查修改的表是否有主鍵
    If Exists(Select Name From SysObjects Where xType = 'PK'
                  and Parent_Obj = (Select id From SysObjects Where Name = @AlterTableName))
    Begin
       Set @TmpTableName = @AlterTableName
       -- 取得主鍵名
       Select @PkName = Name From SysObjects Where xType = 'PK'
                 and Parent_Obj = (Select id From SysObjects Where Name = @AlterTableName)
       Set @PkFieldName = ''
       -- 主鍵字段
       Declare curPkFieldName Cursor For Select b.Name From SysIndexKeys a, SysColumns b
                                                Where a.id = (Select id From SysIndexes Where Name = @PkName)
                                                and a.indid = 1 and a.colid = b.colid and a.id = b.id
       -- 取得所有的主鍵字段
       Open curPkFieldName
       Fetch curPkFieldName Into @TmpFieldName
       While @@fetch_status = 0
       Begin
           Set @PkFieldName = @PkFieldName + @TmpFieldName + ','
           Fetch curPkFieldName Into @TmpFieldName
       End
       Close curPkFieldName
       Deallocate curPkFieldName
       -- 刪除舊主鍵
       Set @Sql = 'ALTER TABLE '+ @AlterTableName + ' DROP CONSTRAINT ' + @PkName
       Print @Sql
       Exec(@Sql)   
    end
    -- 修改字段
    Set @Sql = 'ALTER TABLE ' + @AlterTableName + ' ALTER COLUMN ' + @AlterFieldName
                   + ' NVARCHAR( ' + CAST(@Length AS NVARCHAR) + ')'
    -- 是否允許為空
    if @IsNullable = 0
        Set @Sql = @Sql + ' NOT NULL'
    Print @sql
    Exec(@sql)
    Fetch curAlterInfo Into @AlterFieldName, @Length, @IsNullable, @AlterTableName
    -- 創建主鍵
    If (@AlterTableName <> @TmpTableName or @@fetch_status <> 0) and @PkFieldName <> ''
    Begin
         Set @PkFieldName = Left(@PkFieldName, Len(@PkFieldName) - 1)
         Set @Sql =  ' ALTER TABLE ' + @TmpTableName + ' ADD CONSTRAINT ' + @PkName
                        +  ' PRIMARY KEY CLUSTERED(' + @PkFieldName + ') ON [PRIMARY]'
         Print @Sql
         Exec(@Sql)
         print '-----------------------------'
         Set @PkFieldName = ''
    End
End
Close curAlterInfo
Deallocate curAlterInfo
If @@Error > 0
   Rollback Tran
Else
   Commit Tran
Set NoCount Off

posted @ 2005-08-03 01:36 konhon 优华 阅读(6621) | 评论 (2)编辑 收藏

http://happy.enet.com.cn/php/list.php?cid=83
精美圖標下載.
posted @ 2005-08-02 01:54 konhon 优华 阅读(703) | 评论 (0)编辑 收藏

1、 安装Tomcat

参考Tomcat for window 的安装向导,基本直接安装即可,注意:安装时会
提示输入管理用户名和密码,这是以后会用到的用户名和密码,切记。

2、 将MySqL的JDBC驱动复制到%Tomcat%\Common\lib目录下。

3、 安装MySql,默认安装即可。

4、 使用Tomcat的Web管理应用配置数据源

启动Tomcat服务器,打开浏览器,输入http://localhost:8080/admin/(其中
localhost可能是一台机器的IP或是服务器名称),进入管理界面的登陆页
面,这时候请输入原来安装时要求输入的用户名和密码,登陆到管理界
面,选择Resources-Data sources进入配置数据源界面,选择Data Source
Actions ->选择Create New Data Source,进入配置详细信息界面,内容如
下:

JNDI Name: jdbc/mysql
Data Source URL: jdbc:mysql://localhost/dbname
JDBC Driver Class: com.mysql.jdbc.Driver
User Name: root
Password: ********
Max. Active Connections: 4
Max. Idle Connections: 2
Max. Wait for Connection: 500
Validation Query:

要求输入的JNDI Name等信息,其中除了JDBC DriverClass之外,其他的可以根据你的需要填写。比如Data Source URL的内容可能是:jdbc:mysql:// IP或是名称/DataBaseName,其中DataBaseName是你的数据库名称,IP是你的数据库的所在的服务器的IP或是名称。最后点击Save->Commit Change.这样你的数据源的基本资料配置一半了。

4、改写Server.xml文件。该文件位于%Tomcat%\conf目录下,用记事本打开并在</host>之前加入下面的配置。

 <Context path = "/webappname">
         <ResourceLink name = "jdbc/mysql" global = "jdbc/mysql"
                 type = javax.sql.DataSourcer"/>
 </Context>
webappname即你的web目录名

5、保存,并将Tomcat的服务Stop and Start即可。

下面是我的测试代码:

<% @ page contentType = " text/html; charset=GBK " %>
<% @ page import = " java.sql.* " %>
<% @ page import = " javax.sql.* " %>
<% @ page import = " javax.naming.* " %>
<%  
Connection con
= null ;
Statement sm
= null ;
ResultSet rs
= null ;
// out.println("<h1>Begin<h1>");
try {
   InitialContext ctx
= new  InitialContext();
   DataSource ds
= (DataSource)ctx.lookup( " java:comp/env/jdbc/mysql " );
   con 
=  ds.getConnection();
   sm 
=  con.createStatement();
   rs 
=  sm.executeQuery( " select * from iuser " );
   
while (rs.next())
      
out .println(rs.getString( " name " ) + " , " );
}
catch (Exception e) {
    
out .println(e.getMessage());
    e.printStackTrace();
}
finally   {
    
if  (rs  !=   null {
        
try   {
            rs.close();
        }
  catch  (SQLException e)  {}
        rs 
=   null ;
    }

    
if  (sm  !=   null {
        
try   {
            sm.close();
        }
  catch  (SQLException e)  {}
        sm 
=   null ;
    }

    
if  (con  !=   null {
        
try   {
            con.close();
        }
  catch  (SQLException e)  {}
        con 
=   null ;
    }

}

%>


这个方法我自己亲自测试过, 是可行的。
不过我自己在网上搜索过,他们都配置的比较复杂。要改好几个文件。
我的环境:win2000 + Tomcat5.0.28

[補充: 對於Tomcat 5.5.X後, 只要在圖形化配置後並Commit Changes, 然後在C:\Program Files\Apache Software Foundation\Tomcat 5.5\conf\context.xml中添加如下即可]
         <ResourceLink name = "jdbc/mysql" global = "jdbc/mysql" 
                 type 
= javax.sql.DataSourcer"/>
並在Web.xml中加入
    <resource-ref>
        
<res-ref-name>jdbc/mysql</res-ref-name>
        
<res-type>javax.sql.DataSource</res-type>
        
<res-auth>Container</res-auth>
    
</resource-ref>
posted @ 2005-07-29 05:37 konhon 优华 阅读(1512) | 评论 (0)编辑 收藏

SWT/JFace的源代碼共分為兩個文件
SWT源代碼的文件為: swtsrc.zip, 位於/plugins/org.eclipse.platform.source.win32.win32.x86_3.0.2/src
    /org.eclipse.swt.win32_3.0.2/ws/win32/swtsrc.zip
JFace源代碼的文件為: jfacesrc.zip, 位於/Eclipse/plugins/org.eclipse.platform.source_3.0.2/src
    /org.eclipse.jface_3.0.2/jfacesrc.zip

posted @ 2005-07-21 20:53 konhon 优华 阅读(2191) | 评论 (1)编辑 收藏

JFace提供了一個Action類, 它將名稱,圖像,動作處理程序等集成在其中,這樣可以共享Action來形成菜單項, 工具欄按鈕等.

將Action轉化成MenuItem是由MenuManager(菜單管理器)來完成的, MenuManager簡化了菜單的創建, 一旦生成了MenuManager對象, 就可以通用於菜單欄, 彈出菜單, 工具欄下拉菜單.

另: Action寫成一個個類會很亂, JFace提供了一個ActionGroup類用於統一管理Action, 然後讓外界程序通過ActionGroup來訪回Action.

將Action添加到MenuManager用add()方法.
MenuManager生成Menu用createMenuBar, createContextMenu方法.
posted @ 2005-07-19 21:52 konhon 优华 阅读(607) | 评论 (0)编辑 收藏

仅列出标题
共21页: First 上一页 13 14 15 16 17 18 19 20 21 下一页