sharky的点滴积累

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  56 随笔 :: 104 文章 :: 10 评论 :: 0 Trackbacks

2005年10月2日 #

1。有识有胆,有胆有识,知识与胆量是互相促进的。

2。体育锻炼可以(有时可以迅速)使人乐观(科学实验证明)。

3。勤奋,机会,乐观是成功的三要素。(注意:传统观念认为勤奋和机会是成功的要素,但是经过统计学和成功人士的分析得出,乐观是成功的第三要素)

4。自信是人格的核心。

5。获得的成功越大,就越令人高兴。(野心是使人勤奋的原因,节制使人枯萎)

6。热爱你所拥有的。——列夫·托尔斯泰

7。(一般情况下)不想三年以后的事,只想现在的事。(现在有成就,以后才能更辉煌)

8。把问题看宽广些,没有解决不了的事。(真理路广,人欲路窄;当然不要超越时代去想现在任何人都解决不了的事)

9。不问收获,只问耕耘。(如同种树,先有根茎,再有枝叶,尔后花实,好好劳动,不要想太多,那样只会使人胆小、懒惰,因为不实践,甚至不接触社会,难道你是野人?!(暴笑))

10。忍耐和信仰(邓小平认为自己能三起三落的原因,比较难达到,不过现代社会简单的事都由机器做了,白领越来越多,需要注意哦)

11。有恒则断无不成之事。

12。智慧之泉必须畅饮才能使人清醒。(引自新英语教材,那些头痛英语的哥么大概没看吧,提醒一下大家)

13。生活的乐趣的大小取决于我们对生活的关心程度。

14。不要怕,不要悔(虽然只有六个字,但是常看常新)

15。机遇对于有准备的头脑有特别的亲和力。

16。守业最好的办法就是不断的发展

17。心急吃不了热汤圆

18。必死则生,幸生则死——《吴子兵法》(武经典籍中仅次于《孙子兵法》)

19。要改变命运,首先改变自己

20。走自己的路,让别人说去吧!

21。学习的关键——重复

22。只为成功找方法,不为失败找借口(蹩脚的工人总是说工具不好)

23。困难就是机遇——温斯顿·丘吉尔

24。我奋斗,所以我快乐——格林斯潘(挽救东南亚金融危机的人,我的偶像)

25。好奇者,知识之门

26。生气是用别人的错误惩罚自己。——康德(这个哲学家让人眉开眼笑)

27。失去金钱的人损失甚少,失去健康的人损失极多,失去勇气的人损失一切。

28。只要下定决心克服恐惧,便几乎能克服任何恐惧。因为,请记住,除了在脑海中,恐惧无处藏身。——戴尔·卡耐基

29。害怕时,把心思放在必须做的事情上,如果曾经彻底准备,便不会害怕。——戴尔·卡耐基

30。“不可能”这个字(法语是一个字),只在愚人的字典中找得到。——拿破仑

31。去做你害怕的事,害怕自然就会消失。——罗夫·华多·爱默生

32。这世上的一切都借希望而完成。农夫不会播下一粒玉米,如果他不曾希望它长成种籽;单身汉不会娶妻,如果他不曾希望有小孩;商人或手艺人不会工作,如果他不曾希望因此而有收益。——马丁·路德

33。目标的坚定是性格中最必要的力量泉源之一,也是成功的利器之一。没有它,天才也会在矛盾无定的迷径中,徒劳无功。——查士德斐尔爵士

34。要冒一次险!整个生命就是一场冒险。走得最远的人,常是愿意去做,并愿意去冒险的人。“稳妥”之船,从未能从岸边走远。——戴尔·卡耐基

35。当一个青年人站起来面对这个大莽汉——这个世界——并勇敢地抓住他的胡须时,常会吃惊地发现,胡须脱落在他手上,原来它只是系上去吓唬胆怯的冒险者的。——罗夫·华多·爱默生

36。勇气很有理由被当作人类德性之首,因为这种德性保证了所有其余的德性。——温斯顿·丘吉尔
posted @ 2005-11-22 17:12 sharky的点滴积累 阅读(321) | 评论 (0)编辑 收藏

Web service到底是什么;在什么情况下你应该使用Web service。

分布式应用程序和浏览器

研究一下当前的应用程序开发,你会发现一个绝对的倾向:人们开始偏爱基于浏览器的瘦客户应用程序。这当然不是因为瘦客户能够提供更好的用户界面,而是因为它能够避免花在桌面应用程序发布上的高成本。发布桌面应用程序成本很高,一半是因为应用程序安装和配置的问题,另一半是因为客户和服务器之间通信的问题。

传统的Windows富客户应用程序使用DCOM来与服务器进行通信和调用远程对象。配置好DCOM使其在一个大型的网络中正常工作将是一个极富挑战性的工作,同时也是许多IT工程师的噩梦。事实上,许多IT工程师宁愿忍受浏览器所带来的功能限制,也不愿在局域网上去运行一个DCOM。在我看来,结果就是一个发布容易,但开发难度大而且用户界面极其受限的应用程序。极端的说,就是你花了更多的资金和时间,却开发出从用户看来功能更弱的应用程序。不信?问问你的会计师对新的基于浏览器的会计软件有什么想法:绝大多数商用程序用户希望使用更加友好的Windows用户界面。

关于客户端与服务器的通信问题,一个完美的解决方法是使用HTTP协议来通信。这是因为任何运行Web浏览器的机器都在使用HTTP协议。同时,当前许多防火墙也配置为只允许HTTP连接。

许多商用程序还面临另一个问题,那就是与其他程序的互操作性。如果所有的应用程序都是使用COM或.NET语言写的,并且都运行在Windows平台上,那就天下太平了。然而,事实上大多数商业数据仍然在大型主机上以非关系文件(VSAM)的形式存放,并由COBOL语言编写的大型机程序访问。而且,目前还有很多商用程序继续在使用C++、Java、Visual Basic和其他各种各样的语言编写。现在,除了最简单的程序之外,所有的应用程序都需要与运行在其他异构平台上的应用程序集成并进行数据交换。这样的任务通常都是由特殊的方法,如文件传输和分析,消息队列,还有仅适用于某些情况的的API,如IBM的"高级程序到程序交流(APPC)"等来完成的。在以前,没有一个应用程序通信标准,是独立于平台、组建模型和编程语言的。只有通过Web Service,客户端和服务器才能够自由的用HTTP进行通信,不论两个程序的平台和编程语言是什么。

什么是Web Service

对这个问题,我们至少有两种答案。从表面上看,Web service 就是一个应用程序,它向外界暴露出一个能够通过Web进行调用的API。这就是说,你能够用编程的方法通过Web来调用这个应用程序。我们把调用这个Web service 的应用程序叫做客户。例如,你想创建一个Web service ,它的作用是返回当前的天气情况。那么你可已建立一个ASP页面,它接受邮政编码作为查询字符串,然后返回一个由逗号隔开的字符串,包含了当前的气温和天气。要调用这个ASP页面,客户端需要发送下面的这个HTTP GET请求:

http://host.company.com/weather.asp?zipcode=20171

返回的数据就应该是这样:

21,晴

这个ASP页面就应该可以算作是Web service 了。因为它基于HTTP GET请求,暴露出了一个可以通过Web调用的API。当然,Web service 还有更多的东西。

下面是对Web service 更精确的解释: Web services是建立可互操作的分布式应用程序的新平台。作为一个Windows程序员,你可能已经用COM或DCOM建立过基于组件的分布式应用程序。COM是一个非常好的组件技术,但是我们也很容易举出COM并不能满足要求的情况。

Web service平台是一套标准,它定义了应用程序如何在Web上实现互操作性。你可以用任何你喜欢的语言,在任何你喜欢的平台上写Web service ,只要我们可以通过Web service标准对这些服务进行查询和访问。

新平台

Web service平台需要一套协议来实现分布式应用程序的创建。任何平台都有它的数据表示方法和类型系统。要实现互操作性,Web service平台必须提供一套标准的类型系统,用于沟通不同平台、编程语言和组件模型中的不同类型系统。在传统的分布式系统中,基于界面(interface)的平台提供了一些方法来描述界面、方法和参数(译注:如COM和COBAR中的IDL语言)。同样的,Web service平台也必须提供一种标准来描述Web service,让客户可以得到足够的信息来调用这个Web service。最后,我们还必须有一种方法来对这个Web service进行远程调用。这种方法实际是一种远程过程调用协议(RPC)。为了达到互操作性,这种RPC协议还必须与平台和编程语言无关。下面几个小节就简要介绍了组成Web service平台的这三个技术。

XML和XSD

可扩展的标记语言(XML)是Web service平台中表示数据的基本格式。除了易于建立和易于分析外,XML主要的优点在于它既是平台无关的,又是厂商无关的。无关性是比技术优越性更重要的:软件厂商是不会选择一个由竞争对手所发明的技术的。

