博文

JAVA-JSP编程的六个常见问题-Happy漫步者(2009-02-28 02:10:00)

摘要:1.对应String类型的对象使用print()方法时,如果对象为null,将打印null而不是引发NullPointerException,由此引用的问题是容易造成错觉,对于以后对字符串的操作容易引起问题.2.引发NullPointerException异常,主要原因是没有对对象的存在性进行验证,在jsp编程中经常出现:if (request.getParameter("param").equals("xxxx")),out.println(session.getAttribute("snStr"))等.解决这个问题的方法是在使用前进行判空比较:  if (request.getParameter("param")!=null)  {if (request.getParameter("param").equals("xxx"))…}else{…}3.引发NumberFormatException异常:主要原因是将用户提交的内容转换为整数或者浮点数时用户输入了其它非法字符.处理的主要方式是在需要进行转换的地方使用try/catch块捕获此异常然后提示用户输入合法数据.4.引发StringIndexOutOfBoundsException异常:主要原因是使用String的substring(),charAt()等方法,而字符串的长度不够,就会引发此异常;在字符串为null时也会引发NullPointerException.解决的方法是判空,判断长度或者转换为字节数组.考虑到这些操作很多,可以将之封装到javabean中.5.引发NoClassDefFoundError错误,主要原因是类路径或者类文件放置错误,类文件的放置要符合服务器的要求.6.引发java.lang.Error错误,主要原因是对系统所访问外部资源,未执行关闭操作,导致外部资源大量浪费,最终可能导致系统无法正常运行;对系统所访问的外部资源关闭次数太多,外部系统无法正常处理;所系统访问的外部资源出现异常情况. 解决的方法是:访问外部资源前,首先检查该资源(如数据库)是否可正常连接或操作;访问外部资源时,如果进行了连接,一定进行关闭操作,并仅进行一次关闭操作;尽量在同一操作中共享外部资源,以减少该操作对资源的消费,提高程序的执行效率. ------- 更多笔记请见:Happy漫步者花园http://es......

阅读全文(1269) | 评论:0

Happy漫步者-J2EE模板设计Velocity学习资料(2008-12-19 00:15:00)

摘要:Velocity是一个基于java的模板引擎(template engine).它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象.Velocity的能力远不止web站点开发这个领域,例如,它可以从模板(template)产生SQL和PostScript,XML,它也可以被当作一个独立工具来产生源代码和报告,或者作为其他系统的集成组件使用.Velocity也可以为Turbineweb开发架构提供模板服务(templateservice).Velocity+Turbine提供一个模板服务的方式允许一个web应用以一个真正的MVC模型进行开发.Velocity语法及介绍,含有结合struts设计的等具体实例官方网站http://velocity.apache.org/资料下载Velocity --------- 文章来源: http://www.txdnet.cn/ShowEssay-2-1992-Txdnet.jsp......

阅读全文(2598) | 评论:0

Happy漫步者笔记JSP中通过JAVA-JNI调用C++编写的动态链接库(2008-11-28 11:14:00)

