发布新日志

  • IT中常用英文简写

    2009-05-26 13:46:01

    1.RIAs :rich internet applications
    2. IDE :a、 Integrated Development Envirnoment(集成开发环境),集成了代码 编辑器、编译器、调试器等与开发有关的实用工具的软件。
                  b、Integrated   Device   Electronics ,一种磁盘驱动器的接口类型。
    3. JDK:Java Development Kit (java 开发包)
    4. SDK : Software Development Kit (软件开发包)
    5. JRE: Java Runtime Environment (java 运行环境)
    6.API : a. Application Programming Interface (应用程序编程接口);b. Advanced Programmers Interface (高级程序员接口)
    7. GUI : Graphical User Interface 
    8. JNLP : Java Network Launching Protocol (java网络加载协议)
    9. QTP : Quick Test Professional
    10. awt:Abstract Windowing Toolkit 的缩写 意思是:Java抽象窗口工具。java.awt.
    11. swing :
    12.
     JFC: Java Foundation Classes
        JFC(全称为“Java Foundation Classes”,中文译为“爪哇基础类别”)是一个图形框架(Graphical Framework),依据此框架可建构出具有移携性(Portable)的Java式GUI图形式使用者介面。
      JFC主要是由AWTAbstract Window Toolkit(AWT)、Swing以及Java 2D三者所构成,若将这些一同搭配运用,则用Java程式语言撰写开发成的使用者介面,无论移转、转移到Microsoft WindowsWindows、Mac OS X或Linux等各种不同的作业平台上,都能保有一致性的图像呈现。
      AWT是比较旧的双介面函式库,它依然高度倚赖各作业平台自身所具备的绘图功效机能,且用一个 比包容程式(Wrapper)还小的设计还去除、吸收各作业平台间的绘图功能机能差异,以致Java程式在跨平台移携后的绘图呈现不够一致,这使得AWT 遭受到重度的批评。这意味着:AWT的Widget倚赖作业平台自身原有的Widget功效机能,程式设计师在开发撰写时必须去了解各作业平台在 Widget方面的差异性,如此便偏离了Java程式语言最初的宗旨:跨平台一致性。
      另外有一种可替用的图形函式库,即是由网景通讯公司Netscape公司所发展的 “Internet Foundation Classes,简称:IFC”,IFC的平台独立性就高于AWT,之后升阳电脑将IFC再搭配其他技术,以此形成了Swing,Swing新增了一个具 加挂性(Pluggable)、即“看即了的Widget”,运用Swing可让Java程式码保有过往以来所秉持强调的平台独立性,且在图形呈现与视觉 观感上几乎与原生性应用程式没有差别。
      关连项目: SWTStandard Widget Toolkit
      http://java.sun.com/products/jfc/ 升阳电脑:JFC官方网站
  • JavaFx

    2009-05-26 13:37:48

    http://developers.sun.com.cn/javafx/index.jsp
  • apple 的简单使用

    2009-05-21 15:55:41

    请看这个网页中的视频:
    http://www.apple.com/mac/

    http://www.apple.com/findouthow/mac/
  • Java异常处理的特殊情况

    2009-05-21 15:21:45

    1、不能在finally块中执行return,continue等语句,否则会把异常“吃掉”;

      2、在try,catch中如果有return语句,则在执行return之前先执行finally块

      请大家仔细看下面的例子:
    以下是引用片段:
    public class TryTest {  
        public static void main(String[] args) {  
            try {  
                System.out.println(TryTest.test());// 返回结果为true其没有任何异常  
            } catch (Exception e) {  
                System.out.println("Exception from main");  
                e.printStackTrace();  
            }  
            doThings(0);  
        }  
      
        public static boolean test() throws Exception {  
            try {  
                throw new Exception("Something error");// 第1步.抛出异常  
            } catch (Exception e) {// 第2步.捕获的异常匹配(声明类或其父类),进入控制块  
                System.out.println("Exception from e");// 第3步.打印

                return false;// 第5步. return前控制转移到finally块,执行完后再返回(这一步被吃掉了,不执行)  
            } finally {  
                return true; // 第4步. 控制转移,直接返回,吃掉了异常  
            }  
        }  
          
        public static void doThings(int i)  
        {  
         try  
         {  
          if(i==0)  
          {  
           //在执行return之前会先执行finally  
           return;  
          }  
          int t=100/i;  
          System.out.println(t);  
         }catch(Exception ex)  
         {  
          ex.printStackTrace();  
         }  
         finally  
         {  
          System.out.println("finally");  
         }  
        }  
    }

  • 面向过程与面向对象的区别

    2009-05-21 15:09:08

    两种方法都是编程中的比较常用的方法,从理论上来说,都能达到用计算机程序来解决实际问题的目的,

    只不过是其中所体现出来的思想不一样而已。


    面向过程:面向过程的思想是把一个项目、一件事情按照一定的顺序,从头到尾一步一步地做下去,先做

    什么,后做什么,一直到结束。这种思想比较好理解,其实这也是一个人做事的方法。


    面向对象:面向对象的思想是把一个项目、一件事情分成更小的项目,或者说分成一个个更小的部分,每

    一部分负责什么方面的功能,最后再由这些部分组合而成为一个整体。这种思想比较适合多人的分工合作

    ,就像一个大的机关,分成各个部门,每个部门分别负责某样职能,各个部门可以充分发挥自己的特色,

    只要符合一定前提就行了。


    举例说明1:比如刚才说的一个大的机关,要做某一个项目,从面向过程的思想来说,应该是这样分析的

    ,先怎么样,再怎么样,最后怎么样。第一样应该如何完成,第二样应该如何完成等等。等到每一步骤都

    完成,项目也就完成了。而面向对象的思想则应该是这样想的,这个项目是由几个部分组成的,我们就做

    好分工,成立一个部门来做一个部分的功能,另一个部门来做另一个部分。各个部门可以不用理解其他部

    门的事,只要完成自己那一部分的事情就OK了。


    举例说明2:又比如我们有一台演出,为简单起见,假设有如下流程:主持人开场——演员一表演——演

    员二表演——主持人总结。用面向过程的思想来分析,就是先完成主持人开场,再完成演员一的表演,再

    完成演员二的表演,最后完成主持人的总结。而如果用面向对象的思想来分析,就应该是这样的。这个演

    出由两大部分组成:主持人、演员。与主持人相关的:开场、总结。与演员相关的:演员编号、所演的节

    目。然后这台演出就可以这样策划:需要一个主持人a,需要两个演员b、c。演出的事情可以表示为:a的

    开场——> b、c的编号和节目——> a的总结。



  • J2SE简介

    2009-05-21 15:03:04

    多数编程语言都有预选编译好的类库以支持各种特定的功能,在Java中,类库以包(package)的形式提供,不同版本的Java提供不同的包,以面向特定的应用。

    Java2平台包括:标准版(J2SE)、企业版(J2EE)和微缩版(J2ME)三个版本。J2SE,J2ME和J2EE,这也就是SunONE(Open NetEnvironment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。

    Standard Edition(标准版) J2SE 包含那些构成Java语言核心的类。比如:数据库连接、接口定义、输入/输出、网络编程

    Enterprise Edition(企业版) J2EE 包含J2SE 中的类,并且还包含用于开发企业级应用的类。比如:EJB、servlet、JSP、XML、事务控制

    Micro Edition(微缩版) J2ME 包含J2SE中一部分类,用于消费类电子产品的软件开发。比如:呼机、智能卡、手机、PDA、机顶盒

    简单讲就是:

    j2se java 2 simple edtion 小型程序用

    j2ee java 2 enterprise edtion 大型程序用

    j2me java 2 micro editon 手机上用

    他们的范围是:J2SE包含于J2EE中,J2ME包含了J2SE的核心类,但新添加了一些专有类

    应用场合,API的覆盖范围各不相同。

    笼统的讲,可以这样理解:J2SE是基础;压缩一点,再增加一些CLDC等方面的特性就是J2ME;扩充一点,再增加一些EJB等企业应用方面的特性就是J2EE。

    补充一点J2EE更恰当的说,应该是JAVA2企业开发的技术规范,不仅仅是比标准版多了一些类。J2EE又包括许多组件,如Jsp, Servlet, JavaBean, EJB, JDBC, JavaMail等。

  • 实战[jnlp]权限

    2009-05-21 14:54:47

    第一次要用jnlp就闹出了不少问题,真郁闷了老长时间.
         苦战baidu,终于左弄右弄被我驯服了.
         problem.1
         第一次试jnlp就出现了错误,那个错误报什么忘了,反正要是使用jnlp调用的jar程序不需要对本地系统上的文件做读写操作时候就把
    <security>

    <all-permissions/>

    </security>
    这三行代码去掉就行了.
         problem.2
         真正难题就是这个,当jnlp调用的jar程序需要对本地系统的文件做读写操作的时候就需要做如下的步骤(我知道的解决方法):
    说明,我用jnlp调用的文件名为:myreport.jar
    (1)为jar文件签名.
    先cd到myreport.jar所在的目录
    执行:
    keytool -genkey -keystore fox.report -alias fox

    接下来它会问一些问题包括keystore的密码,key的密码等,如下所示:

    输入keystore密码: 123456

    您的名字与姓氏是什么?

    [Unknown]: jingle

    您的组织单位名称是什么?

    [Unknown]: nankai

    您的组织名称是什么?

    [Unknown]: c2

    您所在的城市或区域名称是什么?

    [Unknown]: tj

    您所在的州或省份名称是什么?

    [Unknown]: tj

    该单位的两字母国家代码是什么

    [Unknown]: CN

    CN=jingle, U=nankai, O=c2, L=tj, ST=tj, C=CN 正确吗?

    [否]: y

    输入<mykey>的主密码

             (如果和 keystore 密码相同,按回车): keypass



    执行:

    keytool -export -keystore fox.report -alias fox -file fox.cer

    接下来它会要求你输入keystore密码:,如下所示:

    输入keystore密码: 123456

    保存在文件中的认证<fox.cer>



    执行:

    jarsigner -keystore fox.report myreport.jar fox

    跟着提示你输入密码:

    Enter Passphrase for keystore: 123456

    Warning: The signer certificate will expire within six months.

    /*****    签证完成 *****/

    运行上面程序所生成的文件都放到和jar的同一级目录里面,我做的时候多点击了那个fox.cer签证,把签证加入了系统.

    (2)修改客户端 policy文件,开方权限.

    更改${JAVA_HOME}/jre1.5.0/lib/security/java.policy

    和${JAVA_HOME}/jdk1.5.0/jre/lib/security/java.policy

    (至于是不是两个文件都得改,我就不试了)



    grant {

    }

    代码里面加入需要的权限代码,

    对应我所做的jar需要提供如下的权限,

    // MODIFY fox add

    permission java.io.FilePermission "<<ALL FILES>>", "read";

    permission java.util.PropertyPermission "user.dir","read,write";

    permission java.util.PropertyPermission "user.home","read,write";

    permission java.util.PropertyPermission "mrj.version","read";

    具体要提供什么权限,可以根据所保的access denied来加.

    permission java.io.FilePermission "<<ALL FILES>>", "read";

    话应该都需要.



    (3)修改*.jnlp文件.

    这次就得加上权限了,三句话:

    <security>

    <all-permissions/>

    </security>

    over,这样就ok了.

    /************ 记录下这次的文件 **************/

    my.jnlp



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

    <jnlp spec="1.0+" codebase="http://localhost:8081/upload" href="my.jnlp">

    <information>

    <title>Fox jnlp</title>

    <vendor>XXX Corporation</vendor>

    <description>MyIE just demo how to program with jnlp.</description>

    <homepage href="http://localhost:8081" />

    <icon href="./../images/rookie.gif"/>

    <icon kind="splash" href="./../images/logo.gif"/>

    <offline-allowed/> 

    <security>

    <all-permissions/>

    </security>

    </information>

    <resources>

    <j2se version="1.3+"/>

    <jar href="finerreport.jar"/>

    </resources>

    <application-desc main-class="com.vanda.report.ZDesigner"/>

    </jnlp>



    java.policy



    // Standard extensions get all permissions by default

    grant codeBase "file:${{java.ext.dirs}}/*" {

    permission java.security.AllPermission;

    };

    // default permissions granted to all domains

    grant { 

    // Allows any thread to stop itself using the java.lang.Thread.stop()

    // method that takes no argument.

    // Note that this permission is granted by default only to remain

    // backwards compatible.

    // It is strongly recommended that you either remove this permission

    // from this policy file or further restrict it to code sources

    // that you specify, because Thread.stop() is potentially unsafe.

    // See "http://java.sun.com/notes" for more information.

    permission java.lang.RuntimePermission "stopThread";

    // allows anyone to listen on un-privileged ports

    permission java.net.SocketPermission "localhost:1024-", "listen";

    // "standard" properies that can be read by anyone

    permission java.util.PropertyPermission "java.version", "read";

    permission java.util.PropertyPermission "java.vendor", "read";

    permission java.util.PropertyPermission "java.vendor.url", "read";

    permission java.util.PropertyPermission "java.class.version", "read";

    permission java.util.PropertyPermission "os.name", "read";

    permission java.util.PropertyPermission "os.version", "read";

    permission java.util.PropertyPermission "os.arch", "read";

    permission java.util.PropertyPermission "file.separator", "read";

    permission java.util.PropertyPermission "path.separator", "read";

    permission java.util.PropertyPermission "line.separator", "read";



    // MODIFY fox add

    permission java.io.FilePermission "<<ALL FILES>>", "read";

    permission java.util.PropertyPermission "user.dir","read,write";

    permission java.util.PropertyPermission "user.home","read,write";

        permission java.util.PropertyPermission "mrj.version","read";

    permission java.util.PropertyPermission "java.specification.version", "read";

    permission java.util.PropertyPermission "java.specification.vendor", "read";

    permission java.util.PropertyPermission "java.specification.name", "read";

    permission java.util.PropertyPermission "java.vm.specification.version", "read";

    permission java.util.PropertyPermission "java.vm.specification.vendor", "read";

    permission java.util.PropertyPermission "java.vm.specification.name", "read";

    permission java.util.PropertyPermission "java.vm.version", "read";

    permission java.util.PropertyPermission "java.vm.vendor", "read";

    permission java.util.PropertyPermission "java.vm.name", "read";

    };



    在动态生成jnlp的问题上.要是用struts框架,需要在action上这样处理:

    (如果tomcat版本老还得去配置conf/web.xml,加上

    <mime-mapping>

    <extension>jnlp</extension>

    <mime-type>application/x-java-jnlp-file</mime-type>

    </mime-mapping>)



    PrintWriter ut = response.getWriter();

         response.setContentType("application/x-java-jnlp-file");

         out.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");

         out.println("<jnlp spec=\"1.0+\" codebase=\"http://localhost\" href=\"report/jnlp/openFile.do\">");

         out.println("<information>");

         out.println("<title>JNLP</title>");

         out.println("<vendor>Hust</vendor>");

         out.println("<homepage href=\"\"/>");

         out.println("<description>Web Start</description>");

         out.println("</information>");

         out.println("<security>");

         out.println("</security>");

         out.println("<resources>");

         out.println("<j2se version=\"1.3+\"/>");

         out.println("<jar href=\"finereport.jar\"/>");

         out.println("</resources>");

         out.println("<application-desc main-class=\"com.vanda.report.ZDesigner\">");

         out.println("</application-desc>");

         out.println("</jnlp>");

    out.flush();
  • Java网络加载协议(JNLP)及Java Web Start

    2009-05-21 14:45:51

    在java开发的早期,重点被放在了客户端开发。语言中对于applet和安全下载的支持
    对于万维网(WWW)的发布看上去是个不错的主意。但是现实是java最大的成功在于服务器端,java的强大功能和适应性赢得了服务器端开发者的心。同时,客户端的开发落后了。棘手的开发问题限制了applet的效用,开发者被迫转向基于浏览器的瘦客户端。

    Java Network Launching Protocol (JNLP,java网络加载协议) 承诺改变这个现状。通过JCP(Java Community Process)的JSR-56的开发,
    JNLP解决了很多先前用java开发针对客户端的功能的问题。一个JNLP客户端是一个应用程序或者说服务,它可以从宿主于网络的资源中加载应用程序。如果你使用JNLP打包一个应用程序,那么一个JNLP客户端能够:

    o 为该应用探测,安装并且使用正确版本的JRE(java运行时环境)
    o 从浏览器或者桌面加载应用程序
    o 当新版本的应用出现时自动下载最新的版本。
    o 为了加速启动速度在本机缓存应用程序需要的类
    o 可以作为applet或者应用程序运行
    o 在必要的情况下下载原始的库
    o 以安全的方式使用诸如文件系统这样的本机资源
    o 自动定位和加载外部依赖资源

    Sun 提供了一个实现JNLP的称为Java Web Start(JWS)的参考实现。让我们使用它开发一个使用JFC Swing的简单应用。为了做这个,你需要从http://java.sun.com/products/javawebstart下载JWS。(译者注:JDK的新版本JDK1.4已经内置JWS,无须另外下载。)

    下面是应用程序的代码:

    //File HelloJNLP.java
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;

    public class HelloJNLP extends JFrame. {
       public HelloJNLP() {
         super("Hello JNLP");
         String loadedFrom = this.getClass().getClassLoader().toString();
         JLabel jl = new JLabel("loaded by " + loadedFrom);
         JEditorPane jtp = new JEditorPane("text/plain", 
                                                       "Edit this text");
         getContentPane().add(jl, BorderLayout.NORTH);
         getContentPane().add(jtp, BorderLayout.CENTER);
       }

       public static void main(String [] args) {
         JFrame. f = new HelloJNLP();
         f.setBounds(100,100,325,250);
         f.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
         f.setVisible(true);
         f.addWindowListener(new WindowAdapter() {
           public void windowClosed(WindowEvent e) {
             System.out.println("Shutting down...");
             System.exit(0);
           }
         });
       }
    }

    JNLP的核心是一个发布清单(deployment manifest)。它是一个使用.jnlp做
    扩展名的XML文件(JNLP规范简单的称之为"JNLP 文件")。要发布HelloJNLP,你需要在JNLP文件中描述它,就像下面这样:

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- file Hello.jnlp -->
    <jnlp codebase="http://staff.develop.com/halloway/TechTips/May2001"
    href="http://staff.develop.com/halloway/TechTips/May2001/Hello.jnlp">
             <information>
         <title>Hello</title>
         <vendor>Tech Tips Sample May 2001</vendor>
         <icon href="HelloJNLP.jpg"/>
       </information>
       <resources>
         <j2se version="1.2+"/>
         <jar href="HelloJNLP.jar"/>
       </resources>
       <application-desc main-class="HelloJNLP"/>
    </jnlp>

    这个清单包含客户端需要下载和使用HelloJNLP的所有信息:

    o jnlp元素的codebase属性指出搜索应用程序资源的顶级URL。
    o information元素指出一个JNLP用户接口可以显示给客户端的信息。
    o j2se元素指出客户端必须有1.2版本或者更新的J2SE(tm)。(这是对于applet开发的一个大的提高,因为它常常受限于浏览器提供的VM(虚拟机)) 
    o jar元素指出程序的JAR文件的相对于jnlp codebase位置。
    o application-desc元素指出要运行的类。你可以添加子元素用以指定命令行参数或者系统属性。

    要将这个应用程序发布给一个web服务器,你需要执行以下的步骤:

    1. 修改jnlp的codebase和hrefURL为你自己的web服务器的合适的URL。
        
    2. 将JNLP文件发布到web服务器。

    3. 编译并打包HelloJNLP.java并发布到web服务器。例如:
       
        jar cvf HelloJNLP.jar HelloJNLP.class HelloJNLP$1.class
       
    4. 创建一个图标HelloJNLP.jpg并将之安装在web服务器上。你可以使用
       http://staff.develop.com/halloway/TechTips/May2001/HelloJNLP.jpg
       
    5. 设置你的web服务器的mime-type关联:.jnlp映射到mime-type application/x-java-jnlp-file。例如,对于Apache,添加如下一行到mime.types:
       
        application/x-java-jnlp-file     jnlp
       
        重新启动web服务器。

    从客户端执行那个应用程序,首先确认你已经安装了JWS。然后简单的在浏览器中指向该jnlp文件。JWS客户端将下载该jnlp文件,下载必要的 资源,加载应用程序。你所看到的将是在一个编辑区中显示的文本"Edit this text" 。如果你在配置web服务器上有问题或者不能使用web服务器,你可以从
    http://staff.develop.com/halloway/TechTips/May2001/Hello.jnlp
    加载这个程序。

    注意HelloJNLP不是作为一个applet运行在浏览器中,而是作为一个独立的应用程序。

    当你关闭程序时,HelloJNLP使用System.out打印消息"Shutting down...",然而没有控制台可见。控制台是JWS的诸多设置中缺省设置为"off"的其中一个。这是你可以修改的一对设置中的一个值,就像下面这样:

    1. 编辑JWS安装目录中的javaws.cfg文件。添加一行"javaws.cfg.forceUpdate=true"。
    这会导致JWS在启动应用程序前自动检查更新的版本。
       
    2. 运行JWS。使用菜单File->Preferences,进入Advanced标签并且选择"Show Java Console"。(由于JDK1.4中的本机化,JWS将显示中文的界面,所以此处的因为被自动显示为对应的中文)同意,选择"Log Output"将日志输出到你选择的文件。当你在调试时并且需要捕获System.out和System.err时是非常有用的。

    HelloJNLP显示一个编辑器,但是编辑器的内容在你关闭程序后将丢失。将下面的代码添加到HelloJNLP.java会自动的将编辑器的状态存储到客户端的硬盘上:

    //changes to HelloJNLP.java
    import java.io.*;
    import java.net.*;
    import javax.jnlp.*;

       //replace the constructor with this new version:  
       JEditorPane jtp;
       public HelloJNLP() {
         super("Hello JNLP, Second Version");
         String loadedFrom = this.getClass().getClassLoader().toString();
         JLabel jl = new JLabel("loaded by " + loadedFrom);
         jtp = new JEditorPane("text/plain", "Edit this text");
         readEditorContents();
         getContentPane().add(jl, BorderLayout.NORTH);
         getContentPane().add(jtp, BorderLayout.CENTER);

         addWindowListener(new WindowAdapter() {
             public void windowClosed(WindowEvent e) {
               System.out.println("Shutting down...");
               try {
                 writeEditorContents();
               }
               catch (Exception ex) {
                 System.out.println("Yoinks!");
                 ex.printStackTrace();
               }
               System.exit(0);
             }
           });
       }

       //add these helper methods
       private void writeEditorContents() throws 
                     UnavailableServiceException, IOException {
           System.out.println("writeEditorContents");
         PersistenceService ps = (PersistenceService) 
           ServiceManager.lookup("javax.jnlp.PersistenceService");
         BasicService bs = (BasicService)
           ServiceManager.lookup("javax.jnlp.BasicService");
         URL baseURL = bs.getCodeBase();
         System.out.println("CodeBase was " + baseURL);
         URL editorURL = new URL(baseURL, "Editor");
         try {
           ps.create(editorURL, 1024);
         }
         catch (Exception e) {
           e.printStackTrace();
         }
         FileContents fc = ps.get(editorURL);
         DataOutputStream s = new DataOutputStream(
                                      fc.getOutputStream(false));
         String s = jtp.getText();
         os.writeUTF(s);
         os.flush();
         os.close();
       }

       private void readEditorContents() {
         try {
           PersistenceService ps = (PersistenceService) 
             ServiceManager.lookup("javax.jnlp.PersistenceService");
           BasicService bs = (BasicService)
             ServiceManager.lookup("javax.jnlp.BasicService");
           URL baseURL = bs.getCodeBase();
           URL editorURL = new URL(baseURL, "Editor");
           FileContents fc = ps.get(editorURL);
           DataInputStream is = new DataInputStream(fc.getInputStream());
           jtp.setText(is.readUTF());
           is.close();
         }
         catch (Exception e) {
           e.printStackTrace();
         }
       }

    (译者注:正常编译需要在CLASSPATH中添加javaws.jar的路径,在windows下为C:\Program Files\Java Web Start目录下)
    JNLP API定义了一套的服务用以绕过安全沙盒使得一些通常的客户端操作可以使用。
    在writeEditorContents方法中,BasicService查找应用程序的代码目录,然后
    PersistenceService将编辑区的内容缓存在本机硬盘上,这些内容被键入到一个和应用程序目录相对的URL下。 PersistenceService提供的名字/值对数据和浏览器的cookies很相似。JWS通过一对被称为"muffins"的东西实现了这 个,muffins不时候用来存储大数据,他们应该用于在客户端缓存小的标识符。然后这些标识符能被用于在服务器上定位大的信息。

    在web服务器上重新发布修改过的应用程序,然后试着从客户端运行它--依然通过URL。如果你没有web服务器,你可以从
    http://staff.develop.com/halloway/TechTips/May2001/Hello2.jnlp 运行这个新版本。JWS自动探测程序被改变并运行新的版本。你可以通过检查标题条的字符串来证实这点,它现在将显示"Hello JNLP,Second Version." 修改编辑区的内容,然后关闭它。当你再次加载该程序时,你的改变会出现。(当你第一次运行新版的程序时你会在控制台看到一个异常,这是因为 readEditorContents 第一次不能找到muffin。)
    (译者注:实际上第一次运行时出现的异常导致程序无法正常结束,从而使得编辑区的内容无法写入客户端,下次运行时也相当于第一次运行。即此程序无法展示文章的特性,可能是于笔者的JWS的版本有关,笔者使用的是最新的1.0.1_02(build b03))
    JNLP提供了比这里演示的更多的服务。例如,你可以:

    o 很好的控制程序如何被下载
    o 描述各个JAR之间的依赖关系
    o 下载并运行本机代码安装程序
    o 对签名的代码授予附件的权限
    o 请求指定版本的程序或者applet

    要了解更多有关JNLP的情况,请到
    http://java.sun.com/products/javawebstart/download-spec.html
    下载JNLP规范。

    要了解更多JWS的情况,请参考http://java.sun.com/products/javawebstart/
  • JNLP

    2009-05-21 11:49:14

           在java开发的早期,重点被放在了客户端开发。语言中对于applet和安全下载的支持对于万维网(WWW)的发布看上去是个不错的主意。但是现实是java最大的成功在于服务器端,java的强大功能和适应性赢得了服务器端开发者的心。同时,客户端的开发落后了。棘手的开发问题限制了applet的效用,开发者被迫转向基于浏览器的瘦客户端。 
      Java Network Launching Protocol (JNLP,java网络加载协议) 承诺改变这个现状。通过JCP(Java Community Process)的JSR-56的开发, JNLP解决了很多先前用java开发针对客户端的功能的问题。一个JNLP客户端是一个应用程序或者说服务,它可以从宿主于网络的资源中加载应用程序。如果你使用JNLP打包一个应用程序,那么一个JNLP客户端能够: 
      o 为该应用探测,安装并且使用正确版本的JRE(java运行时环境)
           o 从浏览器或者桌面加载应用程序
           o 当新版本的应用出现时自动下载最新的版本。
           o 为了加速启动速度在本机缓存应用程序需要的类 
           o 可以作为applet或者应用程序运行 
           o 在必要的情况下下载原始的库 
           o 以安全的方式使用诸如文件系统这样的本机资源
           o 自动定位和加载外部依赖资源.

     一。jnlp是什么?是java提供的一种让你可以通过浏览器直接执行java应用程序的途径,它使你可以直接通过一个网页上的url连接打开一个 java应 用程序.好处就不用说了,如果你的java应用程序以jnlp 的方式发布,如果版本升级后,不需要再向所有用户发布版本,只需要更新服务器的版本,这就相当于让java应用程序有了web应用的优点了.
          二。jnlp文件的具体说明

    <?xml version="1.0" encoding="UTF-8"?> dl.bitsCN.com网管软件下载

    <!--codebase 属性指出搜索应用程序资源的顶级URL,下面的icon/jar元素都是以这个URL为基本.-->

    <jnlp codebase="http://127.0.0.1:8081/webstart"> blog.bitsCN.com网管博客等你来搏

        <information>

           <!-- "开始"-"运行"菜单中输入"javaws""javaws -viewer"启动Web Start,会看到客户端已经安装的webstart应用程序-->

           <!--title :应用程序标题 vendor:供应商 so.bitsCN.com网管资料库任你搜

            title/vendor 元素必须,会显示在用"javaws -viewer"命令

            打开的应用程序缓存查看器(Java Application Cache Viewer)中--> www.bitsCN.net中国网管博客

            <title>HelloWorld</title>

            <vendor>Lively Corporation</vendor>

            <description>HelloWorld Test Example for WebStart.</description>

           <!--homepage :存放有关应用程序的相关文档的URL,如help文件等,仅仅是description作用--> bitsCN.com中国网管联盟

            <homepage href="http://127.0.0.1:8081/webstart/index.html"/>

            <!--icon 指定图标会显示在应用程序缓存查看器中,

            在查看器中新建webstart快捷方式到桌面时也会显示为快捷方式图标,

            只支持GIF/JPEG格式,其它格式无效-->

            <icon href="./images/logo.jpg"/>

           <!--splash sun的文档中提到会出现在webstart启动时的闪屏中,不过可能由于速度问题,我没有观察到-->

            <icon kind="splash" href="./images/logo.jpg"/>

            <!-- 允许离线启动,可以使用javaws -offline命令-->

            <offline-allowed/> 需要什么来搜一搜吧so.bitsCN.com

        </information>

        <resources>

           <!-- 指定客户端需要安装的j2se版本,下面指定为1.5+

            如果版本是1.4,在链接此jnlp文件时会提示更新j2se版本-->

            <j2se version="1.5+"/>

           <!-- 指定要下载到本地的jar文件(注意,所有的文件都需要打包才能够下载)

            可以包含一些资源文件,如icons/configuration files,可以使用getResource方法取得-->

            <jar href="./jar/jws/helloworld.jar"/>

        </resources>

        <!--application-desc 必须,指定webstart启动时执行jar文件中的哪个类-->

        <application-desc main-class="jws.HelloWorld"/> 

    </jnlp>
              三。应用JNLP部署应用
            (1)编写相关应用,打包成一系列jar;
            (2)根据jnlp文件说明修改相应的jnlp内容,修改相应的url和jar;
            (3)部署jnlp文件和jar到相应的web容器;
            (4)编写访问网页,即可使用该应用〔亦可下载jnlp文件使用jws运行应用〕;
              四。补充
             如果jar需要访问本地文件资源,需要为你的jar文件签名
            先在命令行用keytool产生一个keystore文件.
            keytool -genkey -keystore you.keystore –alias youApp

            命令行用jarsigner签名,当然这时候需要生成keystore时的密码
            jarsigner -keystore you.keystore appTest.jar youApp

    重新部署即可.

  • applet java 介绍

    2009-05-15 14:12:58

    介绍
    applet(小应用程序)采用java创建的基于html的程序。浏览器将其暂时下载到用户的硬盘上,并在web页打开时在本地运行。

    applet的工作原理


           含有applet的网页的html文件代码中部带有<applet>和</applet>这样一对标记,当支持java的网络浏览器遇到折兑标记时,就下载相应的小应用程序代码并在本地计算机上执行该applet。java applet是用java语言编写的一些小应用程序,这些程序是直接嵌入到页面中,由支持java的浏览器(ie或nescape)解释执行能够产生特殊效果的程序。它可以大大提高web页面的交互能力和动态执行能力。包含applet的网页被称为java-powered页。


           当用户访问这样的网页时,applet被下载到用户的计算机上执行,但前提是用户使用的时支持java的网络浏览器。由于applet是在用户的计算机上执行的,所以它的执行速度不受到网络宽带或者modem存取速度的限制,用户可以更好的欣赏网页上applet产生的多媒体效果。


           在java applet中,可以实现图形绘制,字体和颜色控制,动画和声音的插入,人机交互网络交流等功能。applet还提供了名为抽象窗口工具箱(abstract window toolkit,awt)的窗口环境开发工具。awt利用用户计算机的gui元素,可以建立标准的图形用户界面,如窗口、按钮、滚动条等。目前,在网络上由非常多的applet范例来生动地展现这些功能,读者可以去调阅相应的网页以观看它们的效果。


           applet小应用程序的实现主要依靠java.applet包中的applet类。与一般的应用程序不同,applet应用程序必须嵌入在html页面中,才能得到解释执行;同时applet可以从web页面中获得参数,并和web页面进行交互。


           含有applet的网页的html文件代码中必须带有<applet>和</applet>这样一对标记,当支持java的网络浏览器遇到这对标记时,就将下载相应的小程序代码并在本地计算机上执行applet小程序 。


           applet 是一种java的小应用程序,它通过使用该applet的html文件,由支持java的网页浏览器下载运行。也可以通过java开发工具的appletviewer来运行。applet程序离不开使用它的html文件。这个html文件中关于applet的信息至少应包含一下三点:

            1) 字节码文件名(编译后的java文件,以.class为后缀)

            2) 字节码文件地址

            3)在网页上显示applet的方式。


          一个html文件增加applet有关的内容只是使网页更加富有生气,如添加声音、动画等这些吸引人的特征,它并不会改变html文件中与applet无关的元素。


    applet的安全性限制


         为了防止这样的问题出现,在缺省的情况下,大多数浏览器在applet安全方面受到诸多的限制,几乎不能对系统进行任何“读”或“写”的操作:

         1.不允许applet访问本地文件系统

         2.applet不能执行任何本地计算机 上的程序

         3.不允许applet尝试打开除提供applet的服务器之外的任何系统的socket。

         4.不允许applet访问用户名、电子邮件地址等与本地系统有关的信息。

         5.对于applet而言,java环境中的某些标准系统属性使只读的

         6.applet不能创建或装载applet的机器的网络连接

         7.applet不能充当网络服务器,监听或接收来自远程系统的连接请求。

         8.不允许applet装载动态库或定义本地方法调用。

         9.applet不能操纵不在自己线程组中的任何线程。

         10.applet不能关闭jvm。


    参考网址:

    http://www.8ttt8.com/jishu/w2123.htm

  • 怎么看自己电脑是多少位的操作系统

    2009-05-14 14:37:24

     这里的64位技术是相对于32位而言的,这个位数指的是CPU GPRs(General-Purpose Registers,通用寄存器)的数据宽度为64位,64位指令集就是运行64位数据的指令,也就是说处理器一次可以运行64bit数据。64bit处理器并非现在才有的,在高端的RISC(Reduced Instruction Set Computing,精简指令集计算机)很早就有64bit处理器了 
    64bit计算主要有两大优点:可以进行更大范围的整数运算;可以支持更大的内存。不能因为数字上的变化,而简单的认为64bit处理器的性能是32bit处理器性能的两倍。实际上在32bit应用下,32bit处理器的性能甚至会更强,即使是64bit处理器,目前情况下也是在32bit应用下性能更强。所以要认清64bit处理器的优势,但不可迷信64bit 

    8位处理器、16位处理器、32位处理器和64位处理器,其计数都是8的倍数。它表示一个时钟周期里,处理器处理的二进制代码数。“0”和“1”就是二进制代码,线路上有电信号,则计做1,没有电信号则为0。8位机有8条线路,每个时钟周期有8个电信号,组成一个字节。所以,随8位处理器上升至64位处理器,每个时钟周期传送1个字节到8个字节,关联到时钟速度提高到若干个千兆赫之后,处理器处理信息的能力越来越大。 

    在开始>运行中输入“winver”,如果你的系统是64位的,同样会明确标示出“x64 Edition”。 

    在开始>运行中输入“cmd”,然后在命令提示符窗口中输入“systeminfo”,如果你的系统是64位的,会在“OS 名称: Microsoft Windows XP Professional”一行后明确标示出“x64 Edition”,否则你的系统就是32位的。 

    打开我的电脑属性,没有“物理地址扩展”的是32位,有“物理地址扩展”的是64位。
  • jdk与jre区别

    2009-05-04 11:36:52

    jdk和jre有什么区别?

    简单的说JDK是面向开发人员使用的SDK,它提供了Java的开发环境和运行环境。SDK是Software Development Kit 一般指软件开发包,可以包括函数库、编译程序等。
    JDK就是Java Development Kit
    JRE是Java Runtime Enviroment是指Java的运行环境,是面向Java程序的使用者,而不是开发者。

    如果安装了JDK,会发现你的电脑有两套JRE,一套位于 \jre 另外一套位于 C:\Program Files\Java\j2re1.4.1_01 目录下,后面这套比前面那套少了Server端的Java虚拟机,不过直接将前面那套的Server端Java虚拟机复制过来就行了。而且在安装JDK可以选择是否安装这个位于 C:\Program Files\Jav a 目录下的JRE。如果你只安装JRE,而不是JDK,那么只会在 C:\Program Files\Java 目录下安装唯一的一套JRE。

    JRE的地位就象一台PC机一样,我们写好的 Win32应用程序需要操作系统帮我们运行,同样的,我们编写的Java程序也必须要JRE才能运行。所以当你装完JDK后,如果分别在硬盘上的两个不同地方安装了两套JRE,那么你可以想象你的电脑有两台虚拟的Java PC机,都具有运行Java程序的功能。所以我们可以说,只要你的电脑安装了JRE,就可以正确运行Jav a应用程序。

    1、为什么Sun要让JDK安装两套相同的JRE?
      这是因为JDK里面有很多用Java所编写的开发工具(如javac.exe、jar.exe 等),而且都放置在 \lib\tools.jar 里。从下面例子可以看出,先将tools.jar改名为tools1.jar,然后运行javac.exe,显示如下结果: Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/tools/javac /Main 这个意思是说,你输入javac.exe与输入 java -cp c:\jdk\lib\tools.jar com.sun.tools.javac.Main 是一样的,会得到相同的结果。从这里我们可以证明javac.exe只是一个包装器(Wrapper),而制作的目的是为了让开发者免于输入太长的指令。而且可以发现\lib目录下的程序都很小,不大于2 9K,从这里我们可以得出一个结论。就是JDK里的工具几乎是用Java所编写,所以也是Java应用程序,因此要使用JDK所附的工具来开发Java程序,也必须要自行附一套JRE才行,所以位于C:\Program Files\Java目录下的那套JRE就是用来运行一般Java程序用的。

    2、如果一台电脑安装两套以上的JRE,谁来决定呢?
      这个重大任务就落在java.exe身上。Java.exe的工作就是找到合适的JRE来运行 Java程序。 Java.exe依照底下的顺序来查找JRE:自己的目录下有没有JRE;父目录有没有JRE;查询注册表: [HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment] 所以java.exe的运行结果与你的电脑里面哪个JRE被执行有很大的关系。

    3、介绍JVM
     JRE目录下的Bin目录有两个目录:server与client。这就是真正的jvm.dll所在。 jvm.dll无法单独工作,当jvm.dll启动后,会使用explicit的方法(就是使用Win32 API之中的LoadLibrary()与GetProcAddress()来载入辅助用的动态链接库),而这些辅助用的动态链接库(.dll)都必须位于jvm.dll所在目录的父目录之中。因此想使用哪个JVM,只需要设置PATH,指向JRE所在目录底下的jvm.dll。

    JDK包含的基本组件包括: 
    ·javac – 编译器,将源程序转成字节码 
    ·jar – 打包工具,将相关的类文件打包成一个文件 
    ·javadoc – 文档生成器,从源码注释中提取文档 
    ·jdb – debugger,查错工具

  • WFC是什么

    2009-02-23 17:21:17

     

    MFC (Microsoft Foundation Class Library)中的各种类结合起来构成了一个应用程序框架,它的目的就是让程序员在此基础上来建立Windows下的应用程序,这是一种相对SDK来说更为简单的方法。因为总体上,MFC框架定义了应用程序的轮廓,并提供了用户接口的标准实现方法,程序员所要做的就是通过预定义的接口把具体应用程序特有的东西填入这个轮廓。Microsoft Visual C 提供了相应的工具来完成这个工作:AppWizard可以用来生成初步的框架文件(代码和资源等);资源编辑器用于帮助直观地设计用户接口;ClassWizard用来协助添加代码到框架文件;最后,编译,则通过类库实现了应用程序特定的逻辑。

    封装

    构成MFC框架的是MFC类库。MFC类库是C 类库。这些类或者封装了Win32应用程序编程接口,或者封装了应用程序的概念,或者封装了OLE特性,或者封装了ODBC和DAO数据访问的功能,等等,分述如下,新客网,www.xker.com

    (1)对Win32应用程序编程接口的封装

    用一个C Object来包装一个Windows Object。例如:class CWnd是一个C window object,它把Windows window(HWND)和Windows window有关的API函数封装在C window object的成员函数内,后者的成员变量m_hWnd就是前者的窗口句柄。

    (2)对应用程序概念的封装

    使用SDK编写Windows应用程序时,总要定义窗口过程,登记Windows Class,创建窗口,等等。MFC把许多类似的处理封装起来,替程序员完成这些工作。另外,MFC提出了以文档-视图为中心的编程模式,MFC类库封装了对它的支持。文档是用户操作的数据对象,视图是数据操作的窗口,用户通过它处理、查看数据。

    (3)对COM/OLE特性的封装

    OLE建立在COM模型之上,由于支持OLE的应用程序必须实现一系列的接口(Interface),因而相当繁琐。MFC的OLE类封装了OLE API大量的复杂工作,这些类提供了实现OLE的更高级接口。

    (4)对ODBC功能的封装

    以少量的能提供与ODBC之间更高级接口的C 类,封装了ODBC API的大量的复杂的工作,提供了一种数据库编程模式。


    继承

    首先,MFC抽象出众多类的共同特性,设计出一些基类作为实现其他类的基础。这些类中,最重要的类是CObject和CCmdTarget。CObject是MFC的根类,绝大多数MFC类是其派生的,包括CCmdTarget。CObject 实现了一些重要的特性,包括动态类信息、动态创建、对象序列化、对程序调试的支持,等等。所有从CObject派生的类都将具备或者可以具备CObject所拥有的特性。CCmdTarget通过封装一些属性和方法,提供了消息处理的架构。MFC中,任何可以处理消息的类都从CCmdTarget派生。

    针对每种不同的对象,MFC都设计了一组类对这些对象进行封装,每一组类都有一个基类,从基类派生出众多更具体的类。这些对象包括以下种类:窗口对象,基类是CWnd;应用程序对象,基类是CwinThread;文档对象,基类是Cdocument,等等。

    程序员将结合自己的实际,从适当的MFC类中派生出自己的类,实现特定的功能,达到自己的编程目的。


    虚拟函数和动态约束

    MFC以“C ”为基础,自然支持虚拟函数和动态约束。但是作为一个编程框架,有一个问题必须解决:如果仅仅通过虚拟函数来支持动态约束,必然导致虚拟函数表过于臃肿,消耗内存,效率低下。例如,CWnd封装 Windows窗口对象时,每一条Windows消息对应一个成员函数,这些成员函数为派生类所继承。如果这些函数都设计成虚拟函数,由于数量太多,实现起来不现实。于是,MFC建立了消息映射机制,以一种富有效率、便于使用的手段解决消息处理函数的动态约束问题。

    这样,通过虚拟函数和消息映射,MFC类提供了丰富的编程接口。程序员继承基类的同时,把自己实现的虚拟函数和消息处理函数嵌入MFC的编程框架。MFC编程框架将在适当的时候、适当的地方来调用程序的代码。本书将充分的展示MFC调用虚拟函数和消息处理函数的内幕,让读者对MFC的编程接口有清晰的理解。 [Page]


    MFC的宏观框架体系

    如前所述,MFC实现了对应用程序概念的封装,把类、类的继承、动态约束、类的关系和相互作用等封装起来。这样封装的结果对程序员来说,是一套开发模板(或者说模式)。针对不同的应用和目的,程序员采用不同的模板。例如,SDI应用程序的模板,MDI应用程序的模板,规则DLL应用程序的模板,扩展DLL应用程序的模板,OLE/ACTIVEX应用程序的模板,等等。

    这些模板都采用了以文档-视为中心的思想,每一个模板都包含一组特定的类。典型的MDI应用程序的构成将在下一节具体讨论。

    为了支持对应用程序概念的封装,MFC内部必须作大量的工作。例如,为了实现消息映射机制,MFC编程框架必须要保证首先得到消息,然后按既定的方法进行处理。又如,为了实现对DLL编程的支持和多线程编程的支持,MFC内部使用了特别的处理方法,使用模块状态、线程状态等来管理一些重要信息。虽然,这些内部处理对程序员来说是透明的,但是,懂得和理解MFC内部机制有助于写出功能灵活而强大的程序。


    总之,MFC封装了Win32 API,OLE API,ODBC API等底层函数的功能,并提供更高一层的接口,简化了Windows编程。同时,MFC支持对底层API的直接调用。

    MFC提供了一个Windows应用程序开发模式,对程序的控制主要是由MFC框架完成的,而且MFC也完成了大部分的功能,预定义或实现了许多事件和消息处理,等等。框架或者由其本身处理事件,不依赖程序员的代码;或者调用程序员的代码来处理应用程序特定的事件。

    MFC是C 类库,程序员就是通过使用、继承和扩展适当的类来实现特定的目的。例如,继承时,应用程序特定的事件由程序员的派生类来处理,不感兴趣的由基类处理。实现这种功能的基础是C 对继承的支持,对虚拟函数的支持,以及MFC实现的消息映射机制。


    MDI应用程序的构成

    本节解释一个典型的MDI应用程序的构成。

    用AppWizard产生一个MDI工程t(无OLE等支持),AppWizard创建了一系列文件,构成了一个应用程序框架。这些文件分四类:头文件(.h),实现文件(.cpp),资源文件(.rc),模块定义文件(.def),等。

    (先写到这儿吧)

  • web测试关注点

    2009-02-16 20:18:06

    链接是Web应用系统的一个主要特征,它是在页面之间切换和指导用户去一些不知道地址的页面的主要手段。链接测试可分为三个方面。首先,测试所有链接是否按指示的那样确实链接到了该链接的页面;其次,测试所链接的页面是否存在;最后,保证Web应用系统上没有孤立的页面,所谓孤立页面是指没有链接指向该页面,只有知道正确的URL地址才能访问。

    一、功能测试

      1、链接测试

      链接是Web应用系统的一个主要特征,它是在页面之间切换和指导用户去一些不知道地址的页面的主要手段。链接测试可分为三个方面。首先,测试所有链接是否按指示的那样确实链接到了该链接的页面;其次,测试所链接的页面是否存在;最后,保证Web应用系统上没有孤立的页面,所谓孤立页面是指没有链接指向该页面,只有知道正确的URL地址才能访问。

      2、表单测试

      当用户给Web应用系统管理员提交信息时,就需要使用表单操作,例如用户注册、登陆、信息提交等。在这种情况下,我们必须测试提交操作的完整性,以校验提交给服务器的信息的正确性。例如:用户填写的出生日期与职业是否恰当,填写的所属省份与所在城市是否匹配等。如果使用了默认值,还要检验默认值的正确性。如果表单只能接受指定的某些值,则也要进行测试。例如:只能接受某些字符,测试时可以跳过这些字符,看系统是否会报错。

      3、Cookies测试

      Cookies通常用来存储用户信息和用户在某应用系统的操作,当一个用户使用Cookies访问了某一个应用系统时,Web服务器将发送关于用户的信息,把该信息以Cookies的形式存储在客户端计算机上,这可用来创建动态和自定义页面或者存储登陆等信息。

      如果Web应用系统使用了Cookies,就必须检查Cookies是否能正常工作。测试的内容可包括Cookies是否起作用,是否按预定的时间进行保存,刷新对Cookies有什么影响等。

      Session测试,Session的功能与Cookies有些类似,测试工作大体相同

      4、设计语言测试

      Web设计语言版本的差异可以引起客户端或服务器端严重的问题,例如使用哪种版本的HTML等。当在分布式环境中开发时,开发人员都不在一起,这个问题就显得尤为重要。除了HTML的版本问题外,不同的脚本语言,例如JavaScript、VBScript或Perl等也要进行验证。

      5、数据库测试

      在Web应用技术中,数据库起着重要的作用,数据库为Web应用系统的管理、运行、查询和实现用户对数据存储的请求等提供空间。在Web应用中,最常用的数据库类型是关系型数据库,可以使用SQL对信息进行处理。

      在使用了数据库的Web应用系统中,一般情况下,可能发生两种错误,分别是数据一致性错误和输出错误。数据一致性错误主要是由于用户提交的表单信息不正确而造成的,而输出错误主要是由于网络速度或程序设计问题等引起的,针对这两种情况,可分别进行测试。

      二、性能测试

      1、连接速度测试

      用户连接到Web应用系统的速度根据上网方式的变化而变化,他们或许是电话拨号,或是宽带上网。当下载一个程序时,用户可以等较长的时间,但如果仅仅访问一个页面就不会这样。如果Web系统响应时间太长(例如超过5秒钟),用户就会因没有耐心等待而离开。

      另外,有些页面有超时的限制,如果响应速度太慢,用户可能还没来得及浏览内容,就需要重新登陆了。而且,连接速度太慢,还可能引起数据丢失,使用户得不到真实的页面。

      2、负载测试

      负载测试是为了测量Web系统在某一负载级别上的性能,以保证Web系统在需求范围内能正常工作。负载级别可以是某个时刻同时访问Web系统的用户数量,也可以是在线数据处理的数量。例如:Web应用系统能允许多少个用户同时在线?如果超过了这个数量,会出现什么现象?Web应用系统能否处理大量用户对同一个页面的请求?

      3、压力测试

      负载测试应该安排在Web系统发布以后,在实际的网络环境中进行测试。因为一个企业内部员工,特别是项目组人员总是有限的,而一个Web系统能同时处理的请求数量将远远超出这个限度,所以,只有放在Internet上,接受负载测试,其结果才是正确可信的。

      进行压力测试是指实际破坏一个Web应用系统,测试系统的反映。压力测试是测试系统的限制和故障恢复能力,也就是测试Web应用系统会不会崩溃,在什么情况下会崩溃。黑客常常提供错误的数据负载,直到Web应用系统崩溃,接着当系统重新启动时获得存取权。

      压力测试的区域包括表单、登陆和其他信息传输页面等。

      三、可用性测试

      1、导航测试

      导航描述了用户在一个页面内操作的方式,在不同的用户接口控制之间,例如按钮、对话框、列表和窗口等;或在不同的连接页面之间。通过考虑下列问题,可以决定一个Web应用系统是否易于导航:导航是否直观?Web系统的主要部分是否可通过主页存取?Web系统是否需要站点地图、搜索引擎或其他的导航帮助?

    导航的另一个重要方面是Web应用系统的页面结构、导航、菜单、连接的风格是否一致。确保用户凭直觉就知道Web应用系统里面是否还有内容,内容在什么地方。

      Web应用系统的层次一旦决定,就要着手测试用户导航功能,让最终用户参与这种测试,效果将更加明显。

      2、图形测试

      在Web应用系统中,适当的图片和动画既能起到广告宣传的作用,又能起到美化页面的功能。一个Web应用系统的图形可以包括图片、动画、边框、颜色、字体、背景、按钮等。图形测试的内容有:

      (1)要确保图形有明确的用途,图片或动画不要胡乱地堆在一起,以免浪费传输时间。Web应用系统的图片尺寸要尽量地小,并且要能清楚地说明某件事情,一般都链接到某个具体的页面。

      (2)验证所有页面字体的风格是否一致。

      (3)背景颜色应该与字体颜色和前景颜色相搭配。

      (4)图片的大小和质量也是一个很重要的因素,一般采用JPG或GIF压缩;所以应尽量避免使用bmp等格式的图片

      3、内容测试

      内容测试用来检验Web应用系统提供信息的正确性、准确性和相关性。

      信息的正确性是指信息是可靠的还是误传的。

      4、整体界面测试

      整体界面是指整个Web应用系统的页面结构设计,是给用户的一个整体感。例如:当用户浏览Web应用系统时是否感到舒适,是否凭直觉就知道要找的信息在什么地方?整个Web应用系统的设计风格是否一致?当然,对界面的整体测试并不能单靠个人直觉来评定;每个人的审美观、专业角度、系统面向的行业及用户 、甚至性别与年龄等等,都是可能导致对界面作出不同评价的因素。所以要明白在对整体界面的测试过程中,其实是一个对最终用户进行调查的过程。一般Web应用系统采取在主页上做一个调查问卷的形式,来得到最终用户的反馈信息。

      对所有的可用性测试来说,都需要有外部人员(与Web应用系统开发没有联系或联系很少的人员)的参与,最好是最终用户的参与。

      四、客户端兼容性测试

      1、平台测试

      市场上有很多不同的操作系统类型,最常见的有Windows、Unix、Macintosh、Linux等。Web应用系统的最终用户究竟使用哪一种操作系统,取决于用户系统的配置。这样,就可能会发生兼容性问题,同一个应用可能在某些操作系统下能正常运行,但在另外的操作系统下可能会运行失败。

      因此,在Web系统发布之前,需要在各种操作系统下对Web系统进行兼容性测试。

      2、浏览器测试

      浏览器是Web客户端最核心的构件,来自不同厂商的浏览器对Java,、JavaScript、ActiveX、 plug-ins或不同的HTML规格有不同的支持。例如,ActiveX是Microsoft的产品,是为Internet Explorer而设计的,JavaScript是Netscape的产品,Java是Sun的产品等等。另外,框架和层次结构风格在不同的浏览器中也有不同的显示,甚至根本不显示。不同的浏览器对安全性和Java的设置也不一样。

      测试浏览器兼容性的一个方法是创建一个兼容性矩阵。在这个矩阵中,测试不同厂商、不同版本的浏览器对某些构件和设置的适应性。

      五、安全性测试

      Web应用系统的安全性测试区域主要有:

      (1)现在的Web应用系统基本采用先注册,后登陆的方式。因此,必须测试有效和无效的用户名和密码,要注意到是否大小写敏感,可以试多少次的限制,是否可以不登陆而直接浏览某个页面等。

      (2)Web应用系统是否有超时的限制,也就是说,用户登陆后在一定时间内(例如15分钟)没有点击任何页面,是否需要重新登陆才能正常使用。

      (3)为了保证Web应用系统的安全性,日志文件是至关重要的。需要测试相关信息是否写进了日志文件、是否可追踪。

      (4)当使用了安全套接字时,还要测试加密是否正确,检查信息的完整性。

      (5)服务器端的脚本常常构成安全漏洞,这些漏洞又常常被黑客利用。所以,还要测试没有经过授权,就不能在服务器端放置和编辑脚本的问题。

    六、总结

      本文从功能、性能、可用性、客户端兼容性、安全性等方面讨论了基于Web的系统测试方法。

    基于Web的系统测试与传统的软件测试既有相同之处,也有不同的地方,对软件测试提出了新的挑战。基于Web的系统测试不但需要检查和验证是否按照设计的要求运行,而且还要评价系统在不同用户的浏览器端的显示是否合适。重要的是,还要从最终用户的角度进行安全性和可用性测试。
  • LR视频

    2009-02-16 20:15:01

    小布老师的LR视频,总结如下:

    一、LR 快速入门

    [小布老师视频 - 测试工具概述,兼LoadRunner介绍 -1
    http://www.boobooke.com/v/bbk1046
    对初步接触性能测试和LoadRunner的朋友参考作用。

    小布老师视频 - 测试工具概述,兼LoadRunner介绍 - 2
    http://www.boobooke.com/v/bbk1047

    小布老师视频 - 测试工具概述,兼LoadRunner介绍 - 3
    http://www.boobooke.com/v/bbk1048

    小布老师视频 - 测试工具概述,兼LoadRunner介绍 - 4
    http://www.boobooke.com/v/bbk1055

    小布老师视频 - 在LoadRunner中使用动态库技术:

    http://www.boobooke.com/v/bbk1049


    本视频是该系列视频的第四讲,也是最后一讲。 在该视频中,小布老师用了20多分钟的时间演示了LoadRunner的快速入门,所以本视频对从来没有接触过LoadRunner,想快速入门的朋友特别合适。

    二、小布老师LR系列培训视频 1 - LoadRunner概述(上)

    [V] 小布老师LR系列培训视频 1 - LoadRunner概述(上)
    http://www.boobooke.com/v/bbk1059

    第一讲 LoadRunner概述

    这个系列讲座是一套完整的LoadRunner培训视频,希望大家喜欢。

    小布老师LR系列培训视频 2 - LoadRunner概述(下)

    [V] 小布老师LR系列培训视频 6 - 录制和回放测试脚本(3)

    第三讲 录制和回放测试脚本。 本讲座是该讲的最后一集。 本讲有三集视频,请大家注意:

    http://www.boobooke.com/v/bbk1063
    http://www.boobooke.com/v/bbk1064
    http://www.boobooke.com/v/bbk1065

    或者进小布老师这个地址,里面知识很多很齐全,也是视频哦

    http://www.boobooke.com/index_old.php

    雪鹰老师力作:LoadRunner中Web检查点两个函数剖析,

    web_reg_find和web_find两个函数的区别:http://www.boobooke.com/v/bbk1333http://www.boobooke.com/v/bbk13334

    小歪作品:LoadRunner参数化之研究 http://www.boobooke.com/v/bbk1617

    雪鹰老师力作:LoadRunner中编写ftp测试脚本:http://www.boobooke.com/v/bbk1349

    小歪作品:LoadRunner关联之研究:http://www.boobooke.com/v/bbk1586

    小强作品: LoadRunner之自动关联:http://www.boobooke.com/v/bbk1778

    小强作品: LoadRunner脚本编写规范http://www.boobooke.com/v/bbk1781
    小强作品: 在LoadRunner使用Java虚拟用户技术:http://www.boobooke.com/v/bbk1901

    小强作品: LoadRunner之脚本调试:http://www.boobooke.com/v/bbk1777
    小强作品: LoadRunner之错误处理:http://www.boobooke.com/v/bbk1776

    小强作品:LoadRunner界面分析:3集

    1.http://www.boobooke.com/v/bbk1735

    2.http://www.boobooke.com/v/bbk1736

    3.http://www.boobooke.com/v/bbk1737

    小强老师系列作品:使用LoadRunner录制MS SQL的脚本:http://www.boobooke.com/v/bbk1526

    小强老师系列作品:LoadRunner的目录分析:http://www.boobooke.com/v/bbk1574

    小强老师系列作品:性能测试基本概念剖析:http://www.boobooke.com/v/bbk1577
    小强作品:LoadRunner常用术语介绍:http://www.boobooke.com/v/bbk1620

    三、小布老师Oracle 9i DBA Fundamentals I的系列视频下载地址

    在线播放地址:
    第一讲:  http://www.boobooke.com/v/bbk1109
    第二讲:  http://www.boobooke.com/v/bbk1110
    第三讲:  http://www.boobooke.com/v/bbk1112
    第四讲:  http://www.boobooke.com/v/bbk1114
    第五讲:  http://www.boobooke.com/v/bbk1115
    第六讲:  http://www.boobooke.com/v/bbk1148
    第七讲:  http://www.boobooke.com/v/bbk1149
    第八讲:  http://www.boobooke.com/v/bbk1150
    第九讲:  http://www.boobooke.com/v/bbk1151
    第十讲:  http://www.boobooke.com/v/bbk1152
    第十一讲: http://www.boobooke.com/v/bbk1153
    第十二讲: http://www.boobooke.com/v/bbk1154
    第十三讲: http://www.boobooke.com/v/bbk1161
    第十四讲: http://www.boobooke.com/v/bbk1162
    第十五讲: http://www.boobooke.com/v/bbk1163
    第十六讲: http://www.boobooke.com/v/bbk1164
    第十七讲: http://www.boobooke.com/v/bbk1165
    第十八讲: http://www.boobooke.com/v/bbk1166
    第十九讲: http://www.boobooke.com/v/bbk1167
    第二十讲: http://www.boobooke.com/v/bbk1168
    第二十一讲: http://www.boobooke.com/v/bbk1169
    第二十二讲: http://www.boobooke.com/v/bbk1170
    第二十三讲: http://www.boobooke.com/v/bbk1171
    第二十四讲: http://www.boobooke.com/v/bbk1179
    第二十五讲: http://www.boobooke.com/v/bbk1180

    下载地址:
    第一讲:  http://www.boobooke.com/v/bbk1109.zip
    第二讲:  http://www.boobooke.com/v/bbk1110.zip
    第三讲:  http://www.boobooke.com/v/bbk1112.zip
    第四讲:  http://www.boobooke.com/v/bbk1114.zip
    第五讲:  http://www.boobooke.com/v/bbk1115.zip
    第六讲:  http://www.boobooke.com/v/bbk1148.zip
    第七讲:  http://www.boobooke.com/v/bbk1149.zip
    第八讲:  http://www.boobooke.com/v/bbk1150.zip
    第九讲:  http://www.boobooke.com/v/bbk1151.zip
    第十讲:  http://www.boobooke.com/v/bbk1152.zip
    第十一讲: http://www.boobooke.com/v/bbk1153.zip
    第十二讲: http://www.boobooke.com/v/bbk1154.zip
    第十三讲: http://www.boobooke.com/v/bbk1161.zip
    第十四讲: http://www.boobooke.com/v/bbk1162.zip
    第十五讲: http://www.boobooke.com/v/bbk1163.zip
    第十六讲: http://www.boobooke.com/v/bbk1164.zip
    第十七讲: http://www.boobooke.com/v/bbk1165.zip
    第十八讲: http://www.boobooke.com/v/bbk1166.zip
    第十九讲: http://www.boobooke.com/v/bbk1167.zip
    第二十讲: http://www.boobooke.com/v/bbk1168.zip
    第二十一讲: http://www.boobooke.com/v/bbk1169.zip
    第二十二讲: http://www.boobooke.com/v/bbk1170.zip
    第二十三讲: http://www.boobooke.com/v/bbk1171.zip
    第二十四讲: http://www.boobooke.com/v/bbk1179.zip
    第二十五讲: http://www.boobooke.com/v/bbk1180.zip

    [V] 小布老师Oracle 9i DBA Fundamentals II

    http://www.boobooke.com/bbs/tag.php?name=DBA&page=1

    第一讲 在线播放:http://www.boobooke.com/v/bbk1172

  • QTP视频

    2009-02-16 20:05:06

    今天在网上搜索一下QTP的视频教程时,发现了这个小布老师的视频学习网,觉得很好,所以,特意记录下来。

    ================================================================================
    [V] 小布老师QTP系列培训视频 - 1
    http://www.boobooke.com/v/bbk1043
    本讲讲了QTP的概述,希望大家喜欢。

    [V] 小布老师QTP系列培训视频 - 2
    http://www.boobooke.com/v/bbk1044
    本讲讲了测试规划,希望大家喜欢。

    [V] 小布老师QTP系列培训视频 - 3
    http://www.boobooke.com/v/bbk1045
    本讲讲了录制测试脚本,是使用QTP的第一步,希望大家喜欢。
    ================================================================================
    小强作品-零基础学习软件测试-qtp-目录
    1 qtp目录分析
    2 qtp界面分析
    3 qtp示例程序分析
    4 qtp学习指南
    5 qtp基本操作录制与回放
    6 qtp的三种录制绞?br /> 7 增强help步骤
    8 checkpoint
    9 参数化
    10 Tools下的工具介绍
    11 qtp插件分析
    12 qtp测试用例设计考题
    13 vbs
    14 recovery Scenarios
    15 虚拟对象
    16 专家视图测试脚本开发
    17 qtp描述性编程
    18 qtp测试脚本编写规范

    [V] 小强老师系列作品:QTP的安装目录分析
    http://www.boobooke.com/v/bbk1590
    在本集中,小强老师向刚刚接触QTP的朋友介绍了QTP安装后的各个目录,重点介绍了大家需要关注的东西,希望对大家有帮助。

    [V] 小强老师系列作品:QTP界面剖析
    http://www.boobooke.com/v/bbk1594
    本集是承接上集,小强老师向刚刚接触QTP的朋友介绍了QTP的常用界面和菜单选项,希望对大家有帮助。

    [V] 小强老师系列作品:QTP示例程序之研究
    http://www.boobooke.com/v/bbk1598
    本集是承接上集,小强老师向刚刚接触QTP的朋友介绍了QTP自带的示例程序-飞机订票系统,别小看这个示例程序,小程序里面有大文章,且听小强老师给你道来, 希望对大家有帮助。

    [V] 小强老师系列作品:QTP学习指南
    http://www.boobooke.com/v/bbk1515
    在本集中,小强老师根据自己的经验和体会,向刚刚接触QTP的朋友介绍了如何学习QTP的一些方法和经验,希望对大家有帮助。

    [V] 小强老师系列作品:QTP脚本的录制和回放
    http://www.boobooke.com/v/bbk1591
    在本集中,小强老师向刚刚接触QTP的朋友介绍了QTP最基本的脚本录制回放的功能,希望对大家有帮助。

    [V] 小强老师系列作品:QTP三种录制方式
    http://www.boobooke.com/v/bbk1516
    这是该系列讲座的第三集。在本集中,小强老师向刚刚接触QTP的朋友介绍了QTP录制脚本的三种模式,希望对大家有帮助。

    [V] 小强老师系列作品:QTP检查点之研究
    http://www.boobooke.com/v/bbk1595
    本集是承接上集,小强老师向刚刚接触QTP的朋友介绍了QTP的重要功能 - 检查点,希望对大家有帮助。

    [V] 小强老师系列作品:QTP参数化之研究
    http://www.boobooke.com/v/bbk1599
    本集是承接上集,小强老师向刚刚接触QTP的朋友介绍了QTP重要的功能-参数化, 希望对大家有帮助。

    [V] 小强老师系列作品:QTP的常用工具阐释
    http://www.boobooke.com/v/bbk1589
    在本集中,小强老师向刚刚接触QTP的朋友介绍了QTP附带的常用工具,希望对大家有帮助。

    [V] 小强老师系列作品:QTP插件分析
    http://www.boobooke.com/v/bbk1689
    在本集中,小强老师向刚刚接触QTP的朋友介绍了QTP插件的基本知识,希望对大家有帮助。

    [V] 小强老师系列作品:QTP认证考试试题分析一则
    http://www.boobooke.com/v/bbk1575
    小强老师针对想入行软件测试行业的菜鸟级别的朋友,推出了零基础学习软件测试系列培训视频。
    在本集中,小强老师根据自己的经验和体会,向刚刚接触QTP的朋友介绍了如何QTP认证考试的一道典型题目的分析.

    [V] 小强老师系列作品:QTP中VBS介绍
    http://www.boobooke.com/v/bbk1621
    在本集中,小强老师给大家介绍了QTP脚本语言VBS的基本知识,希望大家喜欢。

    [V] 小强老师系列作品:QTP之场景恢复(Recovery Scenarios)
    http://www.boobooke.com/v/bbk1692
    在本集中,小强老师向刚刚接触QTP的朋友介绍了QTP的场景恢复(Recovery Scenarios)的基本知识,希望对大家有帮助。

    [V] 小强老师系列作品:QTP中的虚拟对象入门
    http://www.boobooke.com/v/bbk1695
    在本集中,小强老师向刚刚接触QTP的朋友介绍了QTP中虚拟对象的基本知识,希望对大家有帮助。

    [V] 小强老师系列作品:QTP之专家视图和测试脚本开发
    http://www.boobooke.com/v/bbk1690
    在本集中,小强老师向刚刚接触QTP的朋友介绍了QTP的专家视图,并介绍了脚本开发的几个重要对象,希望对大家有帮助。

    [V] 小强老师系列作品:QTP之描述性编程
    http://www.boobooke.com/v/bbk1691
    在本集中,小强老师向刚刚接触QTP的朋友介绍了QTP的描述性编程的基本知识,希望对大家有帮助。

    [V] 小强老师系列作品:QTP之测试脚本开发规范
    http://www.boobooke.com/v/bbk1693
    在本集中,小强老师向刚刚接触QTP的朋友介绍了QTP脚本开发的基本规范,希望对大家有帮助。

    [V] 小强老师系列作品:QTP脚本的增强一则
    http://www.boobooke.com/v/bbk1592
    本集是承接上集,小强老师向刚刚接触QTP的朋友介绍了如何对录制的脚本进行增强,希望对大家有帮助。

764/4<1234
Open Toolbar