XML解决了数据表示的问题,但它没有定义一套标准的数据类型,更没有说怎么去扩展这套数据类型。例如,整形数到底代表什么?16位,32位,还是64位?这些细节对实现互操作性都是很重要的。W3C制定的XML Schema(XSD)就是专门解决这个问题的一套标准。它定义了一套标准的数据类型,并给出了一种语言来扩展这套数据类型。Web service平台就是用XSD来作为其数据类型系统的。当你用某种语言(如VB.NET或C#)来构造一个Web service时,为了符合Web service标准,所有你使用的数据类型都必须被转换为XSD类型。你用的工具可能已经自动帮你完成了这个转换,但你很可能会根据你的需要修改一下转换过程。在第二章中,我们将深入XSD,学习怎样转换自定义的数据类型(例如类)到XSD的类型。

SOAP

Web service建好以后,你或者其他人就会去调用它。简单对象访问协议(SOAP)提供了标准的RPC方法来调用Web service。实际上,SOAP在这里有点用词不当:它意味着下面的Web service是以对象的方式表示的,但事实并不一定如此:你完全可以把你的Web service写成一系列的C函数,并仍然使用SOAP进行调用。SOAP规范定义了SOAP消息的格式,以及怎样通过HTTP协议来使用SOAP。SOAP也是基于XML和XSD的,XML是SOAP的数据编码方式。第三章我们会讨论SOAP,并结识SOAP消息的各种元素。

WSDL

你会怎样向别人介绍你的Web service有什么功能,以及每个函数调用时的参数呢?你可能会自己写一套文档,你甚至可能会口头上告诉需要使用你的Web service的人。这些非正式的方法至少都有一个严重的问题:当程序员坐到电脑前,想要使用你的Web service的时候,他们的工具(如Visual Studio)无法给他们提供任何帮助,因为这些工具根本就不了解你的Web

service。解决方法是:用机器能阅读的方式提供一个正式的描述文档。Web service描述语言(WSDL)就是这样一个基于XML的语言,用于描述Web service及其函数、参数和返回值。因为是基于XML的,所以WSDL既是机器可阅读的,又是人可阅读的,这将是一个很大的好处。一些最新的开发工具既能根据你的Web service生成WSDL文档,又能导入WSDL文档,生成调用相应Web service的代码。

摘侄: http://lsz.c1c5.com/feed.asp?q=comment&id=55
posted @ 2005-11-22 17:11 sharky的点滴积累 阅读(262) | 评论 (0)编辑 收藏

点击此处下载WebLogic Workshop 8.1 简体中文包(20.2M)

 

简体中文版

http://download2.bea.com/pub/platform/81/platform812_zh_CN_win32.exe

WebLogic Workshop 8.1 简体中文包安装指南

设置 WebLogic Workshop IDE 字体

1.运行Weblogic Workshop,从“工具”菜单中打开“IDE 属性”。
2.选中“显示”,设置窗口字体为“Dialog”,大小为12;源代码视图字体为“DialogInput”,大小为12。
3.退出Weblogic Workshop。

安装WebLogic Workshop 8.1 简体中文包
1.使用命令“jar xf fw811-zh_CN.jar”展开 fw811-zh_CN.jar 。
2.拷贝“server/lib/knex-L10N.jar”到“/weblogic81/server/lib”。
3.拷贝“workshop/L10N”目录到“/weblogic81/workshop”。
4.备份“/weblogic81/workshop/templates”。
5.拷贝“workshop/templates”到“/weblogic81/workshop”。

设置系统语言环境
1.在Windows 2000/XP中,打开“区域和语言选项”控制面板,选择“区域选项”选项板,然后设置“标准和格式”为“中文(中国)”,位置为“中国”。
2.在UNIX/Linux中,选择中文环境(如:zh_CN)登入。

重新运行WebLogic Workshop 8.1
WebLogic Workshop 8.1 国际化概述

在 WebLogic Workshop 8.1 中,必须实现一些功能才能在简体中文环境下使用。尽管,在 beta 版中对使用简体中文存在许多限制,但在此版本中对简体中文的支持已大为改进。
WebLogic Workshop 工作在 WebLogic Server 环境中。因此,WebLogic Server 中存在的限制也会对使用 WebLogic Workshop 开发的应用程序产生影响。

SOAP 消息和编码

接收 SOAP 消息
WebLogic Server 的 Web Service 功能在编码处理方面遵从 SOAP 1.1 和 1.2 规范。SOAP 1.1 HTTP/SOAP 消息的媒体类型为“text/xml”,其编码处理定义为 RFC2376。SOAP 1.2 HTTP/SOAP 消息的媒体类型为“application/soap+xml”,其编码处理定义为 RFC3023。这些 RFC 规范定义了以下行为:

SOAP 1.1
HTTP/SOAP 请求的字符集由 HTTP 头中 ContentType 的 charset 参数决定。而忽略 SOAP 消息的 XML 声明部分中定义的 encoding 特性。如果未指定 ContentType 的 charset 参数,则将其作为 US-ASCII 处理。

SOAP 1.2
HTTP/SOAP 请求的字符集由 HTTP 头中 ContentType 的 charset 参数决定。而忽略 SOAP 消息的 XML 声明部分中定义的 encoding 特性。如果未指定 ContentType 的 charset 参数,则使用 XML 声明部分中定义的 encoding 特性。如果 ContentType charset 参数和 XML 声明的 encoding 特性均未定义,则将其作为 UTF-8 处理。

WebLogic Server 8.1 行为是基于此规范的,因此,WebLogic Workshop 行为也基于此规范。如果您的客户端通过 HTTP/SOAP 调用使用 WebLogic Workshop 开发的 Web service,请确保 ContentType charset 指定正确。

发送 SOAP 消息
默认情况下,WebLogic Server 以 UTF-8 编码生成 HTTP/SOAP 消息,并将“encoding=UTF-8”追加到 SOAP 消息的 ContentType 头中。

注意:如果使用英语区域设置(如在 Unix 中使用 LANG=C)启动 WebLogic Server,则您的 SOAP 消息只能使用 us-ascii字符,而不支持其他字符。如果您要在 Web service 中使用简体中文字符,请以简体中文区域设置启动 WebLogic Server。

如果您要在以英语区域设置启动的 WebLogic Server 中使用非 us-ascii 字符,则要在 WebLogic Server 启动脚本文件中定义以下启动选项。这样,即使是在英语区域设置环境中,WebLogic Server 也可以以 UTF-8 生成消息。

注意:强烈建议为 SOAP 消息使用 UTF-8 编码。

-IWeblogic.webservice.i18n.charset=utf-8

Workshop IDE 中的文件和编码

(1) 通道文件(扩展名:channel)

默认编码:UTF-8

指定位置:xml 声明的 encoding 特性

示例:<?xml version="1.0" encoding="UTF-8" ?>

(2) HTML 文件(扩展名:html)
默认编码:ISO-8859-1

指定位置:页面标记

示例:<META http-equiv="Content-Type" content="text/html;charset=GB2312">

(3) JSP 文件(扩展名:jsp)
默认编码:ISO-8859-1

指定位置:页面标记

示例:<%@ page language="java" contentType="text/html;charset=UTF-8" %>

指定位置:weblogic.xml

示例:

<jsp-param>

<param-name>encoding</param-name>

<param-value>UTF-8></param-value>

<jsp-param>

注意:如果在页面标记和 weblogic.xml 中指定的编码不同,则使用页面标记中的值。

(4) JSP 片断(扩展名:jspf)
默认编码:ISO-8859-1

指定位置:weblogic.xml

示例:

<jsp-param>

<param-name>encoding</param-name>

<param-value>UTF-8</param-value>

</jsp-param>

(5) WSDL 文件(扩展名:wsdl)
默认编码:UTF-8

指定位置:xml 声明的 encoding 特性

示例:<?xml version="1.0" encoding="UTF-8" ?>

(6) XML 文件(扩展名:xml)
默认编码:UTF-8

指定位置:xml 声明的 encoding 特性

示例:<?xml version="1.0" encoding="UTF-8" ?>

(7) XML Schema(扩展名:xsd)
默认编码:UTF-8

指定位置:xml 声明的 encoding 特性

示例:<?xml version="1.0" encoding="UTF-8"? >

(8) 其他文件
使用 Java VM 的默认编码。不能指定其他任何编码。

Web 应用程序的编码
默认情况下,Web 应用程序使用 UTF-8 编码。

如果要在您的 Web 应用程序中使用其他编码,可以使用“工具”->“应用程序属性”->“编码”菜单命令进行指定。

此处指定的值将写入 weblogic-application.xml 文件的 webapp.encoding.default 参数。

注意:此属性只适用于 HTTP 请求的编码,而不适用于 HTTP 响应。

WebLogic Server 8.1 中包括的 Workshop 8.1 Beta 注意事项
可能已经在主目录中创建了 Workshop 首选项文件 (.workshop.pref),对于 Windows 环境,该主目录为 <启动驱动器>:Documents and Settings<用户名>。

在启动此 Workshop 8.1 版本之前,您可以重命名或删除该文件,这样,将会重新生成新的设置首选项文件,该文件使用适用于简体中文环境的简体中文字体的新设置。

如果启动此 Workshop 8.1 版本之前未重命名或删除该文件,将使用带有旧字体设置的旧首选项文件,则您在 IDE 屏幕上可能会看到一些乱码。

局限
Java 控件 (.jcx) 文件名的多字节字符

Java 控件 (.jcx) 文件名不能使用多字节字符。如果该文件名包含任何多字节字符,则其他 Web service 将无法访问该控件。

Java 控件 (.jcx) 描述
属性编辑器中显示的 Java 控件的描述全是英文的。

使用 wlwBuild 命令编译应用程序后的错误日志
如果使用 wlwBuild 命令生成 Workshop 应用程序,则下列错误将记录到 workshop_errors.log 文件中:

[AntTarget:build][]: Exception getting Server and Domain info, weblogic.management.ManagementError: [Management:141113] The Management subsystem was accessed before the initialization.
[AntTarget:build][]: Unable to obtain server tempdir, J2EEApplicationService not available!
[AntTarget:build][]: Error accessing WLS Management subsystem

Xscript 的局限
不能在 XScript 中使用多字节字符。

编译期间的错误消息
在开发环境中编译 java、jsp、jws、jpd、jdx、dtf、xq 或其他文件时,错误消息以英文显示。

EJB 方法名称
在 EJB 设计视图中,如果您试图使用包含多字节字符的方法名称,将显示错误对话框“无效的方法签名”,并且您无法创建该方法。如果您要在方法名称中使用多字节字符,请直接使用源代码视图编辑代码。

从数据库创建 EJB 的局限
此版本不支持从表名或列名包含多字节字符的数据库表创建 EJB。

可视化开发环境的局限(仅 Linux)
不支持面向可视化的开发功能,不能在设计视图中为 HTML 或 JSP 文件使用 WYSIWYG 编辑功能。

窗口字体和字号(仅 Linux)
由于对话框尺寸限制,要在创建新应用程序时显示所有描述文本,必须将窗口字体和字号分别设置为“默认值”以及 10 或更大值。

这不会影响任何功能。如果要显示所有描述文本,必须根据需要设置窗口字体的字体和字号。

已知问题
WebLogic Workshop JSP 编译器问题
使用 WebLogic Workshop JSP 编译器编译 JSP 文件时,如果该文件静态包含包括多字节字符的文件,则多字节字符将显示为乱码。

解决方法:编辑 weblogic.xml 文件以注释掉包含 jspServlet 参数的块。这样,就会使用 WebLogic Server JSP 编辑器,即可避免该问题。

<!-- Comment the jspServlet param out to go back to weblogic's jspc -->

<jsp-param>

<param-name>jspServlet</param-name>

<param-value>weblogic.servlet.WlwJSPServlet</param-value>

</jsp-param>

Web Service (.jws) 文件的文件名包含多字节字符时的 Java 代理下载问题
从 Workshop 测试浏览器的“概要”选项卡下载 Java 代理客户端时,如果 Web Service (.jws) 文件的文件名包含多字节字符,则文件对话框中的文件名可能显示为乱码。

解决方法:直接在文件对话框中输入下载文件的文件名。

应用程序属性中 WebLogic Server 的设置
尽管该设置可以自动从存储在服务器主目录中的 config.xml 文件中加载,但主机名总是设置为“localhost”。如果 config.xml 中 ListenAddress 属性被设置为其他值,则必须手动编辑此屏幕中的该属性值。

域配置向导将主机名设置为非“localhost”值导致的问题
在 stopWebLogic.cmd 或 stopWebLogic.sh 的 ADMIN_URL 定义中,“localhost”值是硬编码的。如果需要,必须直接编辑该值,方法如下:

由:set ADMIN_URL="t3://localhost:7001"

至:set ADMIN_URL="t3://test.beasys.com:7001"

使用 javac 命令编译 Web Service 客户端
使用 javac 命令编译 Web Service 客户端时,如果为 Java 代理客户端使用可以从 WebLogic 测试浏览器的“概要”选项卡下载的 JAR 文件,请确保使用“-sourcepath”选项编译它。如果编译时未使用该选项,您将收到“源文件不可用”错误,并将产生编译失败。这是由 Sun JDK 造成的。

如果您使用 ant 的 javac 任务或 servlet 容器(如果使用 JSP 创建 Web Service),将不会有同样的问题。

WebLogic Server 启动控制台乱码(仅 Linux)
WebLogic Server 启动控制台未启用多字节字符。可以从“工具”菜单、WebLogic Server 和“启动 WebLogic Server”访问启动控制台。如果从简体中文区域设置环境启动 WebLogic Server,则服务器控制台上的输出消息将为乱码。

解决方法:使用启用多字节字符的控制台(如 kterm)和手动启动 WebLogic Server。

不同数据类型的 XQuery 映射
可以从设置视图打开 XQuery 编辑屏幕,在该屏幕中,不能通过拖放操作在不同的数据类型之间进行映射,如 (int) 和 (short) 之间,或者 (string) 和 (int) 之间。

解决方法:要在不同的数据类型之间映射,可以使用折叠高级选项面板的编辑函数或在源代码视图中直接编辑 XQuery 映射。

posted @ 2005-11-21 20:19 sharky的点滴积累 阅读(1444) | 评论 (0)编辑 收藏

Jdon的struts目录树
http://www.jdon.com/jive/article.jsp?forum=62&thread=9732

面向对象的javascript目录树控件设计与应用
http://cnbie.net/print_146048m52726.html

http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=124&threadID=18043&tstart=148


posted @ 2005-11-18 21:11 sharky的点滴积累 阅读(228) | 评论 (0)编辑 收藏

在使用Firefox的过程中,你是否遇到过很多这样或者那样的问题却一直找不到答案,或者你想精通对Firefox浏览器的功能使用,那么下边列举的使用技巧将有助你快速掌握Firefox的使用。   
  
  问:怎样提高Firefox的浏览速度?    
  
   答:在地址栏里输入about:config,打开Firefox的设置。将network.http.pipelining和 network.http.proxy.pipelining都设置为true,将 network.http.pipelining.maxrequests设为8或更大,之后速度就将大有改观。  
  
  问:关于标签Tab的问题?   
  
  答:Firefox是不需要插件即可支持的。可以使用热键Ctrl+T,Ctrl+W来打开和关闭标签。另外可以通过自定义工具栏的方式把按钮放到工具栏上。  
  
  Firefox的设置以及扩展和书签是保存在什么地方的?   
  
   Firefox的插件是安装在Windows系统用户配置目录里面的,通常这个目录叫:“C:Documents and SettingsAdmin-istratorApplication DataMozillaFirefoxProfilesnq1y0aa.默认用户” (这个目录有可能因为你Windows的安装设置不同而不同),如果你重装系统前备份这个目录,重装系统后就不用重新安装插件了,另外也有专门保存扩展和 设置的插件可供选择。   
  
  问:Firefox怎样实现像Maxthon那样的Tab分页浏览功能?   
  
   答:Firefox本身内置分页浏览功能,你可以按住Ctrl键点击或者直接用鼠标中键点击链接便能在新Tab中打开新页面,如果你觉得这样太麻烦, Firefox也有许多Tab浏览的扩展可以供你选择。这里推荐一款TabExtensions,它为你提供的Tab浏览功能比Maxthon的还要强大 得多。
  
  问:Firefox怎样使用FlashGet等下载工具下载?     
  
  答: Firefox自身提供了强大的下载管理器,支持续传,在管理器中直接打开下载文件等功能,但是有的朋友还是希望能够使用FlashGet等专业下载软 件,Firefox有许多扩展插件能够完成这样的功能,我向你推荐FlashGot,安装后会扩展你的 右键菜单,你在下载链接上直接点右键便可以选择用FlashGet下载了。     
  
  问:Firefox怎样安装XPI扩展插件?    
  
   答:在Firefox的菜单中选择“文件→打开”,然后选择要安装的XPI扩展插件文件。稍后就可以看到Firefox会询问你是否要安装这个插件,点 击“是”即可,注意新安装的插件必须在重启FireFox后才能生效(关闭所有的Firefox窗口,包括扩展,主题等窗口)。  
  
  问:Firefox怎样安装 Jar 主题文件?   
  
   答:有一些主题下载后是 .Jar 包压缩的,如果要安装,先打开 Firefox,然后打开 Tools - Themes 主题管理窗口,然后再把 .jar 文件直接拖放到这个窗口,就会开始安装。安装完成后,重启 Firefox 即可。同样的,你想要谢恢魈獾幕埃?也可以在Theme窗口中选择你需要的主题,然后重启Firefox即可。   
  
  问:怎样让Firefox使用多配置文件?   
  
   答:在Firefox启动的时候后面加上 /p 参数,你就可以打开Firefox的配置文件管理器,你能够在这里添加删除并且选择你的配置文件。这样你就可以使用不同的配置来 进行冲浪了。注意,不同的配置文件里面插件和主题也是独立的。也就是说,你可以在两个不同的配置文件里安装两套不同的插件。   
  
  在缺省安装的情况下,在Windows的开始-运行对话框里输入下面的命令就可以了。你可以根据你的Firefox的安装位置的不同来进行更改:"C:Program FilesMozilla FirefoxFirefox.exe "/p   
  
  问:怎样改变网页中文字的大小?   
  
  答:在Friefox菜单中选择 工具 选项 基本信息 字体和颜色 语言编码选择简体中文,最小字体设置成12,确定后再看看网页上的文字就会不一样了。 或者使用快捷键ctrl+“+”/“-”改变字体网页大小。  
  
  问:如何自定义Firefox的临时文件存放地址?    
  
   答:打开Firefox地址栏输入about:config 后回车,就会出现Firefox的详细配置页面。用右键新建一个字符串名为browser.cache.disk.parent_directory 然后输入新的临时文件的路径即可。例如: D:Temp Files    
  
  问:安装插件的时候遇到版本错误怎么办?   
  
  答:在地址栏输入:about:config 打开Firefox详细配置页面,找到: app.extentions.version 后面数字就是版本号,改成插件所支持的版本号,然后装插件即可。
posted @ 2005-11-17 19:12 sharky的点滴积累 阅读(260) | 评论 (0)编辑 收藏

Rediscover the Web

         就象FireFox的口号一样,FireFox浏览器给人们浏览网页时的新的发现&选择,免费,定制,人性化是Firefox浏览器给我的感觉.的确也如此,崭新的迁移系统给人一种体贴的关心,明白的是在把使用IE的用户拉向FireFox,FireFox的定制,免费的特性是软件领域的新气象,犹如Eclipse,同样是一款定制,免费的IDE,更可说是一个平台,正在逐渐吞噬Jbuilder等专业javaIDE的领地.相对MS的IE或许暴露除了他的不足,也给MS提出了挑战,用户需求就是市场导向这是不变的真理.
 
看看FireFox的feature:

阻止弹出式窗口
和恼人的弹出式广告说再见吧! Firefox 可以有效阻止未经许可的弹出窗口。
分页浏览
使用这个节省时间的功能,您可以在同一窗口内查看多个网页。将链接在后台标签页中打开,当您准备好要阅读其他页面时,它们已经载入完毕,您无需花费时间等待。
隐私及安全
Firefox 关心您的隐私及安全,不加载有害的 ActiveX 控件,不让恶意的间谍程序入侵您的计算机。多种保护隐私的工具,让您能掌控自己在网络上的一举一动。
智能化的搜索功能
在工具栏中已经内建了 Google 搜索功能,此外还有众多搜索工具如 "关键字" 以及新的 "查找工具栏" 等功能。在地址栏输入 "dict (要查询的单词)" 便可查阅字典,而随手输入网页上的文字,Firefox 便会将您带往该处。
实时书签
整合 RSS,方便您订阅最新头条及网站更新信息。
下载文件方便
您下载的文件可自动置于桌面上,容易寻找。减少问东问西的情形,让下载更流畅快速。
体贴用户
简单又直观的 Firefox 拥有符合您习惯的完整功能:除了书签、浏览历史、全屏等工具之外,还可以自由缩放文字,符合您阅读上的需求。
放大缩小,随心所欲
Firefox 是世上最容易定制的浏览器了!您可定制工具栏添加按钮,可以安装新的扩展软件来增加新功能,可以安装符合个人风格的主题外观,还可以自行从难以计数的搜寻引擎中挑选适合的使用。Firefox 的功能多少、体态大小,由您决定。
简单容易的安装方式
Firefox 增强版 仅仅 5.7 MB,以宽带下载仅需几分钟时间。安装程序让您迅速安装 Firefox,而崭新的迁移系统可将您的收藏夹、储存密码以及其它各种设置等数据从 Internet Explorer 及其它浏览器中导入 Firefox,您立刻能在网络上四处游玩。
开发者最好的朋友
Firefox 拥有一组开发者使用的工具,包括强大的 JavaScript/CSS 控制台、文件查看器等,提供您洞察网页运作详情的能力。

FireFox提速




posted @ 2005-11-16 21:01 sharky的点滴积累 阅读(217) | 评论 (0)编辑 收藏

今天申请了Gmail,早就听说大名,今天声请了个用用:
声请方法:
.1) http://gmail.unitedemailsystems.com/