摘要:JAVA通过JNI调用本地方法,而本地方法是以动态链接库文件的形式存放的(在WINDOWS平台上是DLL文件形式,在UNIX机器上是SO文件形式).通过调用本地的库文件的内部方法,使JAVA可以实现和本地机器的紧密联系,调用系统级的各接口方法,将JAVA应用与C++结合起来相互弥补自身的不足.这里举出了JAVA两种方法引入C++动态库的方式:(示例中以TxdnetDll.dll为例)static { System.loadLibrary(“TxdnetDll”); //放在java库路径中 ,一般是windows系统目录或system32目录} static { System.load(“C:\web\lib\TxdnetDll.dll”); //这种方式比较灵活,不限制于目录}下面就举例来简单说明如何使用C++写的动态链接库开发环境C++开发环境:DEV-C++ 5JAVA开发环境:Editplus2通过Dll.java类引入动态链接库Dll.javapackage Jni.Test;public class Dll {private static String dllPath;public Dll(){}public static void loadlib(String dllpath){dllPath = dllpath ;//static //{//System.loadLibrary(dllPath + "TxdnetDll.dll");//载入dllSystem.load(dllPath + "TxdnetDll.dll");//载入dll//}}public native static int outInt(int i);//函数声明}在Jni同目录执行命令:javac -source 1.5 -target 1.5 Jni/Test/Dll.javajavah -jni Jni.Test.Dll会在jni同目录下生成一个头文件:Jni_Test_Dll.h/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class Jni_Test_Dll */#ifndef _Included_Jni_Test_Dll#defi......

阅读全文(5976) | 评论:2

Java设计模式之Singleton单例模式(2008-08-08 14:10:00)

摘要:Singleton的英文意义是独身,也就是只有一个人,应用在物件导向语言上,通常翻译作单例:单一个实例(Instance). 很多时候,您会需要Singleton模式,例如印表机管理,您希望程式中只能有一个Print Spooler,以避免两个列印动作同时输入至印表机中;例如资料库管理,因为建立连接( Connection)物件会耗用资源,您希望程式中只能有一个连接物件,所有其它的程式都透过这个物件来连接资料库,以避免连接物件的重复开启造成资源的耗用;例如系统程式属性档的读取,您使用单一个物件来读取属性内容,而程式的其它部份都向这个物件要求属性资料,而不是自行读取属性资料. 以印表机设计为例,有的设计人员会采取全域变数的方式来建立实例,并在程式中随机取用这个实例,Java虽然不支援全域变数,但透过将物件包装在一个类别之中,也有人会采用这样的写法: public class PrintSpooler { public PrintSpooler() { // .... } public Connection getSpooler(){ .... }} public class GlobalObject { private PrintSpooler printSpooler; public GlobalObject () { printSpooler = new PrintSpooler(); ... } public void getPrintSpooler() { return printSpooler; } } 无论全域变数或是以上的例子,都无法保证只产生唯一个实例,您也许会注意不犯这个错误,但与您共同工作的伙伴也许会直觉的使用建构方法来产生一个PrintSpooler实例. Singleton模式可以保证一个类别只有一个实例,并提供一个访问(visit)这个实例的方法. 一个Singleton实作即为Java中的java.lang.Runtime类别,每个Java程式执行时都有一个唯一的Runtime物件,可以透过它提供的静态方法getRuntime()方法来取得这个物件,例如: Runtime runtime = Runtime.getRuntime(); 取得Runtime物件之后,您可以透过它进行一些外部命令的执行,进行垃圾处理等等指令,......

阅读全文(3745) | 评论:0

JSP中FCKeditor2.6设置For最新2.4上传驱动包(2008-07-27 20:46:00)

摘要:著名WEB文本编辑器开发社区FCKeditor在官方网站www.fckeditor.net推出Fckeditor 2.6.xBeta版本,官方消息称在8月初将发布其正式稳定版本,另人期待:)在http://www.fckeditor.net/whatsnew可一看到每个版本所做的改动FCKeditor得到了越来越多人的支持,轻量级的FCKeditor被众多网站所使用,希望能做的更好.话不多说,接下来我们如何用FCKeditor 2.6加上Java Fckeditor运行包2.4版本来构建一个能正常上传文件的WEB文本编辑器.在最后附上我的测试Demo给大家1,准备:测试服务器resin 3.0.x,JDK 1.6 ,XPSP2系统FCKeditor 2.6 公用文件:下载:http://www.fckeditor.net/whatsnewFCKeditor 2.4 Java 上传驱动包先申明一下,FCKeditor 2.4 Java比以前的2.3 java上传驱动更好设置,上传功能也实现的比以前的要完美.但还需要以下4个组件包:slf4j-api-1.5.2.jarslf4j-jdk14-1.5.2.jar地址:http://www.slf4j.org/download.htmlslf4j下载后解压只选择里面的以上两个包即可.commons-io-1.4.jar地址:http://commons.apache.org/io/commons-fileupload-1.2.1.jar地址:http://commons.apache.org/fileupload/FCKeditor 2.4 Java下载:http://www.fckeditor.net/downloadFCKeditor 里面附带web.xml将准备的jar java包放到我们的测试工程目录WEB-INF/lib下把FCKeditor 2.4 Java解压出来的web.xml放到WEB-INF/下及FCKeditor2.4.jar放到lib下并把web.xml里的<web-app version="2.4" id="fckeditor-java" xmlns="http://java.sun.com/xml/ns/j2ee"xmlns:xsi="http://www.w3.org/2001/XMLS......

阅读全文(5876) | 评论:1

Java试题整理及教学测试资料下载(2008-07-06 11:37:00)

摘要:Java试题:1,设计一个矩形类,计算某一给定矩形的面积.(10分)2,设有计算阶乘的函数f(n)=n!,试设计一个计算阶乘的方法和相应的类,并利用这个类计算f(5)和f(17)的值.(10分)3,简述对象间的通信(消息)与实例方法的调用?(10分)4,定义一个代表学生的类Student,创建该类的3个对象放在一数组中,试将数组的元素依次输出.Student类的属性包括"学号","姓名"和"成绩";方法包括"构造方法","获取学号","获取姓名","获取成绩".(10分)5,编程判断当前目录下是否存在文件file1.txt和file2.txt,如果都存在则将file1.txt的内容写到文件file2.txt中去.(10分)6,简述Applet类的主要方法?(10分)7,编写一能接收参数的小应用程序,参数值为字符串"新年快乐",并写出该小应用程序编译执行的过程.(10分)8,编程计算从10到20的平方值,并将结果保存在一个数组中.(10分)9,设有计算阶乘的函数f(n)=n!,试设计一个计算阶乘的方法和相应的类,并利用这个类计算f(5)和f(17)的值.(10分)10,怎么样理解循环语言,并一实例来说明?(10分)第一,谈谈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() 有什么区别......

阅读全文(4034) | 评论:0

Java深入了解String对象(2008-07-06 11:36:00)

摘要:一,从根本上认识java.lang.String类和String池 首先,我建议先看看String类的源码实现,这是从本质上认识String类的根本出发点.从中可以看到: 1,String类是final的,不可被继承.public final class String. 2,String类是的本质是字符数组char[], 并且其值不可改变.private final char value[]; 然后打开String类的API文档,可以发现: 3,String类对象有个特殊的创建的方式,就是直接指定比如String x = "abc","abc"就表示一个字符串对象.而x是"abc"对象的地址,也叫做"abc"对象的引用. 4,String对象可以通过"+"串联.串联后会生成新的字符串.也可以通过concat()来串联,这个后面会讲述. 5,创建字符串的方式很多,归纳起来有三类: 其一,使用new关键字创建字符串,比如String s1 = new String("abc"); 其二,直接指定.比如String s2 = "abc"; 其三,使用串联生成新的字符串.比如String s3 = "ab" + "c"; 6,Java运行时会维护一个String Pool(String池),JavaDoc翻译很模糊"字符串缓冲区".String池用来存放运行时中产生的各种字符串,并且池中的字符串的内容不重复.而一般对象不存在这个缓冲池,并且创建的对象仅仅存在于方法的堆栈区.下面是个系统内存示意图:二,String对象的创建 String对象的创建也很讲究,关键是要明白其原理. 原理1:当使用任何方式来创建一个字符串对象s时,Java运行时(运行中JVM)会拿着这个X在String池中找是否存在内容相同的字符串对象,如果不存在,则在池中创建一个字符串s,否则,不在池中添加.原理2:Java中,只要使用new关键字来创建对象,则一定会(在堆区或栈区)创建一个新的对象.原理3:使用直接指定或者使用纯字符串串联来创建String对象,则仅仅会检查维护String池中的字符串,池中没有就在池中创建一个,有则罢了!但绝不会在堆栈区再去创建该String对象.原理4:使用包含变量的表达式来创建String对象,则不仅会检查维护String池,而且还会在堆栈区创建一个String对象.另外......

阅读全文(3487) | 评论:0