|
2009年12月2日
JDK1.5出来多年了(2004年10月正式发行),就连6.0正式版在 http://java.sun.com上已是赫然在目,紧跟着的各应用服务器和 Java IDE 厂商的都准备就绪. 可是相信很多开发者跟我一样却碍于公司用的是老版本的应用服务器,如WebSphere Application Server,,WebLogic等只能支持到1.4的JDK,要升级应用服务器成本和风险都有担心,所以项目中只能用1.4 的JDK,一直无法体验到 JDK 1.5 的新特性带来的便利.
有些同事机器里一直还是躺着 JDK 1.4,我可能比他们好一点就是直接装了一个 JDK 1.5,然后在 Java IDE 中设置编译器的 Compiler compliance level为 1.4(实质就是javac –target 1.4).这样避免了用JDK1.5编译的Class 放在1.4的JVM中运行出现49.0的字节码版本太高的错误,这样做只不是50步和100步的差距,照例用不了JDK1.5 的新特性.
我一直在探索:能不能使用JDK1.5的特性,然后让生成的字节码能在1.4的JVM下运行.如是果是仅仅换掉应用服务所用的JDK恐怕是会出很多问题的.
也算是功夫不负有心人啊,时至今日终于在网上找着了一个叫做 Retrotranslator 的工具,开源的,在 SourceForge http://sourceforge.net/projects/retrotranslator,当前版本是1.2.1.这个工具正好能满足我的需求.进到那个下载页面,你只要下载 Retrotranslator-1.2.1-bin.zip,其中包含了
retrotranslator-runtime-1.1.1-bundle.jar 字节码转换之后,运行时需要这个包来支持
retrotranslator-transformer-1.2.1-bundle.jar 转换字节码用,如用命令转换或用ant来转换需要这个包
而且还有一个 backport-util-concurrent-3.0.jar 大概是用新的并发机制运行时需要依赖这个包
Retrotranslator实质上是一个基于ASM 框架的字节码转换工具,如果要看它详细的使用帮助,请见页面 http://retrotranslator.sourceforge.net/.
使用 Retrotranslator 可以让你使用的JDK1.5的特征有泛型、注解、泛型和注解的反射、枚举、自动装/拆箱、增强的循环、变参、协变式返回类型、格式化输出、静态引入、新的并发机制、增强的集合框架。(见What Java 5 features are supported?)
还能使用新的类和新的方法,如 StringBuilder 等,见What Java 5 classes and methods are supported?
使用方式:
1. 命令行下转换用JDK1.5的编译的classes文件
2. 用Ant或Maven自动化转换用JDK1.5的编译的classes文件,Retrotranslator提供了对Ant和Maven的支持。
3. 运行程序时加载类时即时转换换用JDK1.5的编译的类打成的jar包
4. 作为 IntelliJ IDEA的一个插件使用,可惜现在还没有Eclipse的插件,只能是期盼着。
下面只介绍如何用ANT方式来转换用JDK1.5的编译的classes文件,让它们能运行在1.4的JVM中。步骤如下:
1. 用1.5的JDK编译好你的类,比如编译在c:\workspace\unmi\WEB-INF\classes下。用Ant或是IDE帮你编译好。
2. 把retrotranslator-transformer-1.2.1-bundle.jar拷入到 $ANT_HOME/lib中,如果是在Eclipse中运行Ant Build文件,你需要设置 Window->Preferences->Ant-Runtime然后Add External JARSs…把retrotranslator-transformer-1.2.1-bundle.jar加进来。
3. 上面准备做好了,就要开始用 Retrotranslator来转换你的字节码了。转换部分的Ant Build的target像下面这么写:
01.
02.
03.
05.
08.
09.
10.
11.
12.
13.
14.
4. 注意到上面destdir和srcdir都写成了一样的,我是让转换后的类直接把原来的类覆盖了,你可已把destdir设置为别的目录。
5. 最后就是运行了,你需要事先把retrotranslator-runtime-1.1.1-bundle.jar和backport-util-concurrent-3.0.jar配置在你的classpath中,比如是WEB应用程序,把它们拷到WEB-INF\lib中就行了。
比如,你写的是一个企业应用程序或者WEB程序,你只需要在打EAR或WAR包之前作以上的转换就行了。
另外,对于在JSP中用了JDK1.5的特性,就稍稍有点麻烦了,先要用特定于应用服务器的JSP编译器编译好JSP文件,在用 Retrotranslator 转换生成的 JSP 对应的class文件。如果中途对JSP文件有改动,我们不仅要编译并转换JSP 对应的class文件,然后覆盖掉服务器上的那个JSP对应的class文件,还要覆盖服务器上的那个JSP文件。
通常我们都不会对JSP文件预编译的。
所以我们的口号是:尽量不在JSP文件中写JAVA代码,写了也不要用JDK1.5的新特性,即使有复杂的东西也可以交给自定义标签处理。
比如struts标签
1.
……
不管amount是Integer还是 int 都无妨
再比如
1.
2.
3.
不管myBeanList是否是用的泛型,都能够正确取出数据来。如果要求严格点在给
一:要解决的问题
我们在尝鲜 JDK1.5 的时候,相信不少人遇到过 Unsupported major.minor version 49.0 错误,当时定会茫然不知所措。因为刚开始那会儿,网上与此相关的中文资料还不多,现在好了,网上一找就知道是如何解决,大多会告诉你要使用 JDK 1.4 重新编译。那么至于为什么,那个 major.minor 究竟为何物呢?这就是本篇来讲的内容,以使未错而先知。
我觉得我是比较幸运的,因为在遇到那个错误之前已研读过《深入 Java 虚拟机》第二版,英文原书名为《Inside the Java Virtual Machine》( Second Edition),看时已知晓 major.minor 藏匿于何处,但没有切身体会,待到与 Unsupported major.minor version 49.0 真正会面试,正好是给我验证了一个事实。
首先我们要对 Unsupported major.minor version 49.0 建立的直接感觉是:JDK1.5 编译出来的类不能在 JVM 1.4 下运行,必须编译成 JVM 1.4 下能运行的类。(当然,也许你用的还是 JVM 1.3 或 JVM 1.2,那么就要编译成目标 JVM 能认可的类)。这也解决问题的方向。
二:major.minor 栖身于何处
何谓 major.minor,且又居身于何处呢?先感性认识并找到 major.minor 来。
写一个 Java Hello World! 代码,然后用 JDK 1.5 的编译器编译成,HelloWorld.java
用 JDK 1.5 的 javac -d . HelloWorld.java 编译出来的字节码 HelloWorld.class 用 UltraEdit 打开来的内容如图所示:
从上图中我们看出来了什么是 major.minor version 了,它相当于一个软件的主次版本号,只是在这里是标识的一个 Java Class 的主版本号和次版本号,同时我们看到 minor_version 为 0x0000,major_version 为 0x0031,转换为十制数分别为0 和 49,即 major.minor 就是 49.0 了。
三:何谓 major.minor 以及何用
Class 文件的第 5-8 字节为 minor_version 和 major_version。Java class 文件格式可能会加入新特性。class 文件格式一旦发生变化,版本号也会随之变化。对于 JVM 来说,版本号确定了特定的 class 文件格式,通常只有给定主版本号和一系列次版本号后,JVM 才能够读取 class 文件。如果 class 文件的版本号超出了 JVM 所能处理的有效范围,JVM 将不会处理该 class 文件。
在 Sun 的 JDK 1.0.2 发布版中,JVM 实现支持从 45.0 到 45.3 的 class 文件格式。在所有 JDK 1.1 发布版中的 JVM 都能够支持版本从 45.0 到 45.65535 的 class 文件格式。在 Sun 的 1.2 版本的 SDK 中,JVM 能够支持从版本 45.0 到46.0 的 class 文件格式。
1.0 或 1.2 版本的编译器能够产生版本号为 45.3 的 class 文件。在 Sun 的 1.2 版本 SDK 中,Javac 编译器默认产生版本号为 45.3 的 class 文件。但如果在 javac 命令行中指定了 -target 1.2 标志,1.2 版本的编译器将产生版本号为 46.0 的 class 文件。1.0 或 1.1 版本的 JVM 上不能运行使用-target 1.2 标志所产生的 class 文件。
JVM 实现的 第二版中修改了对 class 文件主版本号和次版本号的解释。对于第二版而言,class 文件的主版本号与 Java 平台主发布版的版本号保持一致(例如:在 Java 2 平台发布版上,主版本号从 45 升至 46),次版本号与特定主平台发布版的各个发布版相关。因此,尽管不同的 class 文件格式可以由不同的版本号表示,但版本号不一样并不代表 class 文件格式不同。版本号不同的原因可能只是因为 class 文件由不同发布版本的 java 平台产生,可能 class 文件的格式并没有改变。
上面三段节选自《深入 Java 虚拟机》,啰嗦一堆,JDK 1.2 开启了 Java 2 的时代,但那个年代仍然离我们很远,我们当中很多少直接跳在 JDK 1.4 上的,我也差不多,只是项目要求不得不在一段时间里委屈在 JDK 1.3 上。不过大致我们可以得到的信息就是每个版本的 JDK 编译器编译出的 class 文件中都带有一个版本号,不同的 JVM 能接受一个范围 class 版本号,超出范围则要出错。不过一般都是能向后兼容的,知道 Sun 在做 Solaris 的一句口号吗?保持对先前版本的 100% 二进制兼容性,这也是对客户的投资保护。
四:其他确定 class 的 major.minor version 办法
1)Eclipse 中查看
Eclipse 3.3 加入的新特征,当某个类没有关联到源代码,打开它会显示比较详细的类信息,当然还未到源码级别了,看下图是打开 2.0 spring.jar 中 ClasspathXmlApplicationContext.class 显示的信息
2)命令 javap -verbose
对于编译出的 class 文件用 javap -verbose 能显示出类的 major.minor 版本,见下图:
3) MANIFEST 文件
把 class 打成的 JAR 包中都会有文件 META-INF\MANIFEST,这个文件一般会有编译器的信息,下面列几个包的 META-INF\MANIFEST 文件内容大家看看
·Velocity-1.5.jar 的 META-INFO\MANIFEST 部份内容
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.7.0
Created-By: Apache Ant
Package: org.apache.velocity
Build-Jdk: 1.4.2_08
Extension-Name: velocity
我们看到是用 ant 打包,构建用的JDK是 1.4.2_08,用 1.4 编译的类在 1.4 JVM 中当然能运行。如果那人用 1.5 的 JDK 来编译,然后用 JDK 1.4+ANT 来打包就太无聊了。
·2.0 spring.jar 的 META-INFO\MANIFEST 部份内容
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.6.5
Created-By: 1.5.0_08-b03 (Sun Microsystems Inc.)
Implementation-Title: Spring Framework
这下要注意啦,它是用的 JDK 1.5 来编译的,那么它是否带了 -target 1.4 或 -target 1.3 来编译的呢?确实是的,可以查看类的二进制文件,这是最保险的。所在 spring-2.0.jar 也可以在 1.4 JVM 中加载执行。
·自已一个项目中用 ant 打的 jar 包的 META-INFO\MANIFEST
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.7.0
Created-By: 1.4.2-b28 (Sun Microsystems Inc.)
用的是 JDK 1.4 构建打包的。
第一第二种办法能明确知道 major.minor version,而第三种方法应该也没问题,但是碰到变态构建就难说了,比如谁把那个 META-INFO\MANIFEST 打包后换了也未可知。直接查看类的二进制文件的方法可以万分保证,准确无误,就是工具篡改我也认了。
五:编译器比较及症节之所在
现在不妨从 JDK 1.1 到 JDK 1.7 编译器编译出的 class 的默认 minor.major version 吧。(又走到 Sun 的网站上翻腾出我从来都没用过的古董来) JDK 编译器版本 target 参数 十六进制 minor.major 十进制 minor.major
jdk1.1.8 不能带 target 参数 00 03 00 2D 45.3
jdk1.2.2 不带(默认为 -target 1.1) 00 03 00 2D 45.3
jdk1.2.2 -target 1.2 00 00 00 2E 46.0
jdk1.3.1_19 不带(默认为 -target 1.1) 00 03 00 2D 45.3
jdk1.3.1_19 -target 1.3 00 00 00 2F 47.0
j2sdk1.4.2_10 不带(默认为 -target 1.2) 00 00 00 2E 46.0
j2sdk1.4.2_10 -target 1.4 00 00 00 30 48.0
jdk1.5.0_11 不带(默认为 -target 1.5) 00 00 00 31 49.0
jdk1.5.0_11 -target 1.4 -source 1.4 00 00 00 30 48.0
jdk1.6.0_01 不带(默认为 -target 1.6) 00 00 00 32 50.0
jdk1.6.0_01 -target 1.5 00 00 00 31 49.0
jdk1.6.0_01 -target 1.4 -source 1.4 00 00 00 30 48.0
jdk1.7.0 不带(默认为 -target 1.6) 00 00 00 32 50.0
jdk1.7.0 -target 1.7 00 00 00 33 51.0
jdk1.7.0 -target 1.4 -source 1.4 00 00 00 30 48.0
Apache Harmony 5.0M3 不带(默认为 -target 1.2) 00 00 00 2E 46.0
Apache Harmony 5.0M3 -target 1.4 00 00 00 30 48.0
上面比较是 Windows 平台下的 JDK 编译器的情况,我们可以此作些总结:
1) -target 1.1 时 有次版本号,target 为 1.2 及以后都只用主版本号了,次版本号为 0
2) 从 1.1 到 1.4 语言差异比较小,所以 1.2 到 1.4 默认的 target 都不是自身相对应版本
3) 1.5 语法变动很大,所以直接默认 target 就是 1.5。也因为如此用 1.5 的 JDK 要生成目标为 1.4 的代码,光有 -target 1.4 不够,必须同时带上 -source 1.4,指定源码的兼容性,1.6/1.7 JDk 生成目标为 1.4 的代码也如此。
4) 1.6 编译器显得较为激进,默认参数就为 -target 1.6。因为 1.6 和 1.5 的语法无差异,所以用 -target 1.5 时无需跟着 -source 1.5。
5) 注意 1.7 编译的默认 target 为 1.6
6) 其他第三方的 JDK 生成的 Class 文件格式版本号同对应 Sun 版本 JDK
7) 最后一点最重要的,某个版本的 JVM 能接受 class 文件的最大主版本号不能超过对应 JDK 带相应 target 参数编译出来的 class 文件的版本号。
上面那句话有点长,一口气读过去不是很好理解,举个例子:1.4 的 JVM 能接受最大的 class 文件的主版本号不能超过用 1.4 JDK 带参数 -target 1.4 时编译出的 class 文件的主版本号,也就是 48。
因为 1.5 JDK 编译时默认 target 为 1.5,出来的字节码 major.minor version 是 49.0,所以 1.4 的 JVM 是无法接受的,只有抛出错误。
那么又为什么从 1.1 到 1.2、从 1.2 到 1.3 或者从 1.3 到 1.4 的 JDK 升级不会发生 Unsupported major.minor version 的错误呢,那是因为 1.2/1.3/1.4 都保持了很好的二进制兼容性,看看 1.2/1.3/1.4 的默认 target 分别为 1.1/1.1/1.2 就知道了,也就是默认情况下1.4 JDK 编译出的 class 文件在 JVM 1.2 下都能加载执行,何况于 JVM 1.3 呢?(当然要去除使用了新版本扩充的 API 的因素)
六:找到问题解决的方法
那么现在如果碰到这种问题该知道如何解决了吧,还会像我所见到有些兄弟那样,去找个 1.4 的 JDK 下载安装,然后用其重新编译所有的代码吗?其实大可不必如此费神,我们一定还记得 javac 还有个 -target 参数,对啦,可以继续使用 1.5 JDK,编译时带上参数 -target 1.4 -source 1.4 就 OK 啦,不过你一定要对哪些 API 是 1.5 JDK 加入进来的了如指掌,不能你的 class 文件拿到 JVM 1.4 下就会 method not found。目标 JVM 是 1.3 的话,编译选项就用 -target 1.3 -source 1.3 了。
相应的如果使用 ant ,它的 javac 任务也可对应的选择 target 和 source
如果是在开发中,可以肯定的是现在真正算得上是 JAVA IDE 对于工程也都有编译选项设置目标代码的。例如 Eclipse 的项目属性中的 Java Compiler 设置,如图
自已设定编译选项,你会看到选择不同的 compiler compliance level 是,Generated class files compatibility 和 Source compatibility 也在变,你也可以手动调整那两项,手动设置后你就不用很在乎用的什么版本的编译器了,只要求他生成我们希望的字节码就行了,再引申一下就是即使源代码是用 VB 写的,只要能编译成 JVM 能执行的字节码都不打紧。在其他的 IDE 也能找到相应的设置对话框的。
其他时候,你一定要知道当前的 JVM 是什么版本,能接受的字节码主版本号是多少(可对照前面那个表)。获息当前 JVM 版本有两种途径:
第一:如果你是直接用 java 命令在控制台执行程序,可以用 java -version 查看当前的 JVM 版本,然后确定能接受的 class 文件版本
第二:如果是在容器中执行,而不能明确知道会使用哪个 JVM,那么可以在容器中执行的程序中加入代码 System.getProperty("java.runtime.version"); 或 System.getProperty("java.class.version"),获得 JVM 版本和能接受的 class 的版本号。
最后一绝招,如果你不想针对低版本的 JVM 用 target 参数重新编译所有代码;如果你仍然想继续在代码中用新的 API 的话;更有甚者,你还用了 JDK 1.5 的新特性,譬如泛型、自动拆装箱、枚举等的话,那你用 -target 1.4 -source 1.4 就没法编译通过,不得不重新整理代码。那么告诉你最后一招,不需要再从源代码着手,直接转换你所正常编译出的字节码,继续享用那些新的特性,新的 API,那就是:请参考之前的一篇日志:Retrotranslator让你用JDK1.5的特性写出的代码能在JVM1.4中运行,我就是这么用的,做好测试就不会有问题的。
七:再议一个实际发生的相关问题
这是一个因为拷贝 Tomcat 而产生的 Unsupported major.minor version 49.0 错误。情景是:我本地安装的是 JDK 1.5,然后在网上找了一个 EXE 的 Tomcat 安装文件安装了并且可用。后来同事要一个 Tomcat,不想下载或安装,于是根据我以往的经验是把我的 Tomcat 整个目录拷给他应该就行了,结果是拿到他那里浏览 jsp 文件都出现 Unsupported major.minor version 49.0 错误,可以确定的是他安装的是 1.4 的 JDK,但我还是有些纳闷,先前对这个问题还颇有信心的我傻眼了。惯性思维是编译好的 class 文件拿到低版本的 JVM 会出现如是异常,可现并没有用已 JDK 1.5 编译好的类要执行啊。
后来仔细看异常信息,终于发现了 %TOMCAT_HOME%\common\lib\tools.jar 这一眉目,因为 jsp 文件需要依赖它来编译,打来这个 tools.jar 中的一个 class 文件来看看,49.0,很快我就明白原来这个文件是在我的机器上安装 Tomcat 时由 Tomcat 安装程序从 %JDK1.5%\lib 目录拷到 Tomcat 的 lib 目录去的,造成在同事机器上编译 JSP 时是 1.4 的 JVM 配搭着 49.0 的 tools.jar,那能不出错,于是找来 1.4 JDK 的 tools.jar 替换了 Tomcat 的就 OK 啦。
八:小结
其实理解 major.minor 就像是我们可以这么想像,同样是微软件的程序,32 位的应用程序不能拿到 16 位系统中执行那样。
如果我们发布前了解到目标 JVM 版本,知道怎么从 java class 文件中看出 major.minor 版本来,就不用等到服务器报出异常才着手去解决,也就能预知到可能发生的问题。
其他时候遇到这个问题应具体解决,总之问题的根由是低版本的 JVM 无法加载高版本的 class 文件造成的,找到高版本的 class 文件处理一下就行了。
2009年11月26日
一:SQL tuning 类
1:列举几种表连接方式答:merge join,hash join,nested loop
2:不借助第三方工具,怎样查看sql的执行计划?答:sqlplus
set autotrace …
utlxplan.sql 创建 plan_table 表
3:如何使用CBO,CBO与RULE的区别?答:在初始化参数里面设置 optimizer_mode=choose/all_rows/first_row 等可以使用 cbo。
rbo会选择不合适的索引,cbo需要统计信息。
4:如何定位重要(消耗资源多)的SQL?答:根据v$sqlarea 中的逻辑读/disk_read。以及寻找CPU使用过量的session,查出当前session的当前SQL语句,或者:监控WIN平台Oracle的运行
5:如何跟踪某个session的SQL?答:先找出对应的’sid,serial’,然后调用system_system.set_sql_trace_in_session(sid,serial,true);参考:跟踪某个会话
6:SQL调整最关注的是什么?答:逻辑读。IO量
7:说说你对索引的认识(索引的结构、对dml影响、对查询影响、为什么提高查询性能)答:默认的索引是b-tree。
对insert的影响:分裂,要保证tree的平衡。
对delete的影响:删除行的时候要标记改节点为删除。
对update的影响:如果更新表中的索引字段,则要相应的更新索引中的键值。查询中包含索引字段的键值和行的物理地址。
8:使用索引查询一定能提高查询的性能吗?为什么?答:不能。如果返回的行数目较大,使用全表扫描的性能较好。
9:绑定变量是什么?绑定变量有什么优缺点?答:通俗的说,绑定变量就是变量的一个占位符,使用绑定变量可以减少只有变量值不同的语句的解析。
10:如何稳定(固定)执行计划?答:使用stored outline。
11:和排序相关的内存在8i和9i分别怎样调整,临时表空间的作用是什么?答:8i:使用sort_area_size,hash_area_size,每个session分配相同的值,不管有无使用。
9i:使用pga_aggregate来统一管理。临时表空间的作用:
在sort_area_size中不能完成的部分在临时表空间完成,临时表空间在重建索引,创建临时表等都要用到。
还有hash join不能完成的也在临时表空间中做。
12:存在表T(a,b,c,d),要根据字段c排序后取第21—30条记录显示,请给出sqlselect a,b,c,d from (select a,b,c,d from T order by c) where rownum<=30
minus
select a,b,c,d from (select a,b,c,d from T order by c) where rownum <=20;
或者:
select * from (select rownum rn,a.* from (select a,b,c,d from T order by c) a )where rn between 21 and 30;
二:数据库基本概念类
1:pctused and pctfree 表示什么含义有什么作用?答:表示数据块什么时候移入和移出freelist。
pctused:如果数据块的使用率小于pctused的值,则该数据块重新加入到fresslist中。
pctfree:如果数据块的使用率高于pctfree的值,则该数据块从freelist中移出。
2:简单描述table / segment / extent / block之间的关系答:一个table至少是一个segment,如果分区表,则每个分区是一个segment,table可以看成是一个逻辑上的概念,segment可以看成是这个逻辑概念的物理实现;
segment由一个或多个extents组成,segment不可以跨表空间但可以跨数据文件;
extent由多个连续的blocks组成,不可以跨数据文件;
block由1-多个os块组成,是oracle i/o的最小存储单位。
3:描述tablespace和datafile之间的关系答:tablespace是逻辑上的概念,datafile是物理上的概念。
一个tablespace可以由多个datafile组成,一个datafile不能跨越多个tablespace。
4:本地管理表空间和字典管理表空间的特点,ASSM有什么特点?答:一个使用freelist管理,一个使用位图管理。
5:回滚段的作用是什么?答:保存数据的前像,保证数据读取的时间点一致性。Oracle里数据的多版本特性就是通过回滚段来实现的,正因为此,Oracle数据库实现了读写不竞争的性能优势!
6:日志的作用是什么?答:记录对数据库的操作,便于恢复。
7:SGA主要有那些部分,主要作用是什么?答:db_cache(缓存数据块),shared_pool(缓存sql,执行计划,数据字典信息等),large_pool(MTS模式、parallel 、rman等要用到),java pool(java程序如SQLJ存储过程运行时要用到)。
8:Oracle系统进程主要有哪些,作用是什么?答:smon(合并空间,实例恢复),pmon(清理失败的进程),归档进程(负责在日志切换的时候归档日志文件),lgmr(日志书写器进程,负责写日志),ckpt(检查点进程,触发检查点),dbwr(数据库写入器,负责把数据写入导datafile)。
三:备份恢复类
1:备份如何分类?答:逻辑备份(exp)与物理备份。或者冷备份与热备份。
2:归档是什么含义?答:把日志文件放到另一个地方。
3:如果一个表在2004-08-04 10:30:00 被drop,在有完善的归档和备份的情况下,如何恢复答:拷贝备份,
recover database until time 2004-08-04 10:30:00
alter database open resetlogs;
4:rman是什么,有何特点?答:rman叫恢复管理器。
特点很多。可以在线备份,到少目标数据库是mount状态。1)热备份。
2)可以存储脚本。
3)可以增量备份。
4)自动管理备份集。
5:standby的特点答:利用传输重做日志来达到同步的目的。可以设定多个保护级别,9i后支持逻辑standbyDB。
6:对于一个要求恢复时间比较短的系统(数据库50G,每天归档5G),你如何设计备份策略答:每天一个全备份。
四:系统管理类
1:对于一个存在系统性能的系统,说出你的诊断处理思路答:做一个statspack,根据top 5,system load,top sql等来做相应的调整。
2:列举几种诊断IO、CPU、性能状况的方法答:hp-unix:iostat -x 1 5;
top/vmstat/glance
3:对statspack有何认识?答:一个性能诊断工具而已,其本质就是在两个时间点采样两个系统数据。(动态性能视图),然后根据两个snapshot,产生一个报告。
4:如果系统现在需要在一个很大的表上创建一个索引,你会考虑那些因素,如何做以尽量减小对应用的影响答:
1)增大sort_area_size(8i)/pga_aggregate_target(9i)值。
2)如果表有分区(一般大表都要用到分区的),按分区逐个建索引,如果是本地索引的话。
3)系统空闲的时候建。
5:对raid10 和raid5有何认识?答:raid10是先镜像后条带,适合对写入速度要求较高的数据库系统,特别是online redolog文件,raid5适合大部分的数据库系统和数据仓库系统,读性能优于写性能。
五:综合随意类
1:你最擅长的是oracle哪部分?答:性能/sql 调优、备份恢复。
2:喜欢oracle吗?喜欢上论坛吗?或者偏好oracle的哪一部分?答:http://www.itpub.net/,Oracle的SQL 优化。
3:随意说说你觉得oracle最有意思的部分或者最困难的部分答:SQL调优,最困难的是Oracle的网络管理,Oracle的Connect Manager没用过。
4:为何要选择做DBA呢?答:爱好加职业历史积累。
首先一个小例子:
首先取得option的value值,相对简单,在select标签上没有value属性,
option的value值就是select的value。
所以求得select value的值的方法如下
var ss = document.selectform.test;
var value= ss.value;//1或者2。。。
很多ide提示在select和option上面都没有selectIndex的属性提示,但是js能通过selectIndex这个属性获取选择项的
相关信息
可能是因为selectIndex是一个动态的列,它总是跟随selected属性改变,所以ide才没有自动提示
获取select text的值方法如下:
var ts1 = ss.options[ss.selectedIndex].text;//第一或者第二。。。
还可以用innerText获取:
var ts2 = ss.options[ss.selectedIndex].innerText;//第一或者第二。。。
2009年11月25日
在<a>标签上进行onclick事件的处理,不同的IE版本会显示出不同的效果。在IE7中会正常发挥脚本的作用,但是在IE6中就会出现脚本失效的情况。所以最好还是在href中进行脚本的控制,这样在不同的版本中都可以达到效果。
关键字: j2ee
原文地址: http://peoplesoft.ittoolbox.com/groups/technical-functional/peopletools-l/retrieving-the-password-for-weblogic-1469605 问题: 修改Administrator密码后忘记 解决方法: 因为WebLogic没有提供覆盖密码的工具,所以要先新建一个ID为adminuser的Administrator用户来启动WebLogic服务 1. 运行WebLogic主目录下的setEnv.cmd或setEnv.sh(UNIX) 2. 在命令行界面(系统Console)下输入
- java weblogic.security.utils.AdminAccount adminuser weblogic .
java weblogic.security.utils.AdminAccount adminuser weblogic .
注意最后的那个点“.”,这样你就新建了一个用户名为adminuser密码是weblogic的Administrator用户 3. 删除/webserv/DomainName/WebLogicAdmin/ldap 目录下的DefaultAuthenticatormyrealmInit.initialized文件 4. 启动WebLogic服务器,你会发现DefaultAuthenticatormyrealmInit.initialized重新生成了 5. 将boot.properties文件改个名比如"boot_back.properties" 6. 将setEnv.cmd或setEnv.sh文件中WLS_USER和WLS_PW修改为
- WLS_USER=adminuser
- WLS_PW=weblogic
WLS_USER=adminuser
WLS_PW=weblogic
7. 重启WebLogic服务器 8. 将改名的boot.properties文件改回原来的名字,并修改文件中的username和password
- username=adminuser
- password=weblogic
username=adminuser
password=weblogic
9. 重启WebLogic服务器,你会发现boot.properties中的字段相关已经加密了 10. 你可以用新的AdminID:adminuser来登陆了,到WebLogic Console中的Security / Realms / myrealm / users 下修改Password 附上一段BEA提供的操作动画: https://support.bea.com/askbea_soln/attachments/S-27131/81adminaccountreset_viewlet_swf.html
2009年11月24日
MooTools是一个简洁,模块化,面向对象的JavaScript框架。它能够帮助你更快,更简单地编写可扩展和兼容性强的JavaScript代码。
Mootools从Prototype.js中汲取了许多有益的设计理念,语法也和其极其类似。但它提供的功能要比Prototype.js多,整体设计也比Prototype.js要相对完善,功能更强大,比如增加了动画特效、拖放操作等等。
总之,Mootools是一个非常优秀的Javascript框架,更多精髓部分等待你去发掘,希望你也能通过学习和使用而喜欢上Mootools,甚至
喜欢上Javascript :)
详情参考 :
http://hi.baidu.com/ssfnadn/blog/item/abc4d1385fcf9a2b97ddd801.html
http://mootools.net/docs/core
MooTools is a compact, modular, Object-Oriented JavaScript framework designed for the intermediate to advanced JavaScript developer. It allows you to write powerful, flexible, and cross-browser code with its elegant, well documented, and coherent API.
MooTools code respects strict standards and doesn't throw any warnings. It's well commented and has meaningful variable names: a joy to browse and a snap to understand.
javascript的IE和Firefox兼容性问题集合
1. document.formName.item("itemName") 问题
说明:IE下,可以使用document.formName.item("itemName")或document.formName.elements["elementName"];
Firefox下,只能使用document.formName.elements["elementName"].
解决方法:统一使用document.formName.elements["elementName"].
2.集合类对象问题
说明:IE下,可以使用()或[]获取集合类对象;Firefox下,只能使用[]获取集合类对象.
解决方法:统一使用[]获取集合类对象.
3.自定义属性问题
说明:IE下,可以使用获取常规属性的方法来获取自定义属性,也可以使用getAttribute()获取自定义属性;Firefox下,只能使用getAttribute()获取自定义属性.
解决方法:统一通过getAttribute()获取自定义属性.
4.*****("idName")问题
说明:IE下,,可以使用*****("idName")或getElementById("idName")来取得id为idName的HTML对象;Firefox下只能使用getElementById("idName")来取得id为idName的HTML对象.
解决方法:统一用getElementById("idName")来取得id为idName的HTML对象.
5.变量名与某HTML对象ID相同的问题
说明:IE下,HTML对象的ID可以作为document的下属对象变量名直接使用;Firefox下则不能.Firefox下,可以使用与HTML对象ID相同的变量名;IE下则不能。
解决方法:使用document.getElementById("idName")代替document.idName.最好不要取HTML对象ID相同的变量名,以减少错误;在声明变量时,一律加上var,以避免歧义.
6.const问题
说明:Firefox下,可以使用const关键字或var关键字来定义常量;IE下,只能使用var关键字来定义常量.
解决方法:统一使用var关键字来定义常量.
7.input.type属性问题
说明:IE下input.type属性为只读;但是Firefox下input.type属性为读写.
8.window.event问题
说明:window.event只能在IE下运行,而不能在Firefox下运行,这是因为Firefox的event只能在事件发生的现场使用. Firefox必须从源处加入event作参数传递。Ie忽略该参数,用window.event来读取该event。
解决方法:
IE&Firefox:
Submitted(event)"/> …
< script language="javascript">
function Submitted(evt) {
evt=evt?evtwindow.event?window.event:null);
}
script >
9.event.x与event.y问题
说明:IE下,even对象有x,y属性,但是没有pageX,pageY属性;Firefox下,even对象有pageX,pageY属性,但是没有x,y属性.
解决方法:使用mX(mX = event.x ? event.x : event.pageX;)来代替IE下的event.x或者Firefox下的event.pageX.
10.event.srcElement问题
说明:IE下,event对象有srcElement属性,但是没有target属性;Firefox下,even对象有target属性,但是没有srcElement属性.
解决方法:使用obj(obj = event.srcElement ?event.srcElement :event.target;)来代替IE下的event.srcElement或者Firefox下的event.target.请同时注意event的兼容性问题。
11.window.location.href问题
说明:IE或者Firefox2.0.x下,可以使用window.location或window.location.href;Firefox1.5.x下,只能使用window.location.
解决方法:使用window.location来代替window.location.href.
12.模态和非模态窗口问题
说明:IE下,可以通过showModalDialog和showModelessDialog打开模态和非模态窗口;Firefox下则不能.
解决方法:直接使用window.open(pageURL,name,parameters)方式打开新窗口。
如果需要将子窗口中的参数传递回父窗口,可以在子窗口中使用window.opener来访问父窗口. 例如:var parWin = window.opener;parWin.document.getElementById("Aqing").value = "Aqing";
13.frame问题
以下面的frame为例:
(1)访问frame对象: [ ie中返回的为object , ff中会显示具体的类型 比如: object window ]
IE:使用window.frameId或者window.frameName来访问这个frame对象. frameId和frameName可以同名。
Firefox:只能使用window.frameName来访问这个frame对象.
另外,在IE和Firefox中都可以使用window.document.getElementById("frameId")来访问这个frame对象.
(2)切换frame内容:
在IE和Firefox中都可以使用window.document.getElementById("testFrame").src = "xxx.html"或window.frameName.location = "xxx.html"来切换frame的内容.
如果需要将frame中的参数传回父窗口(注意不是opener,而是parent frame),可以在frme中使用parent来访问父窗口。例如:parent.document.form1.filename.value="Aqing";
14.body问题
Firefox的body在body标签没有被浏览器完全读入之前就存在;而IE的body则必须在body标签被浏览器完全读入之后才存在.
15. 事件委托方法
IE:document.body.onload = inject; //Function inject()在这之前已被实现
Firefox:document.body.onload = inject();
16. firefox与IE的父元素(parentElement)的区别
IE:obj.parentElement
firefox:obj.parentNode
解决方法: 因为firefox与IE都支持DOM,因此使用obj.parentNode是不错选择.
17.cursor:hand VS cursor:pointer
firefox不支持hand,但ie支持pointer
解决方法: 统一使用pointer
18.innerText在IE中能正常工作,但是innerText在FireFox中却不行. 需用textContent。
解决方法:
if(navigator.appName.indexOf("Explorer") > -1){
document.getElementById('element').innerText = "my text";
} else{
document.getElementById('element').textC;
}
19. FireFox中设置HTML标签的style时,所有位置性和字体尺寸的值必须后跟px。这个ie也是支持的。
20. ie,firefox以及其它浏览器对于 table 标签的操作都各不相同,在ie中不允许对table和tr的innerHTML赋值,使用js增加一个tr时,使用appendChild方法也不管用。
解决方法:
//向table追加一个空行:
var row = otable.insertRow(-1);
var cell = document.createElement("td");
cell.innerHTML = " ";
cell.className = "XXXX";
row.appendChild(cell);
21. padding 问题
padding 5px 4px 3px 1px FireFox无法解释简写,
必须改成 padding-top:5px; padding-right:4px; padding-bottom:3px; padding-left:1px;
22. 消除ul、ol等列表的缩进时
样式应写成st-style:none;margin:0px;padding:0px;
其中margin属性对IE有效,padding属性对FireFox有效
23. CSS透明
IE:filter:progidXImageTransform.Microsoft.Alpha(style=0,opacity=60)。
FF:opacity:0.6。
24. CSS圆角
IE:不支持圆角。
FF:-moz-border-radius:4px,或者-moz-border-radius-topleft:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-bottomright:4px;。
25. CSS双线凹凸边框
IE:border:2px outset;。
FF: -moz-border-top-colors: #d4d0c8white;-moz-border-left-colors: #d4d0c8white;-moz-border-right-colors404040#808080;-moz-border-bottom-colors404040 #808080;
26. 对select的options集合操作
枚举元素除了[]外,SelectName.options.item()也是可以的,另外SelectName.options.length,SelectName.options.add/remove都可以在两种浏览器上使用。注意在add后赋值元素,否则会失败(本人试验如此)。
27. XMLHTTP的区别
//mf
if (window.XMLHttpRequest) //mf
{
xmlhttp=new XMLHttpRequest()
xmlhttp.onreadystatechange=xmlhttpChange
xmlhttp.open("GET",url,true)
xmlhttp.send(null)
}
//ie
else if (window.ActiveXObject) // code for IE
{
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")
if (xmlhttp)
{
xmlhttp.onreadystatechange=xmlhttpChange
xmlhttp.open("GET",url,true)
xmlhttp.send()
}
}
}
28. innerHTML的区别
Firefox不支持innerHTML, 解决办法可以如下
rng = document.createRange();
el = document.getElementById(elementid);
rng.setStartBefore(el);
htmlFrag = rng.createContextualFragment(content);
while (el.hasChildNodes()) //清除原有内容,加入新内容
el.removeChild(el.lastChild);
el.appendChild(htmlFrag);
2009年11月19日
Window对象是客户端javascript最高层对象之一,只要打开浏览器窗口,不管该窗口中是否有打开的网页,当遇到BODY、FRAMESET或FRAME元素时,都会自动建立window对象的实例。另外,该对象的实例也可由window.open()方法创建。由于window对象是其它大部分对象的共同祖先,在调用window对象的方法和属性时,可以省略window对象的引用。例如:window.document.write()可以简写成: document.write()。 在窗口中觖发本窗口对象的任何方法和属性时可以省去窗口的实例名称。例如给当前的myWin窗口设置status属性时,可以只用status而不用myWin.status。但是,在事件处理中调用location属性、close()方法或open()方法时必须使用实例名称。
window对象有以下方法: open close alert confirm prompt setTimeout clearTimeout setInterval clearInterval moveBy moveTo resizeBy resizeTo scrollBy scrollTo find back forward home stop print blur focus captureEvent enableExternalCapture disableExternalCapture handleEvent releaseEvent routeEvent scroll
1. open方法 语法格式: window.open(URL,窗口名称,窗口风格) 功能:打开一个新的窗口,并在窗口中装载指定URL地址的网页。 说明: open方法用于打开一个新的浏览器窗口,并在新窗口中装入一个指定的URL地址; open方法在打开一个新的浏览器窗口时,还可以指定窗口的名称(第二个参数); open方法在打开一个新的浏览器窗口时,还可以指定窗口的风格(第三个参数), 窗口风格有以下选项,这些选项可以多选,如果多选,各选项之间用逗号分隔: toolbar:指定窗口是否有标准工具栏。当该选项的值为1或yes时,表示有标准工具栏,当该选项的值为0或no时,表示没有标准工具栏; location:指定窗口是否有地址工具栏,选项的值及含义与toolbar相同; directories:指定窗口是否有链接工具栏,选项的值及含义与toolbar相同; status:指定窗口是否有状态栏,选项的值及含义与toolbar相同; menubar:指定窗口是否有菜单,选项的值及含义与toolbar相同; scrollbar:指定当前窗口文档大于窗口时是否有滚动条,选项的值及含义与toolbar相同; resizable:指定窗口是否可改变大小,选项的值及含义与toolbar相同; width:以像素为单位指定窗口的宽度,已被innerWidth取代; height:以像素为单位指定窗口的高度,已被innerHeight取代; outerWidth:以像素为单位指定窗口的外部宽度; outerHeight:以像素为单位指定窗口的外部高度; left:以像素为单位指定窗口距屏幕左边的位置; top:以像素为单位指定窗口距屏幕顶端的位置; alwaysLowered:指定窗口隐藏在所有窗口之后,选项的值及含义与toolbar相同; alwaysRaised:指定窗口浮在所有窗口之上,选项的值及含义与toolbar相同; dependent:指定打开的窗口为当前窗口的一个子窗口,并随着父窗口的关闭而关闭,选项的值及含义与toolbar相同; hotkeys:在没有菜单栏的新窗口中设置安全退出的热键,选项的值及含义与toolbar相同; innerHeight:设定窗口中文档的像素高度; innerWidth:设定窗口中文档的像素宽度; screenX:设定窗口距离屏幕左边界的像素长度; screenY:设定窗口距离屏幕上边界的像素长度; titleBar:指明标题栏是否在新窗口中可见,选项的值及含义与toolbar相同; z-look:指明当窗口被激活时,不能浮在其它窗口之上,选项的值及含义与toolbar相同。 open方法返回的是该窗口的引用。 小技巧:该方法经常用于在打开一个网页时自动打开另一个窗口。 2. close方法 语法格式: window.close() 功能:close方法用于自动关闭浏览器窗口。 3. alert方法 语法格式: window.alert(提示字符串) 功能:弹出一个警告框,在警告框内显示提示字符串文本。 4. confirm方法 语法格式: window.confirm(提示字符串) 功能:显示一个确认框,在确认框内显示提示字符串,当用户单击“确定”按钮 时该方法返回true,单击“取消”时返回false。 5. prompt方法 语法格式: window.prompt(提示字符串,缺省文本) 功能:显示一个输入框,在输入框内显示提示字符串,在输入文本框显示缺省文 本,并等待用户输入,当用户单击“确定”按钮时,返回用户输入的字符串,当 单击“取消”按钮时,返回null值。 6. setTimeout方法 语法格式: window.setTimeout(代码字符表达式,毫秒数) 功能:定时设置,当到了指定的毫秒数后,自动执行代码字符表达式。 7. clearTimeout方法 语法格式: window.clearTimeout(定时器) 功能:取消以前的定时设置,其中的参数是用setTimeout设置时的返回值。 8. setInterval方法 语法格式: window.setInterval(代码字符表达式,毫秒数) 功能:设定一个时间间隔后(第二个参数),反复执行“代码字符表达式”的内容 9. clearInterval方法 语法格式: window.clearInterval(时间间隔器) 功能:取消setInterval设置的定时。其中的参数是setInterval方法的返回值。 10. moveBy方法 语法格式: window.moveBy(水平位移量,垂直位移量) 功能:按照给定像素参数移动指定窗口。第一个参数是窗口水平移动的像素,第 二个参数是窗口垂直移动的像素。 11.moveTo方法 语法格式: window.moveTo(x,y) 功能:将窗口移动到指定的指定坐标(x,y)处。 12. resizeBy方法 语法格式: window.resizeBy(水平,垂直) 功能:将当前窗口改变指定的大小(x,y),当x、y的值大于0时为扩大,小于0时 为缩小。 13. resizeTo方法 语法格式: window.resizeTo(水平宽度,垂直宽度) 功能:将当前窗口改变成(x,y)大小,x、y分别为宽度和高度。 14. scrollBy方法 语法格式: window.scrollBy(水平位移量,垂直位移量) 功能:将窗口中的内容按给定的位移量滚动。参数为正数时,正向滚动,否则反 向滚动。 15. scrollTo方法 语法格式: window.scrollTo(x,y) 功能:将窗口中的内容滚动到指定位置。 16.find方法 语法格式: window.find() 功能:当触发该方法时,将弹出一个“find”(查找)对话窗口,并允许用户在触 发find方法的页面中查找一个字符串。 注:该属性在IE5.5及Netscape6.0中都不支持。 17. back方法 语法格式: window.back() 功能:模拟用户点击浏览器上的“后退”按钮,将页面转到浏览器的上一页。 说明:仅当当前页面存在上一页时才能进行该操作。 注:IE5.5不支持该方法,Netscape6.0支持。 18. forward方法 语法格式: window.forward() 功能:模拟用户点击浏览器上的“前进”按钮,将页面转到浏览器的下一页。 说明:仅当当前页面存在下一页时才能进行该操作。 注:IE5.5不支持该方法,Netscape6.0支持。 19. home方法 语法格式: window.home() 功能:模拟用户点击浏览器上的“主页”按钮,将页面转到指定的页面上。 注:IE5.5不支持该方法,Netscape6.0支持。 20. stop方法 语法格式: window.stop() 功能:模拟用户点击浏览器上的“停止”按钮,终止浏览器的下载操作。 注:IE5.5不支持该方法,Netscape6.0支持。 21. print方法 语法格式: window.print() 功能:模拟用户点击浏览器上的“打印”按钮,通知浏览器打开打印对话框打印 当前页。 22. blur方法 语法格式: window.blur() 功能:从窗口中移出焦点。当与focus方法合用时必须小心,因为可能导致焦点 不断移进移出。 23. focus方法 语法格式: window.focus() 功能:使窗口中得到焦点。当与blur方法合用时必须小心,因为可能导致焦点不 断移进移出。 24. captureEvent方法 语法格式: window.captureEvent(Event) window.captureEvent(事件1|事件2|...|事件n) 功能:捕捉指定参数的所有事件。由于能够捕获哪些由本地程序自己处理的事件 ,所以程序员可以随意定义函数来处理事件。如果有多个事件需要捕捉,各事件 之间用管道符“|”隔开。可捕捉的事件类型如下: Event.ABORT Event.BLUR Event.CHANGE Event.CLICK Event.DBLCLICK Event.DRAGDROP Event.ERROR Event.FOCUS Event.KEYDOWN Event.KEYPRESS Event.KEYUP Event.LOAD Event.MOUSEDOWN Event.MOUSUEMOVE Event.MOUSEOUT Event.MOUSEOVER Event.MOUSEUP Event.MOVE Event.RESET Event.RESIZE Event.SELECT Event.SUBMIT Event.UNLOAD 25. enableExternalCapture事件 语法格式: window.enableExternalCapture(event) 功能:enableExternalCapture方法用于捕捉通过参数传入的外部事件。 26. disableExternalCapture事件 语法格式: window.disableExternalCapture() 功能:取消enableExternalCapture方法的设置,终止对外部事件的捕捉。 27. handleEvent事件 语法格式: window.handleEvent(event) 功能:触发指定事件的事件处理器。 28. releaseEvent事件 语法格式: window.releaseEvent(event) window.releaseEvent(事件1|事件2|...|事件n) 功能:释放通过参数传入的已被捕捉的事件,这些事件是由 window.captureEvent方法设置的,可释放的事件与captureEvent相同。 29. routeEvent事件 语法格式: window.releaseEvent(event) 功能:把被捕捉类型的所有事件转交给标准事件处理方法进行处理,可转交的事 件与captureEvent相同。 30 scroll事件 语法格式: window.scroll(X坐标,Y坐标) 功能:将窗口移动到指定的坐标位置。
window对象具有如下属性: status statusbar statusbar.visible defaultstatus location locationbar locationbar.visible self name closed frames frames.length length document history innerHeight innerWidth menubar menubar.visible opener outerHeight outerWidth pageXOffset pageYOffset parent personalbar personalbar.visible scrollbar scrollbar.visible toolbar toolbar.visible top 1. status属性 语法格式: window.status=字符串 功能:设置或给出浏览器窗口中状态栏的当前显示信息。 小技巧:可以使用该属性设置浏览器窗口状态栏信息。 2. statusbar属性 语法格式: window.statusbar.属性 功能:statusbar属性本身也是一个对象,用于访问它自已的visible属性从而确 定状态栏是否可见。 注:IE5.5浏览器不支持该属性。 3. statusbar.visible属性 语法格式: window.statusbar.visible 功能:检查状态栏是否可见,如果可见则返回true,反之返回false。 注:IE5.5浏览器不支持该属性。 4. defaultstatus属性 语法格式: window.defaultstatus[=字符串] 功能:defaultstatus属性值是浏览器窗中状态栏的默认显示信息。 5.location属性 语法格式: window.location=URL 功能:给出当前窗口的URL信息或指定打开窗口的URL。 6. locationbar属性 语法格式: window.locationbar.属性 功能:locationbar属性也可以看成是一个子对象,这个属性用来获取它自已的 visible属性来确定位置栏是否可见。 到目前为止,该属性只有一个子属性:visible。 注:IE5.5不支持该属性。 7. locationbar.visible属性 语法格式: window.locationbar.visible 功能:返回位置栏是否可见,如果可见返回true,反之返回false。 注:IE5.5不支持该属性。 8. self属性 语法格式: window.self.方法 window.self.属性 功能:该属性包含当前窗口的标志,利用这个属性,可以保证在多个窗口被打开 的情况下,正确调用当前窗口内的函数或属性而不会发生混乱。 9. name属性 语法格式: window.name=名称 功能:返回窗口名称,这个名称是由window.open()方法创建新窗口时给定的。 在javascript1.0版本中,这个属性只能用于读取窗口名称,而到了 javascript1.1版本时,可以用这个属性给一个不是用window.open()方法创建的 窗口指定一个名称。 10. closed属性 语法格式: window.closed 功能:closed属性用于返回指定窗口的实例是否已经关闭,如果关闭,返回true ,反之返回flase。 11. frames属性 语法格式: window.frames["框架名称"] window.frames[数值] 功能:frames属性是一个数组,用来存储文档中每一个由元素创建的子窗口(框 架)实例,其中的下标即可以是次序号也可以是用FRAME元素的NAME属性指定的名 称来得到并使用。 12. frames.length属性 语法格式: window.frames.length 功能:frames.length属性用于给出文档中子窗口(框架)实例的个数。 13. length属性 语法格式: window.length 功能:length属性返回一个窗口内的子窗口数目,该属性与 window.frame.length属性的值相同。 14. document属性 语法格式: window.document.事件 window.document.方法 window.document.属性 功能:window对象的子对象document是javascript的核心对象,在脚本中遇到 BODY元素时创建一个实例。 15. history属性 语法格式: window.history[数值] window.history.方法() window.history.属性 window对象的子对象history是javascript的核心对象之一,该属性包含了一个 已访问过页面的名称和URL的数组。 16. innerHeight属性 语法格式: window.innerHeight=数值 功能:返回或指定浏览器窗口中文档的像素高度,这个高度不包括任何工具栏和 组成窗口的页面修饰高度。 注:IE5.5不支持该属性。 17. innerWidth属性 语法格式: window.innerHeight=数值 功能:返回或指定浏览器窗口中文档的像素宽度,这个宽度不包括任何工具栏和 组成窗口的页面修饰宽度。 注:IE5.5不支持该属性。 18. menubar属性 语法格式: window.menubar.属性 功能:menubar属性也可以看成是一个子对象,这个属性用来获取它自已的 visible属性来确定菜单栏是否可见。 到目前为止,该属性只有一个子属性:visible。 注:IE5.5不支持该属性。 19. menubar.visible属性 语法格式: window.menubar.visible 功能:menubar.visible属性用于返回菜单栏是否可见,如果可见返回true,反 之返回false。 注:IE5.5不支持该属性。 20. opener属性 语法格式: window.opener window.opener.方法 window.opener.属性 功能:opener属性与打开该窗口的父窗口相联系,当访问子窗口中operer属性时 ,返回的是父窗口。通过该属性,可以使用父窗口对象中的方法和属性。 21. outerHeight属性 语法格式: window.outerHeight 功能:outerHeight属性用于访问浏览器窗口的像素高度,该高度包括工具栏和 装饰边的高度。 注:IE5.5不支持该属性。 22. outerWidth属性 语法格式: window.outerWidth 功能:outerWidth属性用于访问浏览器窗口的像素宽度,该宽度包括工具栏和装 饰边的宽度。 注:IE5.5不支持该属性。 23. pageXOffset属性 语法格式: window.pageXOffset=数值 功能:指定浏览器窗口中文档左上角在窗口中的当前水平像素位置。在利用 moveTo移动之前,可以通过该属性来决定是否需要移动窗口。因为该属性返回了 可见文档相对整个页面的当前位置。 注:IE5.5不支持该属性。 24. pageYOffset属性 语法格式: window.pageYOffset=数值 功能:指定浏览器窗口中文档左上角在窗口中的当前垂直像素位置。在利用 moveTo移动之前,可以通过该属性来决定是否需要移动窗口。因为该属性返回了 可见文档相对整个页面的当前位置。 注:IE5.5不支持该属性。 25. parent属性 语法格式: window.parent.frames[数值] window.parent.framesName 功能:访问各个子窗口(多框架)所在的父窗口。 26. personalbar属性 语法格式: window.personalbar.属性 功能:personalbar属性本身也是一个对象,用于访问其自身的visible属性来确 定个人栏是否可见。 注:IE5.5不支持该属性。 27. personalbar.visible属性 语法格式: window.personalbar.visible 功能:确定个人栏是否可见,如果可见则返回true,反之返回false。 注:IE5.5不支持该属性。 28. scrollbars属性 语法格式: window.scrollbars.属性 功能:scrollbars属性本身也是一个对象,用于访问其自身的visible属性来确 定滚动栏是否可见。 注:IE5.5不支持该属性。 29. scrollbars.visible属性 语法格式: window.scrollbars.visible 功能:scrollbars.visible用于确定滚动栏是否可见,如果可见则返回true,反 之返回false。 注:IE5.5不支持该属性。 30. toolbar属性 语法格式: window.toolbar.属性 功能:toolbar属性本身也是一个对象,用于访问它自已的visible属性从而确定 工具栏是否可见。 注:IE5.5不支持该属性。 31. toolbar.visible属性 语法格式: window.toolbar.visible 功能:toolbar.visible属性用于检查工具栏是否可见,如果可见则返回true, 反之返回false。 注:IE5.5不支持该属性。 32. top属性 语法格式: window.top.frames[数值] window.top.frameName window.top.方法() window.top.属性 功能:window对象的top属性用于包含所有装入浏览器的子窗口(多框架)的最顶层窗口的信息。
2009年11月11日
This is the first day of MyBlog. HOHO~~
Hope to have fun and enjoy myself here in this place.
Till now it's all going fine and it's a nice try.
I also want to thank CCTV,BTV,MTV and of course,the men in charge of cnitblog for giving the home for me and everyone here.
Ok, what can i do in the following second ?
Go and see~
|