在页面的横线下,右部,添入自己的email地址,然后点击下面的 "add me", 免费Gmail账号的邀请函就发到信箱了。

(2)
http://isnoop.net/gmail/

输入 Anti-bot key, 然后输入自己的 有效Email地址,然后点击"Request Inviation"即可。稍后Gmail邀请将被发到邮箱中。

两种都可以得到GMAIL~


收发设置(FOXMAIL等各类收发程序)
SMTP 端口465
POP3 端口995
必须都要求安全连接

还有个简单的办法
进入www.bytetest.com即可,无需邀请,象申请其他免费邮箱一样简单!

初用了以下,感觉跟别的电子邮件不一样哦
使用Gmail邮箱常遇到的问题及解答
Google的电子邮箱Gmail从入门到精通

posted @ 2005-11-16 20:27 sharky的点滴积累 阅读(304) | 评论 (0)编辑 收藏

TELESYNC (TS) -
A telesync is the same spec as a CAM except it uses an external audio source (most likely an audio jack in the chair for hard of hearing people). A direct audio source does not ensure a good quality audio source, as a lot of background noise can interfere. A lot of the times a telesync is filmed in an empty cinema or from the projection booth with a professional camera, giving a better picture quality. Quality ranges drastically, check the sample before downloading the full release. A high percentage of Telesyncs are CAMs that have been mislabeled.

  除了使用外置的音源(一般是影院座椅上为听力不好的人设的耳机孔),TELESYSNC(TS) 和CAM的标准是相同的。这个直接的音源并不能保证是好的音源,这是它因为受到很多背景噪音的干扰。很多时候TS是在空的影院录制,或是用专业摄像机在投影室录制,所以图象质量可能比CAM好。质量的起伏可能很大,在下载前最好查看SAMPLE。很大比例的TS是从CAM错误标记成。

TELECINE (TC) -
A telecine machine copies the film digitally from the reels. Sound and picture should be very good, but due to the equipment involved and cost telecines are fairly uncommon. Generally the film will be in
correct aspect ratio, although 4:3 telecines have existed. A great example is the JURASSIC PARK 3 TC done last year. TC should not be confused with TimeCode , which is a visible counter on screen throughout the film.

  TELECINE (TC) 使用电视电影机从胶片直接数字拷贝,其图象和声音质量应该很好。但由于使用的设备和费用很高,TC很少见。通常会使用正确的高宽比,但有时也有4:3的TC。去年的侏罗纪公园III是一个很好的例子。不应将TC和TimeCode(时间码)混淆,时间码是一个在屏幕上可见的计数器。

posted @ 2005-11-12 22:03 sharky的点滴积累 阅读(220) | 评论 (0)编辑 收藏

上篇讲了如何安装并测试MySQL,环境建好后就可以继续我们的学习了。本篇主要熟悉一写常用命令。

    1、启动MySQL服务器

    实际上上篇已讲到如何启动MySQL。两种方法: 一是用winmysqladmin,如果机器启动时已自动运行,则可直接进入下一步操作。 二是在DOS方式下运行 d:mysqlbinmysqld

    2、进入mysql交互操作界面

    在DOS方式下,运行: d:mysqlbinmysql

    出现: mysql 的提示符,此时已进入mysql的交互操作方式。

    如果出现 "ERROR 2003: Can′t connect to MySQL server on ′localhost′ (10061)“,

说明你的MySQL还没有启动。

    3、退出MySQL操作界面

    在mysql>提示符下输入quit可以随时退出交互操作界面:
    mysql> quit
    Bye
    你也可以用control-D退出。

    4、第一条命令

mysql> select version(),current_date();
+----------------+-----------------+
| version() | current_date() |
+----------------+-----------------+
| 3.23.25a-debug | 2001-05-17 |
+----------------+-----------------+
1 row in set (0.01 sec)
mysql>



    此命令要求mysql服务器告诉你它的版本号和当前日期。尝试用不同大小写操作上述命令,看结果如何。结果说明mysql命令的大小写结果是一致的。

    练习如下操作:

mysql>Select (20+5)*4;
mysql>Select (20+5)*4,sin(pi()/3);
mysql>Select (20+5)*4 AS Result,sin(pi()/3); (AS: 指定假名为Result)
&nbsp;&nbsp;&nbsp;&nbsp;<B>5、多行语句</B>
&nbsp;&nbsp;&nbsp;&nbsp;一条命令可以分成多行输入,直到出现分号“;”为止:
<ccid_nobr>
<table width="400" border="1" cellspacing="0" cellpadding="2"
bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center">
<tr>
    <td bgcolor="e6e6e6" class="code" style="font-size:9pt">
    <pre><ccid_code>  mysql> select
-> USER()
-> ,
-> now()
->;
+--------------------+---------------------+
| USER() | now() |
+--------------------+---------------------+
| ODBC@localhost | 2001-05-17 22:59:15 |
+--------------------+---------------------+
1 row in set (0.06 sec)
mysql>



    注意中间的逗号和最后的分号的使用方法。

    6、一行多命令

    输入如下命令:

mysql> SELECT USER(); SELECT NOW();
+------------------+
| USER() |
+------------------+
| ODBC@localhost |
+------------------+
1 row in set (0.00 sec)

+---------------------+
| NOW() |
+---------------------+
| 2001-05-17 23:06:15 |
+---------------------+
1 row in set (0.00 sec)
mysql>



    注意中间的分号,命令之间用分号隔开。

    7、显示当前存在的数据库

mysql> show databases;
+----------+
| Database |
+----------+
| mysql |
| test |
+----------+
2 row in set (0.06 sec)
mysql>



    8、选择数据库并显示当前选择的数据库

mysql> USE mysql
Database changed
mysql>
(USE 和 QUIT 命令不需要分号结束。)
mysql> select database();
+---------------+
| database() |
+---------------+
| mysql |
+---------------+
1 row in set (0.00 sec)



    9、显示当前数据库中存在的表
    mysql> SHOW TABLES;

    10、显示表(db)的内容
mysql>select * from db;

    11、命令的取消

    当命令输入错误而又无法改变(多行语句情形)时,只要在分号出现前就可以用 c来取消该条命令

mysql> select
-> user()
-> c
mysql>



    这是一些最常用的最基本的操作命令,通过多次练习就可以牢牢掌捂了。(T111)


posted @ 2005-11-01 20:37 sharky的点滴积累 阅读(205) | 评论 (0)编辑 收藏

如果MySQL正在运行,首先杀之: killall -TERM mysqld。

启动MySQL:bin/safe_mysqld --skip-grant-tables &

就可以不需要密码就进入MySQL了。

然后就是

>use mysql

>update user set password=password("new_pass") where user="root";

>flush privileges;

重新杀MySQL,用正常方法启动MySQL
posted @ 2005-11-01 20:28 sharky的点滴积累 阅读(269) | 评论 (0)编辑 收藏

[Linux入门]
http://www.yesky.com/SoftChannel/72348973209223168/20030306/1655510.shtml

linux常用命令:
http://www.c51bbs.com/c51blog/user1/4098/archives/2005/1992.shtml
[chinaitlabLinux专题]
http://linux.chinaitlab.com/
posted @ 2005-10-29 22:43 sharky的点滴积累 阅读(190) | 评论 (0)编辑 收藏

【疑难问题】
虽然按照找的解决方案做了,但是还是出现如下错误提示:
-- Cannot start Java debug process VM --

com.sun.jdi.connect.VMStartException: VM initialization failed for:
ERROR: transport error 202: connect failed: Connection refused ["tra
ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT
JDWP exit error JVMTI_ERROR_INTERNAL(113): No transports initialized

百思不得其解,RUN模式没问题,Debug模式就出来,看来不光是环境JDK路径的问题,
向大家求助一下

posted @ 2005-10-29 22:24 sharky的点滴积累 阅读(1329) | 评论 (1)编辑 收藏

最近在JB2006上写WebAPP时,在启动服务器调试程序时,总是JB这样报错:
-- Cannot start Java debug process VM --

com.sun.jdi.connect.VMStartException: VM initialization failed for: F:\Borland\JBuilder2006\jdk1.5\bin\javaw -classpath "F:\Borland\JBuilder2006\thirdparty\jakarta-tomcat-5.5.9\bin\bootstrap.jar;F:\Borland\JBuilder2006\jdk1.5\lib\tools.jar"  "-Dcatalina.home=F:/Borland/JBuilder2006/thirdparty/jakarta-tomcat-5.5.9"  -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=yuchao-home:1123,suspend=y org.apache.catalina.startup.Bootstrap -config F:\jworkspace\GuestBook\Tomcat\conf\server8080.xml start
ERROR: transport error 202: connect failed: Connection refused ["transport.c",L41]
ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510) ["debugInit.c",L497]
JDWP exit error JVMTI_ERROR_INTERNAL(113): No transports initialized

上网搜索了一下找到了原因:
原处:http://blog.aspcool.com/zephyr/articles/2025.html

我用JBuilder8以及JBuilder2005开发Web项目时, 不管使用自带的Tomcat4还是Tomcat5,均无法进入Debug模式, 提示:
-- Cannot start Java debug process VM --

com.sun.jdi.connect.VMStartException: VM initialization failed for: C:\JBuilder2005\jdk1.4\bin\javaw -classpath "C:\JBuilder2005\thirdparty\jakarta-tomcat-5.0.27\bin\bootstrap.jar;C:\JBuilder2005\jdk1.4\lib\tools.jar"  "-Dcatalina.home=C:/JBuilder2005/thirdparty/jakarta-tomcat-5.0.27"  -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=suzpcssdgs613:2381,suspend=y org.apache.catalina.startup.Bootstrap -config D:\abc\Tomcat\conf\server8080.xml start
Transport dt_socket failed to initialize, rc = 509.


Goolge了一番后,终于找到了原因:
由于我的机器上安装了多个JDK,而且在环境变量%PATH%中, 第一个出现的Java路径是"D:\jdk1.5\jre\bin",而JB使用的Java是"C:\JBuilder2005\jdk1.4\bin\ javaw",因而导致了"Connector"的问题.

显然, 解决的方法无非是以下二者之一::
一. 设置Path变量的Java路径, 使之指向JB的Java
二. 设置Jbuilder's JDK路径,使之同Path里面的JDK路径一致 (我的做法). 具体方法:
 a. Tool->Configure->JDK, 把 "D:\jdk1.5" 加进去.
 b. Project->Project Properties->Run, 依次选择 "Server" runtime configuration, "Edit", "JDK", use the "specified jdk" , select the jdk1.5

然后, 启动Debug模式, OK. 从以下的输出可以看出不同(注意下划线部分)
D:\jdk1.5\bin\javaw -classpath "C:\JBuilder2005\thirdparty\jakarta-tomcat-5.0.27\bin\bootstrap.jar;D:\jdk1.5\lib\tools.jar"  "-Dcatalina.home=C:/JBuilder2005/thirdparty/jakarta-tomcat-5.0.27"  -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=suzpcssdgs613:2779,suspend=y org.apache.catalina.startup.Bootstrap -config D:\abc\Tomcat\conf\server8080.xml start
Mar 15, 2005 11:26:12 AM org.apache.coyote.http11.Http11Protocol init
http://forum.java.sun.com/thread.jspa?threadID=577610&messageID=3025506

问题分析:
Java的调试是通过所谓的JPDA架构(Java Platform Debugger Architecture) 和JDWP协议(Java Debug Wire Protocol), 来实现的. 在JPDA下, 调试器与被调试的VM(Target VM) 通过Transport来通信. Sun实现了两种Transport: 基于Socket的TCP/IP Transport和共享内存的Transport. 基于Socket的方式可以实现跨平台的远程调试, 而共享内存的方式只能在Windows平台下的同一台机器上.
在JPDA下, 调试器通过封装了Transport的Connector来建立同Target VM的连接, 而Target VM上也有一个VM本身内置的封装了Transport的Agent来接受连接.

具体到SUN的VM实现, 为了启动JDWP Agent以被调试, 在运行Target VM的时候需要加入以下参数: -Xdebug(启动Debugging) 和 -Xrunjdwp:(配置Connector)

-Xrunjdwp需要transport属性指明Connector类型(Socket还是Shared Memory), server属性指明主动还是被动(server='y', 被动监听Debugger的连接, server='n', 主动连接到Debugger, 默认是'n'), Address属性(当server='y'的时候, 表明监听得端口, 当server=n的时候,表明Debugger的地址.

回到JB的问题上, 对照JB给出的启动调试的命令行参数:-Xrunjdwp:transport=dt_socket,address=suzpcssdgs613:2381 可以知道:JB使用socket方式的Connector启动Tomcat5(org.apache.catalina.startup.Bootstrap), 主动连接到2381端口上的调试器.

posted @ 2005-10-29 14:48 sharky的点滴积累 阅读(779) | 评论 (0)编辑 收藏

现在开发应用程序经常使用一些所见即所得的开发环境,使得用户界面的制作非常方便。然而,用户界面是最容易发生需求变更的部分,用户界面发生变化,经常对业务模块产生影响。并且,用户界面是不利于自动测试的。一旦某些代码依赖用户界面,这样的代码就很难在别的模块中调用了,因此业务逻辑不能在界面层次中进行,否则会造成不能复用,不能复用自然会增加复制粘贴的代码,造成错误的扩散,放大需求变更的影响。在程序设计中,应该尽量做到用户界面和底层的业务模型分离。

用户界面和业务模块的互动方式,在程序设计中经常采用MVC模式。MVC模式并不是一个特别的模式,而是一些特定模式的组合。基本上包括三个对象:业务模块(Model)、用户界面(View)和控制器(Controller),关系如下:



图中实线表示高耦合的依赖关系,虚线表示低耦合的消息关系。业务模块是不依赖用户界面的,这样就隔离了用户界面的变更对业务程序的影响。用户界面负责收集用户的输入,显示用户需要的数据;控制器负责将用户的请求调用到实际的业务程序,也将业务程序处理的结果回送给用户界面;业务程序具体处理业务操作。同时业务模块可能主动发送消息到用户界面,通知界面显示数据。

在具体的环境下,这些因素可能发生一些变化。比如,在web开发中,由于web应用程序的性质,用户界面是在浏览器上运行的,而界面的控制和业务模块在浏览器上运行,所以在web应用中通常采用这种典型的MVC模式。并且在Web应用中,不存在服务器主动向客户端“推”数据,因此从Model到View之间的虚线也是不存在的。在windows窗体程序中,控制器和界面经常是合并在一起的,比如MFC框架中使用的Document-View模式,其中的Document对应MVC中的Model,负责保存业务数据,处理业务逻辑,View相当于MVC中的View+Controller,负责用户界面的显示、用户输入的收集和画面的跳转控制。

好的设计和坏的设计有时候需要写的代码是一样多的,但是这些代码放的位置不一样。MVC中最重要的一点就是清楚Controller应该处于什么样的地位,应该完成什么样的功能。下面用一个web应用程序的例子来说明一下。

Jsp编程有一些MVC的框架,比如Struts,Struts控制器的工作如下:首先是一个请求分派机制,负责监听请求和分配请求,然后是一个Command模式的实现,负责处理请求。首先收到服务器收到客户端的http请求,交给控制器分析其中的地址,在一个配置文件中寻找对应的处理者(一个Action的子类),建立这个类的实例,随后执行其execute方法,Action类中调用业务模块进行实际业务的处理(在处理之前进行必要的准备,比如分析请求的参数,将其转化为业务模型了解的对象),得到处理结果,根据处理的结果决定需要显示的View。这个需要显示的View在Struts框架中也是在文件中配置的。

这是一种集中式的控制器,应用程序使用一个统一的Controller。不仅使业务和界面分离开,并且界面的流程完全由同一个对象来控制。最重要的是,使得功能的修改和追加变得比较方便,控制器成为业务模块的缓冲,减轻了需求变化对业务模块的影响。

很多windows窗体程序也采用这样的控制器。有一个开放源码的.Net开发工具,叫做SharpDev,本身也是用c#开发的,采用的就是这样的集中控制方式。SharpDev是用add-in的方式进行增量开发的,程序中的功能,如打开文件、保存文件、运行某个向导等功能都是一个个独立的add-in,使用了Command模式。程序运行过程大致如下:应用程序初始化的时候,读取配置文件中所有名称为*.add-in的文件,得到程序中所有的add-in,可以把这些add-in看作一个ICommand接口的实现。根据配置文件建立这些ICommand的实例,绑定在对应的菜单项和工具栏按钮上。当用户点击这些菜单项和工具栏按钮的时候,由一个任务分派的对象将请求定位到一个Command上,执行其Run方法。Command执行的时候可能要调用业务程序,业务程序是通过一系列的Service对外提供功能的,不直接向外界暴露。Controller就是负责定向用户操作到具体Command的分派器。

窗体应用程序还有一个特点:有时候业务改变的时候,需要用户界面作出相应的变化。比如:当代码编辑器中的文字发生变更的时候,工具栏上的保存按钮要置为可用状态,当保存后,保存按钮又要置为灰色。这样的功能是通过一个Observeor模式来实现的,这就避免了业务模块对用户界面的依赖,并且这样的模式也便于同时将消息发送给多个对象,比如保存按钮不仅要在工具栏上出现,也要在菜单上出现,这样的变化是不会影响业务模块的。在SharpDev中,这个交互的过程也是在业务模块对外提供的Service中通过delegate来实现的。

很多应用程序采用的是另一种控制模式:每个画面和窗口使用自己的控制器。在窗体程序中,这样的方式实际上就将用户界面和控制器融合在一起了,比如MFC中的Document-View,View不仅实现用户数据的展示和输入数据的收集,还要将用户的输入进行基本的处理,转变为业务模块了解的类型,调用业务模块进行处理,最后跳转到别的窗口。

在ASP.NET中使用code behide的编程框架,实际上也是为每一个用户界面采用了一个独立的Controller,aspx文件就是用户界面,对应的code behide代码就是他的控制器。这样的框架减少了程序的灵活性,但是在一般情况下可以使应用程序的框架变得简单和直接。

原文出处:http://www.cnblogs.com/lane_cn/articles/155254.html
posted @ 2005-10-23 17:34 sharky的点滴积累 阅读(173) | 评论 (0)编辑 收藏

有空需要好好读读的书:
《程序员修炼之道》
《Effective Java 中文版》Java经典之作
《高级TCP/IP编程》虽然很老,但是很有价值。
《Java Development with Spring Framework》








--------------------------------------------------------------------------------

很多人推荐的书,现在出了中文版
s1095559.jpg


经典的J2ee design patterns方面的书
s1371848.jpg


-------------------
很少看到关于写CSS的书,不知道这本书给CSS设计带来什么
Zen:禅,我想是一些CSS设计的规律
s1429062.jpg


---------------------------
无意之间知道的书,看封面不错,有空找来看看
s1327824.jpg

posted @ 2005-10-13 20:58 sharky的点滴积累 阅读(135) | 评论 (0)编辑 收藏

Statement 接口提供了三种执行 SQL 语句的方法:executeQuery、executeUpdate 和 execute。使用哪一个方法由 SQL 语句所产生的内容决定。

方法 executeQuery 用于产生单个结果集的语句,例如 SELECT 语句。

方法 executeUpdate 用于执行 INSERT、UPDATE 或 DELETE 语句以及 SQL DDL(数据定义语言)语句,例如 CREATE TABLE 和 DROP TABLE。INSERT、UPDATE 或DELETE 语句的效果是修改表中零行或多行中的一列或多列。executeUpdate 的返回值是一个整数,指示受影响的行数(即更新计数)。对于 CREATE TABLE 或DROP TABLE 等不操作行的语句,executeUpdate 的返回值总为零。

方法 execute 用于执行返回多个结果集、多个更新计数或二者组合的语句。因为多数程序员不会需要该高级功能,所以本概述后面将在单独一节中对其进行介绍。

执行语句的所有方法都将关闭所调用的 Statement 对象的当前打开结果集(如果存在)。这意味着在重新执行 Statement 对象之前,需要完成对当前ResultSet 对象的处理。

应注意,继承了 Statement 接口中所有方法的 PreparedStatement 接口都有自己的 executeQuery、executeUpdate 和 execute 方法。Statement 对象本身不包
SQL 语句,因而必须给 Statement.execute 方法提供 SQL 语句作为参数。PreparedStatement 对象并不将 SQL 语句作为参数提供给这些方法,因为它们已
经包含预编译 SQL 语句。CallableStatement 对象继承这些方法的
PreparedStatement 形式。对于这些方法的 PreparedStatement 或CallableStatement 版本,使用查询参数将抛出 SQLException。


4.1.3 语句完成

当连接处于自动提交模式时,其中所执行的语句在完成时将自动提交或还原。语句在已执行且所有结果返回时,即认为已完成。对于返回一个结果集的 executeQuery 方法,在检索完 ResultSet 对象的所有行时该语句完成。对于方法executeUpdate,当它执行时语句即完成。但在少数调用方法 execute 的情况中,在检索所有结果集或它生成的更新计数之后语句才完成。

有些 DBMS 将已存储过程中的每条语句视为独立的语句;而另外一些则将整个过程视为一个复合语句。在启用自动提交时,这种差别就变得非常重要,因为它影响什么时候调用 commit 方法。在前一种情况中,每条语句单独提交;在后一种情况中,所有语句同时提交。


4.1.4 关闭 Statement 对象

Statement 对象将由 Java 垃圾收集程序自动关闭。而作为一种好的编程风格,应在不需要 Statement 对象时显式地关闭它们。这将立即释放 DBMS 资源,有助于避免潜在的内存问题。


4.1.5 Statement 对象中的 SQL 转义语法

Statement 可包含使用 SQL 转义语法的 SQL 语句。转义语法告诉驱动程序其中的代码应该以不同方式处理。驱动程序将扫描任何转义语法,并将它转换成特定数据库可理解的代码。这使得转义语法与 DBMS 无关,并允许程序员使用在没有转义语法时不可用的功能。


转义子句由花括号和关键字界定:

{keyword . . . parameters . . . }

该关键字指示转义子句的类型,如下所示。


escape 表示 LIKE 转义字符

字符“%”和“_”类似于 SQL LIKE 子句中的通配符(“%”匹配零个或多个字符,而“_”则匹配一个字符)。为了正确解释它们,应在其前面加上反斜杠(“”),它是字符串中的特殊转义字符。在查询末尾包括如下语法即可指定用作转义字符的字符:

{escape 'escape-character'}


例如,下列查询使用反斜杠字符作为转义字符,查找以下划线开头的标识符名:

stmt.executeQuery("SELECT name FROM Identifiers WHERE Id LIKE `\_%' {escape `'};

fn 表示标量函数


几乎所有 DBMS 都具有标量值的数值、字符串、时间、日期、系统和转换函数。要使用这些函数,可使用如下转义语法:关键字 fn 后跟所需的函数名及其参数。例如,下列代码调用函数 concat 将两个参数连接在一起:

{fn concat("Hot", "Java")};

可用下列语法获得当前数据库用户名:

{fn user()};


标量函数可能由语法稍有不同的 DBMS 支持,而它们可能不被所有驱动程序支持。各种 DatabaseMetaData 方法将列出所支持的函数。例如,方法getNumericFunctions 返回用逗号分隔的数值函数列表,而方法getStringFunctions 将返回字符串函数,等等。

驱动程序将转义函数调用映射为相应的语法,或直接实现该函数。


d、t 和 ts 表示日期和时间文字

DBMS 用于日期、时间和时间标记文字的语法各不相同。JDBC 使用转义子句支持这些文字的语法的 ISO 标准格式。驱动程序必须将转义子句转换成 DBMS 表示。

例如,可用下列语法在 JDBC SQL 语句中指定日期:

{d `yyyy-mm-dd'}


在该语法中,yyyy 为年代,mm 为月份,而 dd 则为日期。驱动程序将用等价的特定于 DBMS 的表示替换这个转义子句。例如,如果 '28- FEB-99' 符合基本数据库的格式,则驱动程序将用它替换 {d 1999-02-28}。

对于 TIME 和 TIMESTAMP 也有类似的转义子句:

{t `hh:mm:ss'}
{ts `yyyy-mm-dd hh:mm:ss.f . . .'}

TIMESTAMP 中的小数点后的秒(.f . . .)部分可忽略。


call 或 ? = call 表示已存储过程



如果数据库支持已存储过程,则可从 JDBC 中调用它们,语法为:

{call procedure_name[(?, ?, . . .)]}


或(其中过程返回结果参数):

{? = call procedure_name[(?, ?, . . .)]}


方括号指示其中的内容是可选的。它们不是语法的必要部分。

输入参数可以为文字或参数。有关详细信息,参见 JDBC 指南中第 7 节,“CallableStatement”。


可通过调用方法 DatabaseMetaData.supportsStoredProcedures 检查数据库是否支持已存储过程。



oj 表示外部连接



外部连接的语法为

{oj outer-join}


其中 outer-join 形式为

table LEFT OUTER JOIN {table / outer-join} ON search-condition


外部连接属于高级功能。有关它们的解释可参见 SQL 语法。JDBC 提供了三种DatabaseMetaData 方法用于确定驱动程序支持哪些外部连接类型:supportsOuterJoins、supportsFullOuterJoins 和supportsLimitedOuterJoins
。


方法 Statement.setEscapeProcessing 可打开或关闭转义处理;缺省状态为打开。当性能极为重要时,程序员可能想关闭它以减少处理时间。但通常它将出于打开状态。应注意: setEscapeProcessing 不适用于 PreparedStatement 对象,因为在调用该语句前它就可能已被发送到数据库。有关预编译的信息,参见PreparedStatement。


4.1.6 使用方法 execute

execute 方法应该仅在语句能返回多个 ResultSet 对象、多个更新计数或ResultSet 对象与更新计数的组合时使用。当执行某个已存储过程或动态执行未知 SQL 字符串(即应用程序程序员在编译时未知)时,有可能出现多个结果的情况,尽管这种情况很少见。例如,用户可能执行一个已存储过程(使用 CallableStatement 对象 - 参见第 135 页的 CallableStatement),并且该已存储过程可执行更新,然后执行选择,再进行更新,再进行选择,等等。通常使用已存储过程的人应知道它所返回的内容。

因为方法 execute 处理非常规情况,所以获取其结果需要一些特殊处理并不足为怪。例如,假定已知某个过程返回两个结果集,则在使用方法 execute 执行该过程后,必须调用方法 getResultSet 获得第一个结果集,然后调用适当的getXXX 方法获取其中的值。要获得第二个结果集,需要先调用 getMoreResults方法,然后再调用 getResultSet 方法。如果已知某个过程返回两个更新计数,则首先调用方法 getUpdateCount,然后调用 getMoreResults,并再次调用getUpdateCount。

对于不知道返回内容,则情况更为复杂。如果结果是 ResultSet 对象,则方法execute 返回 true;如果结果是 Java int,则返回 false。如果返回 int,则意味着结果是更新计数或执行的语句是 DDL 命令。在调用方法 execute 之后要做的第一件事情是调用 getResultSet 或 getUpdateCount。调用方法 getResultSet可以获得两个或多个 ResultSet 对象中第一个对象;或调用方法 getUpdateCount 可以获得两个或多个更新计数中第一个更新计数的内容。

当 SQL 语句的结果不是结果集时,则方法 getResultSet 将返回 null。这可能意味着结果是一个更新计数或没有其它结果。在这种情况下,判断 null 真正含义的唯一方法是调用方法 getUpdateCount,它将返回一个整数。这个整数为调用语句所影响的行数;如果为 -1 则表示结果是结果集或没有结果。如果方法getResultSet 已返回 null(表示结果不是 ResultSet 对象),则返回值 -1 表示没有其它结果。也就是说,当下列条件为真时表示没有结果(或没有其它结果):

((stmt.getResultSet() == null) && (stmt.getUpdateCount() == -1))
如果已经调用方法 getResultSet 并处理了它返回的 Resul
posted @ 2005-10-12 20:24 sharky的点滴积累 阅读(1014) | 评论 (0)编辑 收藏

首先我们要明白用response.sendRedirect做转向的原理,它其实是向浏览器发送一个特殊的Header,
然后由浏览器来做转向,转到指定的页面,所以用sendRedirect时,浏览器的地址栏上可以看到地址的变化。
用则不同,它是直接在server做的,浏览器并不知道,也不和浏览器打交道,
这从浏览器的地址并不变化可以看出。
所以使用response.sendRedirect时就需要注意以下两点:
1,在使用response.sendRedirect时,前面不能有HTML输出。
这并不是绝对的,不能有HTML输出其实是指不能有HTML被送到了浏览器。事实上现在的server都有cache机制
,一般在8K(我是说JSP  SERVER),这就意味着,除非你关闭了cache,
或者你使用了out.flush()强制刷新,那么在使用sendRedirect之前,
有少量的 HTML输出也是允许的。
如果报错说,“一些信息已经被submitted”(原文忘了),那么,你就要注意看了,前面是不是有过多的HTML输出了。

2,在response.sendRedirect之后,应该紧跟一句return;
我们已经知道response.sendRedirect是通过浏览器来做转向的,所以只有在页面处理完成后,
才会有实际的动作。既然你已经要做转向了,那么后的输出还有什么意义呢?而且有可能会因为后面的输出导致转向失败。

# posted by lazio1900 @ 2005-09-08 08:10 评论(0)
posted @ 2005-10-12 20:22 sharky的点滴积累 阅读(1308) | 评论 (0)编辑 收藏

POST是表单提交,GET是字符串提交

post是隐式地提交你的表单数据
get是显示地提交你的表单数据所有数据都在url里会显示出来

Post 与Get的真正区别是其作用上的不同,Post是被设计用来向上放东西的(就像其名字所暗示的那样);而Get是被设计用来从服务器取东西的,它所以也能够向服务器传送较少的数据,是以为当你取东西时,你需要指明取什么,而我们有时候利用指明取什么的机制来向服务器放东西。
基于以上原因,Post与Get在http中传送的方式是不同的,Get的参数是在http的头部传送的,而Post的数据则是在http请求的内容里传送的,一般来说,我们没有看到这中间的差别,那是因为编程环境帮(如servlet)我们隐藏了其不同
GET方法将数据打包放置在环境变量QUERY_STRING中作为URL整体的一部分传递给服务器。 POST做很多类似GET同样的事情, 不同的地方就是它是分离地传递数据给脚本. 你的脚本通过标准输入获取这些数据. QUERY_STRING环境变量将不再设置.因此POST有更好的安全性,尤其如果你的表单中有很多数据的话. 当你用GET, 这个服务器就分配变量QUERY_STRING给所有的表单数据, 但是这个变量可存储量是有限的. 换句话说,如果你有很多数据但是你又用GET,你会丢失很多数据。 如果你用POST, 你可以尽可能多地使用数据, 因为这些数据从来也不分配到一个变量里。此外用post传递数据还有一个好处,它不会象get那样把你传送的数据暴露在浏览器的地址栏中,而且由于 HTTP/GET常见于Web链接,怀有恶意的人可能利用它实施欺骗,使别人在不知不觉中用自己的安全标识调用Web服务,却还以为自己在点击Web链接。比如象下面这种:form.php?name=genius&pwd=123456 ,明白了吧?所以还是用post让人安心一点啦
posted @ 2005-10-12 20:20 sharky的点滴积累 阅读(626) | 评论 (2)编辑 收藏

Vector和ArrayList在使用上非常相似,都可用来表示一组数量可变的对象应用的集合,并且可以随机地访问其中的元素
 Vector的方法都是同步的(Synchronized),是线程安全的(thread-safe),而ArrayList的方法不是,由于线程的同步必然要影响性能,因此,ArrayList的性能比Vector好
 当Vector或ArrayList中的元素超过它的初始大小时,Vector会将它的容量翻倍,而ArrayList只增加50%的大小,这样,ArrayList就有利于节约内存空间。


  Hashtable和HashMap区别
 Hashtable和HashMap它们的性能方面的比较类似 Vector和ArrayList,比如Hashtable的方法是同步的,而HashMap的不是。


ArrayList和LinkedList区别
 对于处理一列数据项,Java提供了两个类ArrayList和LinkedList,ArrayList的内部实现是基于内部数组Object[],所以从概念上讲,它更象数组,但LinkedList的内部实现是基于一组连接的记录,所以,它更象一个链表结构,所以,它们在性能上有很大的差别。
 从上面的分析可知,在ArrayList的前面或中间插入数据时,你必须将其后的所有数据相应的后移,这样必然要花费较多时间,所以,当你的操作是在一列数据的后面添加数据而不是在前面或中间,并且需要随机地访问其中的元素时,使用ArrayList会提供比较好的性能
 而访问链表中的某个元素时,就必须从链表的一端开始沿着连接方向一个一个元素地去查找,直到找到所需的元素为止,所以,当你的操作是在一列数据的前面或中间添加或删除数据,并且按照顺序访问其中的元素时,就应该使用LinkedList了。
 如果在编程中,1,2两种情形交替出现,这时,你可以考虑使用List这样的通用接口,而不用关心具体的实现,在具体的情形下,它的性能由具体的实现来保证。

 配置集合类的初始大小
 在Java集合框架中的大部分类的大小是可以随着元素个数的增加而相应的增加的,我们似乎不用关心它的初始大小,但如果我们考虑类的性能问题时,就一定要考虑尽可能地设置好集合对象的初始大小,这将大大提高代码的性能。
 比如,Hashtable缺省的初始大小为101,载入因子为0.75,即如果其中的元素个数超过75个,它就必须增加大小并重新组织元素,所以,如果你知道在创建一个新的Hashtable对象时就知道元素的确切数目如为110,那么,就应将其初始大小设为110/0.75=148,这样,就可以避免重新组织内存并增加大小。
posted @ 2005-10-12 19:40 sharky的点滴积累 阅读(2978) | 评论 (1)编辑 收藏

Eclipse的WTP Project发表了最新的两个Tutorial。 一个是来自于IBM developerWorks的 Building Web Applications with Eclipse, WTP, and Derby,介绍如何使用WTP来开发Derby应用程序(Derby是IBM贡献个Apache的一个源码开放的数据库系统,它的商用版本就是IBM Cloudscape)。 另一个是Building a CMP Based School Schedule Web Application,介绍了如何使用WTP,JBoss和XDoclet开发一个基于CMP的EJB项目。 这两个都可以作为学习WTP不错的教材。
摘至kukooBlog
posted @ 2005-10-04 20:54 sharky的点滴积累 阅读(153) | 评论 (0)编辑 收藏

 How do I make SWT show the Windows XP skins?
A: In order for an application to show the Windows XP skins, there must be a manifest file located in the same place as the executable that launches the application. Here is a sample manifest file to download.

The name of the manifest file must match the name of the executable. In the case of eclipse, the executable is javaw.exe and the manifest file must have the name javaw.exe.manifest. The manifest file must be in the jre\bin folder for the VM you use to launch Eclipse. Note: the eclipse.exe executable does not launch Eclipse; eclipse.exe displays a splash screen and then invokes the Java VM.

文件:
javaw.exe.manifest
摘至 The SWT  FAQ
原来的eclipse样子
eclipse02.jpg


更改后的样子,注意按钮的样式的变化
eclipse01.jpg


一定要记得javaw.exe.manifest放在eclipse.VM环境变量的javaw的目录下
也可以使用类似的办法,不过,要把javaw.exe.manifest拷贝为java.exe.manifest才可以.
posted @ 2005-10-04 20:49 sharky的点滴积累 阅读(317) | 评论 (0)编辑 收藏

今天查找有关编辑器的问题,找到两档不错的文本编译器,提供联想功能而且小巧,都才1-2M,第一个是PHP Designer 2005,另一个是HTMLGate FREE,PHP Designer好像快发布2006版本。想来这个PHP编辑器不错。感觉比Editplus强大许多。当然最重要的一点,这些都是免费的。(:
缺点:占用系统资源虽然不是很多,但是更EditPlus比起来,呵呵还是多了点。个人觉得就HTML/JS编辑,Editplus还是经典许多。

MPS HTMLGate  HTMLGate

Snap1.jpg

[翻译摘录]
      最高效而强大的网页编辑器,不管是经验丰富的网页专家,还是一个网站制作新手。
会帮助你在最短的时间内,作出完美的网站。
      语法支持的优秀代码特性能帮助你快速创建编辑并发布HTML,4HTML 4, XHTML 2, JavaScript 1.2, VBScript, DHTML, CSS 2.0, PHP 5, ASP, XML, JSP, SSI, WML 1.1, HDML 3.0, SMIL, PERL, SQL 和 WebTV网页。
       所建即所得的特性值得关注,任务面板包含了七种不同代码库,包括标签库,工程管理,两个文件浏览器,HTML分析器和其他实用的任务工具。
       这款编辑器还支持自己定义界面和属性,比如XP风格。
      下载地址:HTMLGate FREE
       如果官网不能下,搜下,很多网站提供下载

PHP Designer 2005

预览界面
Snap2.jpg

[翻译]
特性:1.支持PHP, HTML, XHTML, CSS, Perl, C#, JavaScript, VB, Java and SQL (Ingres, Interbase, MSSQL, MySQL, Oracle, Sybase 和 标准SQL的语法高亮支持,最重要的是支持PHP的编译和调试,方便许多。
           2.还有自动缩进,参数提示,代码/脚本访问,PHP在线指南等功能
           3.提供FTP管理器,工程管理器,文件管理器,任务标签管理器,代码模板,片断管理,多文件格式导出(LaTex,HTML,RTF...)
           4.提供18种编辑器界面主题风格。
            5.此软件免费
下载地址:PHP Designer 2005

我想要写PHP代码的朋友可以试试,应该的蛮爽的。

 

posted @ 2005-10-04 18:14 sharky的点滴积累 阅读(1482) | 评论 (0)编辑 收藏

      这个插件很早就装上了,装的时候用了一下,能直接访问数据库,进行SqL数据库操作,先前装了jfacedbc,感觉一摸一样,刚开始怀疑是同一个东东。一个SQL浏览器。

介绍SQLExplorer的使用文章 Onjava上的,Matrix的中文翻译

SQlExplorer的主页

大胃的SQLExplorer的介绍

posted @ 2005-10-03 23:09 sharky的点滴积累 阅读(226) | 评论 (0)编辑 收藏

插件名称:JSEclipse
插件分类:Editor
插件版本:1.1.0
插件主页:http://www.interaktonline.com/Products/Eclipse/JSEclipse/Overview/
插件介绍:JSEclipse是个Eclipse下的免费Javascript脚本编辑器,最大的特点就是对js的自动完成功能非常完美,支持普通DOM对象的点取,如document对象,screen对象,这些对象都是通过外置的xml文件配置进行工作的,所以用户完全可以根据自己需要配置更详细的DOM对象的xml文件。除过基本的DOM对象支持外,JSEclipse对js文件内的Class和Function也能完美地支持自动完成,看我的截图。这个插件还支持JavaDoc的编辑时自动完成,不过我一般都在用MyEclipse套件,所以这个功能对我到意义不大。除过自动完成功能外,该插件还支持JS的语法高亮,错误和警告提示等等,我已经把js文件默认打开方式选择为JSEclipse了,MyEclipse那个太慢了,唯一遗憾的就是没有调试功能,希望下一个版本把javascript脚本调试加入进来,这样才算是一个真正意义上的js开发插件。
该插件支持Eclipse 3.X,不过得需要JRE1.5。如果你在安装此插件前还安装了WTP、MyEclipse等插件,请更改.js文件的默认打开方式为JSEclipse才能启用这个插件。
点选自定义类的属性和方法
posted @ 2005-10-03 22:33 sharky的点滴积累 阅读(274) | 评论 (0)编辑 收藏

今天国庆黄金周过了3天了,今天做了终于把简历做好了,还差一个大项目没加
JSP看到内置对象了,继续努力

posted @ 2005-10-03 19:41 sharky的点滴积累 阅读(140) | 评论 (0)编辑 收藏

      网上关于String类一些有关问题的讨论很多,在这里自我总结一下。希望对刚开始学Java的朋友一对帮助。

【问题一:字符串的引用比较问题】
先看个例子,大家预测下结果:
例1
package base;

public class StringTest
{
    public static void main(String[] args) 
   {
    String A = "test";
    String B = "test";
    String C = new String("test");
    String D = new String("test");
    System.out.println("A==B?" + (A == B));
    System.out.println("C==D?" + (C == D));
    System.out.println("C==A?" + (C == A));
    System.out.println("C equals D?" + (C.equals(D)));

  }
}

运行结果:
A==B? true
C==D?false
C==A?false
C equals D?true

几点认识:

1.引用之间的“=="操作符,表示比较两边引用是否相等,即是否指向同一个对象。
2.对于"String A = "test""这样建立的字符串对象,如果在下次"String B = "test"",如果内容一样,JVM就不会在创建新的对象,而是简单地把新的引用指向已经存在的对象(编译时)。(即便是在不同的包中)
3.String.equals(String)是比较字符串的内容。

理解这几点,通过分析,很快得出上例结果。
这里再给出个例子
例2.

String s1 = "I love Java";
String s2 = "I love ";
String s3 = "Java";
String s4 = s2 + s3;
String s5 = "I love "+"Java";

if (s1 == s4) System.out.println("yes");
else System.out.println("no");

if (s1 == s5) System.out.println("yes");
else System.out.println("no");

运行结果:
no
yes

分析:s2+s3虽然其内容也是"I love Java",但是s4 的值是运行后出来的,不是编译的时候。JVM只是把编译时 "=" 方式创建的 String 对象优化为内容相同时指向相同的对象实体。而当一个字符串由多个字符串常量连接而成时,在编译期就解析为一个字符串常量。s5就是这样,自然打出"yes"。
        有的说String+String中的"+"时JVM自动重载的,用于连接字符串,String s1="java"是对"="的重载,重载为创建一个对象,并把对象地址赋给引用。本质是一样。




----------------------------------
【问题二:Java的参数传递问题】
引出:论坛上一个朋友提出的一道华为的面试题:

例3:
package test;

public class TestString {
public TestString() {
}

public static void main(String[] args) {
String s=new String("Hello");
modify(s);
System.out.println("s = "+s);
}

public static void modify(String s)
{
s+="world";
}
}


运行结果:
s = Hello
为什么是输出Hello,而不是Helloworld?谢谢

------------------------

首先要确认的几点认识:
1.引用不是对象,它没有属性和方法,而是指向某一个对象的变量,跟基本数据类型的变量意义一样。(引用是C中指针的隐藏化)

例4:
             String a ="Hello World";
            String b =a;

分析:a,b是不同的引用变量,但是都是指向同一个对象,即对象"String World"。a,b都是存放了同一个对象的地址,而这个地址指向内存域存放的是"Hello World".

2.Java中的参数传递都是值传递,都是拷贝式的,基本数据类型是这样,不用多说,当传入的参数是一个对象的引用时,也时值传递,只不过传递的"值",非对象本身,而是对象杂在内存中的地址。
       所以在例1中:modify(String s)的"s"得到是String s=new String("Hello")中的"s"的引用值拷贝.

3. String是常量性的,看看JDK文档里面怎么说String的吧,“Strings are constant; their values cannot be changed after they are created. String buffers support mutable strings. Because String objects are immutable they can be shared”。String的内容是无法改变的,如果需要改变,要考虑用StringBuffer。

例5:
         1、 String s = "Hello";
         2、 String s1 = s;
         3、 s1 += "World!";

分析:
      1->2步:s1和s这两个引用,都指向同一个字符串对象"Hello",此时有2个引用,1个对象
     第3步:   由于String的不可更改性,所以“+=”操作后面操作是:返回一个新的字符串"HelloWorld",并把这个新的字符串的地址给引用s1,而引用s仍然引用原来的"Hello"。
此时,有2个引用("s","s1"),两个字符串对象("Hello","HelloWorld")。大家要记住:String的值的改变其实是创建一个新的String对象.
 即:
            s1 += "World!";

           s1 = new String("HelloWold")
语义上是等价。

何为语义?   简单的说就是”你这条语句背后到底让编译器做了些什么?“

这里在提及一个例子
例6.

public class Test
{
  StringBuffer a ;
  public static void main(String[] args)
  {
   Test test = new Test();
   test.a = new StringBuffer("Hello");
   test.test(test.a);
   
   System.out.println("a is "+ test.a);
   
  }
  
  public  void test(StringBuffer strbuf)
  {
   strbuf.append("World");
   System.out.println(strbuf == a);

  }

运行结果:

true
a is HelloWorld

         那这里"strbuf==a",怎么又为true了呢,并且"a is HelloWorld"了,按上面的道理,不是不会修改数据源吗?注意我们这里运用的是StringBuffer,不同于String,它能修改自己的内容。test方法中传入的strbuf引用的值为a引用值的拷贝值,但是strbuf.append("World")这句话,是通过引用的值,修改了该值指向对象的内容,a可以调用append修改,strbuf自然也可以。所以,最后打印出a的值是strbuf修改后的对象的值。好比往test方法中传入的一个可以操作a所指对象的"句柄",可以让方法里的代码操作目的对象。

         如果理解上面几点,理解起来例3为什么是"Hello",我想就比较容易了。
所以通过这个问题,也告诉我们,在学习语言基础的时候,不光要读懂这个语句怎么写,更应该通过现象看本质,了解语句背后编译器做了些什么,尤其是内存分配上的操作。虽然Java淡化了内存有关的概念,但是了解更多机制,会帮我对计算机编译代码的了解更深一个层次。

-------------------------------

相关问题的参考:
http://www.ideagrace.com/html/doc/2005/09/19/00626.html

http://www.matrix.org.cn/thread.shtml?forumId=1&topicId=1142&page=1

http://www.matrix.org.cn/thread.shtml?forumId=1&topicId=27155&page=1

posted @ 2005-10-02 12:17 sharky的点滴积累 阅读(311) | 评论 (0)编辑 收藏