本文只讨论如何在Windows NT 4.0上安装Apache+Servlet

本文中的配置情况如下:   Windows NT 4.0   jdk1_2_2-001-win.exe   apache_1_3_12_win32.exe   ApacheModuleJServ.dll   tomcat.zip(3.0) 一、软件下载   JDK     http://java.sun.com/products/jdk/1.2/   Apache Server     http://www.apache.org/dist/binaries/win32/apache_1_3_12_win32.exe   Apache JServ     http://jakarta.apache.org/builds/tomcat/release/v3.0/win32/ApacheModuleJServ.dll   Tomcat     http://jakarta.apache.org/builds/tomcat/release/v3.0/tomcat.zip 二、软件安装   (一)JDK     1、双击jdk1_2_2-001-win.exe文件进行安装,使用缺省配置进行安装,JDK的缺省安装目录为       C:\jdk1.2.2,JRE的缺省安装目录为C:\Program Files\JavaSoft\JRE\1.2;     2、重启计算机;     3、更新下列环境变量:把C:\jdk1.2.2\bin目录追加到PATH中;把       .;C:\jdk1.2.2\lib\tools.jar;C:\jdk1.2.2\lib\dt.jar加入到CLASSPATH中。更新       方法:控制面板->系统->环境->系统变量;     4、测试applet:        1)打开command窗口;        2)切换到C:\jdk1.2.2\demo\applets\TicTacToe目录;        3)运行appletviewer example1.htm;        4)一切正常;     5、测试application:         1)在我的D:\HZQ\Java目录下创建一个test.java文件,内容如下:           public class test           {            public static void main(String arc[]){            System.out.println("JDK安装成功了,朋友!");            }           };        2)打开command窗口;        3)切换到D:\HZQ\Java目录;        4)运行javac test.java进行编译;        5)运行java test运行这个程序;        6)一切正常。   (二)Apache Server     1、双击apache_1_3_12_win32.exe文件进行安装,使用缺省配置进行安装,缺省安装目录为       C:\Program Files\Apache Group\Apache,我用$APACHE_ROOT来代替安装目的地;     2、修改$APACHE_ROOT\conf\httpd.conf:        1)PORT          设置Apache Web Server运行时使用的端口号,由于我这里的IIS也在运行,IIS使          用了80端口号,于是我把它改成Port 8080,以后在浏览器上输入          http://localhost:8080/才能访问到Apache Web Server服务器,输入          http://localhost/时能访问到IIS,这样两个Web Server都可以用了哦,我用 $APACHE_PORT标识;         2)DocumentRoot          设置文档根目录,当您在浏览器上输入http://localhost:$APACHE_PORT/时,服          务器会从文档根目录读取数据,由于我的程序都放在D:\HZQ下,所以我把          DocumentRoot设置为D:/HZQ;     3、Apache安装完后在"开始->程序"菜单组中多了Apache Web Server菜单组,运行其中的       Install Apache as a service,这样的话在"开始->设置->控制面板->服务"中就       多了一个名为Apache的服务,您可以用它来启动或停止Apache服务;     4、打开"开始->设置->控制面板->服务",选中Apache这个服务,按"开始"启动Apache       服务;     5、我在浏览器上输入http://localhost:$APACHE_PORT/,就看到了D:\HZQ下的所有文件,       这时表明Apache服务已经安装成功。   (三)Apache JServ     1、把ApacheModuleJServ.dll文件拷贝到$APACHE_ROOT\modules目录下;     2、修改$APACHE_ROOT\conf\httpd.conf:         在该文件中加上LoadModule jserv_module modules/ApacheModuleJServ.dll以         启动Apache JServ;     3、重新启动Apache服务。   (四)Tomcat     1、用WinZIP等解压缩软件把tomcat.zip解压缩到一个目录下,我把它解压缩到C:\,它会自动       创建tomcat子目录,这样在C盘就多了一个目录C:/tomcat,我用$TOMCAT标识;     2、打开$APACHE_ROOT\conf\httpd.conf文件,在该文件最后加上类似这样一句话:         Include $TOMCAT/etc/tomcat.conf       在我这里为Include C:/tomcat/etc/tomcat.conf;     3、修改Tomcat运行的端口号,注意Tomcat自己有一个独立的HTTP服务器,它必须使用一个还未       被使用的端口号,我这里的8081还未被占用,我用$TOMCAT_PORT标识,分配给Tomcat:         1)打开$TOMCAT/server.xml;         2)修改ContextManager:     4、双击$TOMCAT目录下的startup.bat来启动Tomcat;     5、在浏览器上输入http://localhost:$TOMCAT_PORT/,能看到Tomcat Version 3.0这一页       就表示Tomcat安装成功了;     6、在浏览器上输入http://localhost:$APACHE_PORT/examples/servlets/,能看到       Servlet Examples with Code这一页就表示Apache+Servlet也成功了;     7、在浏览器上输入http://localhost:$APACHE_PORT/examples/jsp/,能看到jsp Samples       这一页就表示Apache+jsp也成功了。 附:   JDK Download     http://java.sun.com/products/jdk/1.2/   Apache Server Download     http://www.apache.org/dist/binaries/win32/apache_1_3_12_win32.exe   Apache JServ Download     http://jakarta.apache.org/builds/tomcat/release/v3.0/win32/ApacheModuleJServ.dll   Tomcat Download     http://jakarta.apache.org/builds/tomcat/release/v3.0/tomcat.zip   Java(TM) 2 SDK 1.2.2-001 Installation Instructions     http://java.sun.com/products/jdk/1.2/install-windows.html   Tomcat FAQ     http://jakarta.apache.org/cvsweb/index.cgi/jakarta-tomcat/src/doc/faq   Tomcat+Apache-HOWTO     http://jakarta.apache.org/cvsweb/index.cgi/jakarta-tomcat/src/doc/Tomcat%2bApache-HOWTO   <淘宝热门商品:
 

12.00 元  

08VIVI杂志推荐 风靡韩国牛仔感七分打底裤

 

288.00 元 

【原装正品】韩国恋人1.6米大抱熊


来源:程序员网

小小豆叮

j2ee配置指南

j2ee配置指南 1。介绍 本文介绍j2ee环境的配置,所有涉及的文件都在j2ee安装目录下的oncfig目录,这些文件都是文本文件, 你可以有任意的文本编辑器来编辑它们。 通常情况下,你没有改变这些文件的必要。但是如果你使用的数据库驱动不是cloudscape的时候,你需要 遵循本章的内容进行配置。 2。JDBC驱动 默认的j2ee安装后支持cloudscape数据库(一个sun公司提供的演示数据库),如果你的ejb使用的jdbc不 是连接cloudscape数据库,那么你需要按照下面的知道进行配置。(如果你不能确定本版本的j2ee支持你使用 的jdbc驱动,请到 11111 看相关信息。) 3。驱动的位置 你必须把驱动文件(.jar文件)copy到 $J2EE_HOME/lib/system目录下。并且保证该文件包含在 J2EE_CLASSPATH 的环境变量中。 4。J2EE_CLASSPATH 环境变量 j2ee server通过JDBC驱动连接数据库。通通过J2EE_CLASSPATH 的环境变量定位驱动文件(.jar文件)的位 置。你可以在启动j2ee前在命令行设置这个变量。但是我们推荐你在脚本中设置J2EE_CLASSPATH 变量。编辑用 户配置文件在安装的过程中是必须的一步。在unix中,用户配置文件是 /bin/userconfig.sh,windows nt中是 bin/userconfig.bat 注意:你应该同时在CLASSPATH环境变量中去掉驱动文件(.jar文件)。 5。JDBC 1.0 驱动 为了配置jdbc1.0驱动,编辑config/default.properties 文件的jdbc.drivers 和 jdbc.datasources两个 属性值。再次要注意的是驱动文件必须包含在J2EE_CLASSPATH环境变量中。 jdbc.drivers 属性 jdbc.drivers 属性的值是有一系列的冒号分割的jdbc驱动的类名。格式如下: jdbc.drivers=:: . . . 例如: jdbc.drivers=oracle.jdbc.driver.OracleDriver:testutil.MyDriver jdbc.datasources 属性值 jdbc.datasources 属性值由两部分组成,一个是datasource的jndi的名字,一个是数据库的url。典型的 情况是:jndi名字是数据库的逻辑名字,rul指定数据库的实际位置。jndi名字和url都是在ejb编码的过程中指 定的。rul的格式,请参照jdbc驱动提供商的文档。 jdbc.datasources 的语法如下: jdbc.datasources=|||. . . |符号有两个作用。第一,它隔开几个jndi_datasource;第二,它隔开每一个jndi_datasource中的 jndi_datasource> 和 元素. jndi_datasource元素的语法如下: jdbc/ 由jdbc关键字开头,jndi_name是在jndi目录中指定的datasouce名字。 例如: jdbc.datasources=jdbc/Oracle|jdbc:oracle:thin@rtc:1521:acct|jdbc/MyDB|jdbc:test 6。支持JTA的JDBC2.0驱动 配置JTA的JDBC2.0的驱动,你需要设置以下属性的值: jdbc20.datasources xadatasource..jndiname xadatasource..classname xadatasource..dbuser xadatasource..dbpassword xadatasource..prop. 同时你也必须在J2EE_CLASSPATH 环境变量中包括jdbc驱动文件。 jdbc20.datasources 属性 jdbc20.datasources 属性的值和jndi名字连接,用于定位datasouce的位置(它就是lookup方法的参数) 。 jdbc20.datasources 的语法如下: jdbc20.datasources=||| |的作用有两个,第一,隔开jndi_datasource 和并组成一对,第二,隔开每一对的 jndi_datasource> 、元素。 和 jndi_XA_datasource有相同的语法: jdbc/ jdbc关键字开头。jndi_name是datasource名字,这个名字指向jndi目录。 例如: jdbc20.datasources=jdbc/Merant|jdbc/XAMerant|jdbc/Finch|jdbc/XAFinch xadatasource属性 xadatasource..jndiname 属性指定XA DataSource的jndi名字。语法如下: xadatasource..jndiname=jdbc/ n代表每一组xadatasource。第一个jdbc2.0驱动n为0,下一个是1,2等等。jndi_XA_datasource元素和 jdbc20.datasources 指定的值对应。 The xadatasource..dbuser 和 xadatasource..dbpassword 属性指定数据库用户和密码。通常该用 户具有管理员的权限(更多的信息请看 2222 The distributed.transaction.recovery )。 xadatasource..prop. 指定和特定的属性值关联的值。实际的值可能是jdbc驱动。 例如: xadatasource.0.jndiname=jdbc/XAMerant xadatasource.0.classname=com.merant.sequelink.jdbcx.datasource.SequeLinkDataSource xadatasource.0.prop.url=jdbc:sequelink://mypc:5000/[Oracle] 7。事务 你可以编辑config/default.properties 文件控制事务发生和超时设置。 distributed.transaction.recovery 属性 这个属性控制分布事物是否发生。入这些事物可以发生的化,下面的条件必须满足: 跨库操作时的事物范围。 j2ee程序通过jdbc2.0 JTA驱动访问数据库 当故障发生的时候,事物的各个的组成部分可以按照符合两段提交协议的方式提交或回滚。 事物发生的时候,server重新启动后事物可以提交或回滚。 distributed.transaction.recovery的值为true或者false。j2ee安装后默认为false。 distributed.transaction.recovery=false transaction.time属性 在应用container-managed 事物的ejb中,你可以控制事物超时的间隔通过设置transaction.timeout的值 。例如: transaction.timeout=5 在设置以后,如果事物在5秒内没有完成,j2ee事物管理器将回滚它。 当j2ee第一次安装的时候,timeout的值时0代表没有超时。 只有使用container-managed 管理事物的ejb受到timeout的影响。至于在bean-managed和JTA transactions 中你可以引用 UserTransaction 的 setTransactionTimeout方法。同时你也可以在其他组建中 引用setTransactionTimeout方法:比如servlets和jsp。 8。端口 j2ee需要tcp/ip端口。修改config目录下的相应文件可以修改端口号。下表是端口号和相应的文件。 EJB 9191 ejb.properties http.port=9191 HTTP 8000 web.properties port=8000 HTTPS 7000 web.properties https.port=7000 Naming and Directory 1050 orb.properties port=1050 9191 端口用于提供client下载需要的stub类 8000 提供http服务 7000 提供https服务 1050 基于orb的jndi名字服务使用的端口 9。日志文件 j2ee server有几个日志文件。默认这些文件在logs目录下。编辑config/default.properties 文件中的 log.directory 属性可以更改默认目录。 log.directory=logs 同时你也可以编辑default.properties 文件更改日志文件的名字。例如:你可以修改log.output 属性的 值来修改the output.log 文件的名字。 一般来说,日志文件决定于启动j2ee的模式。(single还是multiple VM (virtual machine) 模式) Single VM 日志文件 默认的情况是Single VM 模式。在这种情况下,日志文件位于 $J2EE_HOME///ejb logs是在default.properties 文件中log.directory 属性指定的。host元素是计算机名称。 生成下列文件。 system.out system.err event.log output.log error.log system.out 和system.err文件包括ejb中 System.out 和 System.err的输出。如果你运行j2ee -verbose 参数,输出被写到stdout(标准输出) 和stderr(标准错误。输出)。system.out 和 system.err日志文件不 创建。只有config/auth.properties 文件中audit属性值为true时audit.lo才创建。 Multiple VM 日志 如果你用j2ee -mutiVM启动server,ejb和http服务在自己的虚拟机以单独的服务启动。每一个depploy的 应用程序也在自己的虚拟机中运行。日志文件和上述的一样,但是存放的目录不同。 目录如下: EJB $J2EE_HOME//ejb/ejbd HTTP $J2EE_HOME//ejb/httpd deployed application $J2EE_HOME//ejb/ web server日志 编辑web.properties文件中的内容,可以改变由web server创建的日志文件的名字。 10。安全 未授权用户 对于j2ee来说,当有未授权的用户试图调用ejb container的时候,j2ee必须存在一般意义上的未授权用户 存在。在j2ee中这个用户名字是guest,密码是guest123。你可以在auth.properties 文件中修改用户名和密码 。 default.principal.name=guest default.principal.password=guest123 Keystore密码 如果用户使用公钥访问https,认证信息放在/.keystore 文件中。同时user-home是 System.getProperty("user.home")的返回值。 keystore是一个典型的密码文件。默认的密码是changeit。可以在web.properties 文件中修改 keystore.password 属性的值来改变密码。 ANYONE 角色 在application deployment工具的security面板中,默认的情况下方法分配给ANYONE 角色。这样的结果 是所有的用户和组都可以调用它。如果你没有影射到一个特定的角色,每一个用户和用户都可以调用它。可以 在auth.properties 文件中设置anyone.role.name 的值来改变默认anyone角色。 钝化发生的条件:内存限制 当ejb container开始钝化一个ejb的时候,它把ejb保存在附属存储中并且试图重新分配内存。默认的情况 下,如果内存使用超过128m的时候钝化开始发生。可以编辑config/default.properties 文件中 passivation.threshold.memory 属性的值来修改默认值。 passivation.threshold.memory=128000000 值必须是一个正的整数。当你减少这个值的时候钝化现象回经常发生。 jndi name server host 如果jndi name server和j2ee server不在同一个机器上,你必须改变config/orb.properties 文件中host 属性的值。 host=localhost HTTP 文档根 默认的情况下,http和https服务的文档是public_html。你可以编辑web.properties 文件中documentroot 属性的值来改变它。 documentroot=public_html/ <淘宝热门商品:
 

78.00 元 

印疤修复液 消除深浅痘印 改善凹凸疤痕

 

32.00 元  

卖疯了 牙亮白 7天显著洁白牙齿


来源:程序员网

小小豆叮

JAVA调试技术

JAVA调试技术 前言 这份材料介绍JAVA的调试技术,范围涵盖普通程序和服务器端程序的调试。 很多程序员并没有认识到排除软件的错误的价值,如果你是一个JAVA开发者,就很值得读一读这个材料。在现代工具的帮助下,开发者成为一个好的调试者和成为一个好的程序员的重要性一样。 这个材料假设你已经有基本的JAVA编程的知识,如果你精通JAVA,这个材料也可以增加你很多知识。 如果你有其他语言的调试经验,你可以跳过基本知识部分。 即使是高级程序员开发的小程序也可能包含错误。你只需要理解调试的概念并熟悉合适的工具就可以成为好的调试者。这份材料将讲解JAVA调试的基本概念,也讨论高级的调试类型。我们将浏览不同的技术并且提供一些好的建议去帮助避免,追踪并最终修正程序的错误。 我们将通过一个调试范例以使你熟悉调试技术。我们也将使用开发源代码工具Jikes 和JDB向你演示如何调试服务器端和客户端程序。为了编译和运行范例代码,你需要先安装一个Java Development Kit (JDK) ,你可以参考后面的部分获得Jikes 和 JDB调试器。 关于作者 如果对这个材料的内容有任何问题,你可以联系作者Laura Bennett, lbenn@us.ibm.com。 如果对中文版的翻译有何意见和建议,请联系翻译者cherami ,cherami@163.net 。 Laura Bennett 是IBM的资深软件工程师。她获得Pace大学的计算机科学学士学位和Columbia大学的计算机科学硕士学位。她是developerWorks的JAVA传教士,同时也是站点的建设者。在他的空余时间,她喜欢和她的Lego MindStorm 机器人玩乐以及和她四岁大的TinkerToys搭建物体。 Cherami是一个软件工程师,闲暇之余翻译一些计算机文献,以期为中国的计算机软件事业做出一点微薄的贡献。 调试的基础知识 开始的情况 在JAVA语言的早期,一个典型的开发者使用非常陈旧的方法调试程序:使用System.out.println() 方法。代码的跟踪信息被打印到控制台、文件或者套接字。 很少有人能在第一次就写出完美的(没有任何错误)代码。因此,市场认识到了对于像C++ 程序员使用的调试器那样的工具的需要。Java开发者现在有很多调试工具可以选择,选择什么样的工具依赖于你的技术等级。通常新手使用GUI调试工具而有更多经验的程序员趋向于避免使用所见即所得的工具而更关心有更多的控制能力。没有哪个开发者不使用任何调试工具。调试器允许你穿越代码,冻结输出以及检查变量。开发者越有经验,调试工具越可以帮助他更快定位程序问题的位置。 Java调试器的类型 这里有几种Java调试技术的工具: IDE(集成开发环境) 包含它们自己的调试器 (例如IBM的VisualAge for Java, Symantec Visual Café以及 Borland JBuilder) 单独的GUI工具 (例如Jikes, Java 平台调试器 javadt, 以及JProbe) 基于文本和命令行的工具 (例如Sun JDB) 野蛮的使用编辑器 (例如Notepad 或者 VI) 检查堆栈描绘(stack traces) 你使用的 JDK, JSDI, JSP, 和HTML对你的选择都有影响。 IDE 和独立的GUI 调试器对于初学者是最容易的并且被证明是最节省时间的。调试器将引导你到程序崩溃的地方。在调试器里面执行程序,使用鼠标设置断点并穿越代码。使用这些调试器的不利方面是并非所有的IDE调试器都支持最新的Java API和技术 (例如servlets 和 EJB 组件)。 基于文本和野蛮的使用编辑器的技术提供更多的控制但是对于没有太多经验的程序员可能会花费更长的时间找出错误。我们称它们为“可怜人的”调试方法。 如果上面的都不满足你的需求, Java平台引入Java Debugging APIs使你可以创建符合你自己特定需求的调试器。 调试类型 这儿有很多调试方法,无论是在客户端还是服务器端。我们在这个材料里面包含下面的方法: 基本的Java字节码 (也就是使用System.out.println()) 使用注释 附加在一个正在运行的程序上 远程调试 需求调试(Debugging on demand) 优化代码的调试 Servlet, JSP 文件以及EJB 组件的调试 在后面会详细说明每一种类型的调试。 共同的错误类型 为了给你一个你将遇到什么的提示,我们在下面列出了开发者一次又一次遇到的普遍错误: 编辑或句法错误 是你最先和最容易遇到的错误。它们通常是键入错误引起的。 逻辑错误 不同于运行时错误,因为没有任何异常被抛出,但是输出不是期望的东西。这些错误的范围从缓冲区溢出到内存泄漏。 运行时错误 在程序执行时发生并且通常产生一个Java异常。 线程错误 是最难重复和跟踪的。 Java debugging APIs Sun已经定义了调试的结构,它们称之为JBUG。这是为了回应对真正的Java调试器的需要做出的。这些APIs帮助程序员建立符合自己需要的调试器: 接口应该和语言的风格一样是面向对象的。 例如线程和监视器这样的Java运行时特性应该被前面的支持。 可以进行远程调试。 在通常操作下的安全性不能被损害。 修正的Java Debugger (JDB) 既是体现Java Debugging API的概念,同时又是一个有用的调试工具。它用Java Debug Interface (JDI)重写并且是JDK的一部分。 JDB将在后面详细讨论。 准备一个调试用的程序 Java平台为调试过程提供语言支持。 你在用编译器编译你的程序时可以用编译选项指示编译器在目标文件中产生符号信息。如果你使用其它的编译器而不是javac,参考你的编译器的文档获得如何生成带有调试信息的目标文件。 如果你使用javac 编译器创建调试代码,使用-g 编译选项。这个选项让你在调试的时候可以检查本机类实例和静态变量。如果你没有使用该选项生成你的类文件你也可以设置断点和追踪代码,但是你将不能检查变量。(断点是手工指定的程序运行停止的点。) 即使你使用-g选项编译你的程序也不能调试JAVA平台的核心系统类的局部变量。如果你需要列出某些系统类的局部变量的列表,你需要使用-g选项编译这些类,也就是使用-g选项重新编译rt.jar 的类或者是 src.zip 里面的文件。然后指定你的 classpath 为正确的类文件使你用新编译的类运行你的程序。在Java 2下,使用 boot classpath 选项使得新类被首先加载。 记住如果你使用 -O 选项优化你的代码,你就不能调试你的类。优化会将所有的调试信息从类中去掉。 注意: 检查你的 CLASSPATH 环境变量是正确的才能让调试器和Java 程序知道在哪儿寻找你的类库。你也应该检查你的调试工具看是否需要其它的什么或者是环境变量。 设置断点 调试的第一步就是找到代码出错的位置。断点设置能帮你完成这个。 断点是你你放置在程序里面的临时标记,它使得调试器知道在哪儿停止程序的执行。例如,如果程序里面的某个申明引发问题,你可以将断点设置在包含那个申明的行上,然后运行程序。在那个申明被执行前程序停止执行。然后你可以检查变量、寄存器,存储器以及堆栈的内容,然后跨过(或执行)那个申明查看问题是怎么引起的。 不同的调试器支持不同的断点。一些通用的类型是: 行断点 在程序特定行的代码被执行前被引发。 方法断点 在到达被设置成断点的方法时被引发。 计数断点 在某个计数器达到或超过某个特定值时被引发 异常断点 在代码抛出一个特定异常时被引发 储存变化断点 在存储在特定地址范围的内容被修改时引发 地址断点 在被设置成断点的地址达到时被引发 注意: 一些调试器只在编译版本的Java代码 (使用just-in-time 编译器生成的代码) 上支持某些断点类型而不支持解释代码(使用javac 工具生成的代码)。一个例子就是地址断点。每个工具在你能设置断点的方式上可能有些不同。检查你的工具的文档。 你可能会问,我如何知道在哪儿放置断点? 如果你对这个问题完全没有感觉,你可以在main() 方法的开始设置断点 如果你的代码产生堆栈复写(stack trace), 在程序产生它的地方设置断点。你将在堆栈复写里面看到源代码中出问题的行号。 如果你的输出或者图形显示的特定部分没有正确的显示预定信息(例如文本域显示错误的文本),你可以在该组件被创建的地方设置断点。然后你可以单步执行你的程序显示和GUI对象相关的值。 经验将在最合适的地方设置断点。你在一个类或者程序里面可以设置多个断点。 通常,你在调试代码的时候会禁止、激活、添加、删除断点。工具会允许你查看你所设置的所有断点的位置同时给你一次删除所有断点的选项。 单步执行程序 单步执行程序是最终解决那些棘手的调试问题的方法。它允许你追踪类里面的方法体的整个执行过程。注意,你不需要设置断点就可以停止一个GUI程序的执行。 设置断点后在调试器里面开始执行程序,当遇到第一个断点后,你可以越过申明,进入方法体或类体,也可以继续运行直到下一个断点或程序结束。 在调试程序的时候经常遇到的术语有: 进入 执行当前行。如果当前行包含一个方法调用,执行被调用方法的第一行。如果类中的方法是用不带调试信息的选项编译的 (也就是没有使用 -g 选项), 你将看到No Source Available 消息。 越过 执行当前行而不会因为该行调用了一个方法或例程而停止。 返回 从当前执行点执行并立即返回到调用当前方法的行。 检查变量 通常,程序会因为一个变量的值没有正确设置而进行核心转储(core dump)。最常见的是试图进行一个值为null 的计算或比较以及除零。找出这种问题的最简单的办法是在错误发生的地方检查变量的值。最通常的情况是变量在那点没有得到预期分配的值。 可视化调试器通常有一个监视窗口显示你当前正在执行的类的所有局部变量的值。某些调试器甚至显示变量的地址或更进一步的允许你动态的改变变量的值以查看如果值是你原来预想的情况时程序是否能继续执行。命令行调试器通常提供命令提供相应的特性。使用命令行特性,你甚至可以通过显示数组的每一行和每一列的内容来查看整个数组。 虽然大多调试器只在监视窗口显示类里面的局部变量,还是有一些调试器允许你在变量超出范围后继续监视它。 一些调试器支持查看寄存器。注意这只能是查看编译的Java 程序而不能是解释的程序(字节码程序)。 堆栈复写(Stack traces) 当Java 程序进行内核转储(core dumps)时它在控制台产生我们称之为堆栈复写(stack trace) 的东西。堆栈复写告诉开发者程序发生问题的精确路径。它将说明类和方法名以及源代码中的行数 (如果你使用调试选项编译)。如果你在发生堆栈复写的开始处开始调试并停下,你可以向后查看你的代码看看实际上是什么申明被执行了。这是一个快速发现程序问题的办法。 你也可以使用下面的一个方法手动强制产生堆栈复写。 Throwable().printStackTrace() 在调用该方法的那个点产生堆栈复写。复写将显示方法调用所涉及到的线程。 Thread.currentThread.dumpStack() 只产生当前线程的一个快照。 当你需要理解在什么条件下你的程序会产生堆栈复写时使用强制复写。下面的程序是一个强制堆栈复写的例子。这个程序片断进行文件拷贝。我们通过比较两个文件的长度是否相等来判断拷贝是否成功。如果不相等,我们向文件写入复写然后强制打印堆栈复写(参看黑体的申明)。Throwable() 是java.lang 中的一个类, printStackTrace() 是Throwable() 的一个方法,它打印程序执行路径的复写。 public static boolean copyFile( String sourceFile, String targetFile) { ........ ........ // see if the copy succeeded. if (success) { // see if the correct number of bytes were copied long newFileLength = new File(targetFile).length(); if (oldFileLength != newFileLength) { Debug.trace(1, sourceFile + Constants.BLANK_STRING + Long.toString(oldFileLength)); Debug.trace(1, targetFile + Constants.BLANK_STRING + Long.toString(newFileLength)); Throwable().printStackTrace(); return false; } } else { Debug.trace(1, sourceFile); Debug.trace(1, targetFile); return false; } ........ ........ return true; } 你可能会发现堆栈复写中没有行号。这可以简单的称为“编译代码”,要产生行号,使用 nojit选项或者 Djava.compiler=NONE命令行参数 禁止JIT 编译器。如果你知道了方法和改方法所属类的名字,行号就不那么重要了。 诊断方法 Java 语言在Runtime() 类中提供方法跟踪你对JVM的方法调用。这些跟踪将产生你对JVM字节码的每一个方法调用的列表。注意这个列表可以产生大量的输出,所以在你的代码的小部分里面使用。 打开跟踪可以在代码中加入下面的行: traceMethodCalls(true) 关闭使用: traceMethodCalls(false) 打开JVM 并观察它向标准输出的输出。 <淘宝热门商品:
 

3.50 元  

联达电子音响材料网淘宝分铺

【联达电子】镀银优质九脚电子管管座

 

52.00 元  

【卡盟在线】

皇冠在线充|QQ黑钻腾讯黑钻地下城与勇士(DNF)黑钻3月


来源:程序员网

小小豆叮

GPRS、CDMA 1X受关注 中国迈向2.5G

曾几何时,一度在媒体热炒的3G在2001年终于降温,甚至开始有人对其市场启动提出质疑。但是就在去年这个市场与技术转型的时期,曾经被认为是过渡性技术的GPRS浮出水面,以其较为实际的技术与市场品质,开启了中国的2.5G时代。 其实中国移动和中国联通早就开始了关于GPRS的试验,并开始网络建设。到今年5月,中国移动GPRS一期工程结束,建设容量41万。7月9日,中国移动开始了在全国16个省(市)的25个城市的试运行,来自全国的2900名志愿者成为此次试运行的首批客户,这标志着我国进入了2.5G移动通信时代。其后中国移动GPRS二期工程开工,将覆盖全国160个本地网,并在77个本地网范围内实现漫游服务,并将增容用户169。到去年年底整个GPRS网完成全网联测。这样中国移动GPRS商用网能够覆盖全国241个城市。一个世界级规模的GPRS网络已经呈现于世人面前。 作为我国第二大移动运营商的联通公司今年的主要精力是放在了CDMA网络的建设上,但是同时联通也意识到了今后的移动通信的竞争的激烈和残酷,因此对于下一代技术丝毫不敢落后。在其12月22日的“CDMA之夜”的推广活动上,联通宣布,在12月31日基于IS―95A技术的CDMA网络全线开通之时,在北京、上海、广州、成都、杭州、南昌、海口等7个城市的CDMA 1X试验网也将同时开始试运行。 据悉,联通公司会依据市场情况与今年下半年推出CDMA技术的2.5G网络CDMA 1X,这就使得我国真正的进入2.5G竞争时代。届时,这种两种网络并存,两种2.5G业务竞争的状况,将是世界通信史上绝无仅有的。这也对两家运营商在业务的开发与推广上提出了更高的要求。 2001年回顾: 2001年7月12日,中国移动通信集团公司宣布,酝酿已久的GPRS业务已于7月9日开始在全国16个省(市)的25个城市投入试商用。全国2900名志愿者成为此次试商用的首批客户。此举标志着中国进入了2.5代移动通信。GPRS网络的试商用情况良好,但试商用中也发现了一些问题,这主要是由终端问题、网络调试问题等引起的。 2001年10月,诺基亚在中国移动全国范围的GPRS网络扩容中提供GPRS解决方案。扩容将使中国移动的GPRS网络覆盖从原来的16个省扩大到全国31个省。 2001年10月15日,上海移动率先推出GPRS扩大试商用。试商用期间,提供的应用服务主要包括无线E―mail收发、移动办公、在线聊天、即时信息、交互式游戏等,客户还可以用K java软件下载图片、小说、游戏等,用笔记本电脑通过GPRS实现无线上网。一期出现的主要问题已得到解决,GPRS终端越来越多,网络优化工作也已进行,掉线、接入速度等问题得到了较好解决。  2001年12月22日,王建宙表示,在联通CDMA网络今年12月31日全线开通之时,在北京、上海、广州、成都、杭州、南昌、海口等7个城市的CDMA 1X试验网也将同时开始试运行。 <淘宝热门商品:
 

198.00 元  

野葛根丰胸胶囊 植物萃取 天然健康

 

 

[玉缘阁精品和田玉]和田美玉 送物传情 13779692122翡翠


来源:程序员网

小小豆叮

Unify的eWave ServletExec拒绝服务漏洞

涉及程序: eWave ServletExec 描述: Unify的eWave ServletExec拒绝服务漏洞 详细: Unify的eWave ServletExec是一个JSP和Java Servlet引擎,它们被用作象Apache、IIS、Netscape等等流行的网络服务器的插件。 发送一个URL请求可能引起ServletExec servlet引擎突然终止,但是web服务器不会受到影响。 可以通过在URL前加上servlet路径前缀“/servlet”这样可以强制调用任意的servlet。一个名为“ServletExec”的servlet存在于服务端。 强制执行“ServletExec”servlet将导致servlet引擎初始化并试图在80口上绑定一个服务器线程。如果服务器已经运行,端口绑定操作将导致servlet引擎异常终止。 例如,如果ServletExec作为80端口上的web服务器插件运行在10.0.0.1上,攻击者可打开一个80端口的连接,发出如下的GET请求使servlet引擎异常终止。 nc 10.0.0.1 80 GET /servlet/ServletExec HTTP/1.0 或者从浏览器中存取URL:http://10.0.0.1/servlet/ServletExec 也能达到相同的效果。 日志文件中将记录如下内容: Received an exception when starting ServletExec: java.net.BindException: Address in use: bind 受影响的系统: Unify eWave ServletExec 3.0C 解决方案: 升级到 ServletExec 3.0E 版本: http://www.servletexec.com/downloads/ <淘宝热门商品:
 

48.00 元  

韩国同步时尚休闲卫衣长款全棉开衫外套

 

25.00 元 

重庆女人香专业减肥丰胸网~一品婷/美姿姿/脱脂减肥*批发代理


来源:程序员网

小小豆叮

Java开发工具与开发环境问答集

1 我要开始学习Java了,我需要准备些什么东西呢? 做为一个刚刚开始学习Java的新手,你应该至少准备如下东西: (1) 一个Java语言开发工具包(Java Devekopment Kit),其中包括Java 编译器和Java运行环境。推荐使用Sun公司开发的Java 2 SDK标准版。 目前版本的Java 2 SDK可以在http://java.sun.com/j2se/1.4/下载。 请根据你所使用的开发平台选取相应的下载连接。 (2) 一份Java语言API文档,目前版本的Java语言API文档同样可以免费 下载(http://java.sun.com/j2se/1.4/#documentation)。这份文档将是 你在学习与开发过程中最频繁用到的参考资料。 (3) 一个Java语言集成开发环境,能够在其中编辑Java代码,并且进行 编译与调试。本人推荐使用的集成开发环境是JCreator,这个软件可以 从www.jcreator.com下载。 2 集成开发环境的选择 作为新手,本人不鼓励你从一开始就是用各种各样的高级开发工具,例 如IBM公司的Visual Age for Java以及Borland公司的Java Builder。 使用这些开发工具不能够帮助你深入的理解Java的设计思想,因此也不 能够帮助你很好的学习Java。 一个能够编辑Java代码并且能够编译与调试Java程序的简单工具,往往 是新手的最佳选择。在我开始学习Java的时候,使用的是晕倒死的写字 板来编辑Java代码,在晕倒死的DOS提示符下编译和运行HelloWorld 程 序。根据版面上一些朋友的建议,推荐如下配置: (1) Windows: UltraEdit + JDK (2) Windows: JCreator + JDK (3) Linux : emacs + JDK 3 Java教程 本人强烈推荐刚刚开始学习Java的新手从Sun 公司的网站下载一份最新 版本的Java Tutorial,这个教程基本上覆盖了开发普通Java应用程序 所需要的各种知识,并且给出了大量的示范程序以及源代码。 下载地址:http://java.sun.com/docs/books/tutorial/index.html) 4 参考资料 一些好的Java程序设计参考资料包括: (1) Thinking in Java (2) Java 2 - The Complete Reference 如果你的英语水平还可以的话,请尽量直接阅读英文版的参考资料。 5 关于VJ++ 公正的说,VJ++是一个优秀的晕倒死应用程序开发工具,它是的熟悉 Java的程序员能够快速的为晕倒死平台开发应用程序。很遗憾的是, VJ++不是一个优秀的Java应用程序开发工具,因为它不符合目前版本 的Java标准。因此,如果你想学习Java的话,你应该放弃VJ++。 6 其它集成开发环境 IBM公司的Visual Age for Java和Borland公司的Java Builder,适 合于高级开发人员使用,不推荐刚刚开始学习Java的新手使用。 对Java语言已经比较熟悉的开发人员,可以参考Java World杂志所提 供的如下信息使用多个集成开发环境: http://www.javaworld.com/javaworld/tools/jw-tools-ide.html <淘宝热门商品:
 

160.00 元  

皇冠 店主亲身植物藻类瘦身劲减30斤

 

¥:8.80 

『五博』新奥尔良烤鸡腌料


来源:程序员网

小小豆叮

Apusic Application Server1.0中jsp源代码泄漏漏洞

软件介绍: Apusic Application Server1.0是Apusic公司开发出的中国第一个完整支持J2EE(Java 2 Platform, Enterprise Edition)的产品。Apusic采用纯Java语言编写,支持EJB1.1,Servlet,JSP,JMS等,支持多种平台。 漏洞描述: Jsp爱好者网站(http://jspbbs.yeah.net)在试用apusic server1.0产品中发现了一个可以泄漏jsp源代码的漏洞。 适用平台: Windows Nt/2000 + Apusic Application Server1.0 详细描述: 在访问JSP页面时,如果在请求URL的.jsp后缀后面加上一或多个'.',会泄露JSP源代码。 http://localhost:8080/index.jsp 服务器会正常解释。 http://localhost:8080/index.jsp. 只要在后面加上一个.就会导致源代码泄漏(可以通过浏览器的查看源代码看到)。 原因: 由于Windows在处理文件名时,将"index.jsp"和"index.jsp."认为是同一个文件。 解决方法: 我们已经联系了apusic公司,apusic公司现已更正这一漏洞,将很快发布补丁程序。 请随时留意apusic公司主页http://www.apusic.com发布的补丁程序信息。 后记: 我们对apusic服务器1.0版本进行了其它测试,发现目前APUSIC不存在其他多个应用服务器中发现的漏洞,如jsp后缀大小写,url插入/file/漏洞,以及%2E、%81等等漏洞,可能是由于apusic服务器软件发布比较晚的原因,所以特别注意了国外其他jsp服务器软件的漏洞问题。 <淘宝热门商品:
 

156.0元  

辉煌保健_保健品/粉粉/减肥产品/丰胸产品

 

 

皇冠舒友阁 顶级特效美容护肤 效果才是硬道理


来源:程序员网

小小豆叮

用Java通过DIIOP远程操作Domino服务器

最近在玩domino,积累点经验大家分享一下: 开发notes本来就是摸着石头过河,随时会碰到怪问题,结合上java更辛苦:( 但是notes有一些优点,比如全文检索,安全性,开发时效...所以至今仍然占据群件市场的一席之地.如果能把这些功能通过java调用,也算是废物利用吧:) 例子是发送邮件的,但是得到了session, 其它操作和Notes脚本编程没有什么区别了. 这里的操作例子是我公司的环境. web用户采用IIS的结合NT的认证, 因为NT和domino的账号同步, 因此无需用户再特别登录domino. 发送邮件也采用匿名发送, 在Principal域上标注发件用户, 收到的邮件几乎同Notes发送的没有差别. 操作domino服务器需要抽象类(提供连接操作)和实现逻辑操作的类Sendmail. 分别如下: =================================================================================== File: Domino.java: =================================================================================== package steeven.lotus; import lotus.domino.*; import java.util.*; //import lotus.notes.*; //这个类是抽象类, 其他Java程序扩展此类即可. /* 环境: 服务器: Domino5.01+NT4 客户端: Windows2000 准备: 打开Notes Administrator修改服务器文档, 按照Help设置DIIOP服务. 其中注意: 安全性: 运行受限制的 Java/Javascript: * 运行无限制的 Java/Javascript: * 仅允许列在通讯录中的用户访问服务器: 否(可匿名) 端口:internet的端口:IIOP: 验证选项: 名称和口令: 是 匿名: 是 2.在domino控制台: load diiop //启动diiop服务 tell diiop quit //关闭diiop服务 3.连接,可以不用load HTTP服务 推荐使用IOR, C:\Lotus\Domino\Data\domino\html\diiop_ior.txt copy里面全部内容, 含"IOR:" s = NotesFactory.createSessionWithIOR(IOR,user,pwd); //用户身份 s = NotesFactory.createSessionWithIOR(IOR); //匿名 3.匿名发送Email时推荐使用“Principal”域,在信箱会正确显示为你的设定值,唯一痕迹是看信时发件人多个Anonymous From域自动生成为"Anonymous",不可变。 4.调试注意:NotesException不可Cast成Exception否则得不到错误信息

  try{ 
    //diiop codes here 
  } 
  catch(NotesException e) {  //不可Cast 
      System.out.println(e.getClass().getName()+":"+e.text); 
      e.printStackTrace(); 
  } 
5. 运行环境,需要NOCR.jar,并且需要调用dll, 文件, 设定环境变量Path, 增加c:\lotus\ntoes, win2000下提示找不到xxxx.dll, 将nxxxx.dll copy后rename即可。 */

public abstract class Domino { 
  private final String host="dminoHost"; 
  private final String user="steeven"; 
  private final String pwd="password"; 
  private final String IOR = "IOR:010000002900000049444c3a6c6f7475732f646f6d696e6f2f636f7262612f494f626a6563745365727665723a312e3000000000010000000000000054000000010101000e0000003133332e3232312e3138382e3100acf6310000000438353235363531612d656336382d313036632d656565302d303037653264323233336235004c6f7475734e4f4901000100000000000000"; 

  protected lotus.domino.Session  s; 

  public Domino()  throws NotesException{ 
    createSession(); 
    System.out.println("domino:"+s.toString()); 
  } 
  private void createSession() throws NotesException{ 
//      s = NotesFactory.createSession(host,user,pwd); 
//      s = NotesFactory.createSessionWithIOR(IOR,user,pwd); 
      s = NotesFactory.createSessionWithIOR(IOR); 
  } 
} 

=================================================================================== 
File: Sendmail.java: 
=================================================================================== 

package steeven.lotus; 
import lotus.domino.*; 
import java.util.*; 
//import lotus.notes.*; 

public class Sendmail extends Domino{ 

  java.util.ArrayList grpUsers = new java.util.ArrayList(); 

  Database db; 
  Document memo; 
  RichTextItem rti; 

  private Vector to = new Vector(); 
  private boolean attachForm = false; 
  static String mailFooter = "\n\n\n此邮件由WebMail发送 http://www/mail.jsp\n\n"; 


  public Sendmail() throws NotesException{ 
    System.out.println("sendmail"); 
    db = s.getDatabase(null,"WebMail.nsf"); 
    memo = db.createDocument(); 
    rti = memo.createRichTextItem("Body"); 
        memo.setEncryptOnSend(true); 
        memo.setSignOnSend(true); 
        memo.sign(); 
    memo.setSaveMessageOnSend(true); 

  } 
  public Sendmail(String to,String from,String subject,String body) throws NotesException{ 
    this(); 
    setSendTo(to); 
    setFrom(from); 
    setSubject(subject); 
    setBody(body); 
    System.out.println("Sendmail with contructor"); 
  } 
  public Sendmail(String to[],String from,String subject,String body) throws NotesException{ 
    this(); 
    setSendTo(to); 
    setFrom(from); 
    setSubject(subject); 
    setBody(body); 
    System.out.println("Sendmail with contructor"); 
  } 
  public void setSubject(String n) throws NotesException{ 
    memo.appendItemValue("Subject",n); 
  } 
  public void setFrom(String n) throws NotesException{ 
    memo.appendItemValue("Principal",n); 
  } 
  public void setSendTo(String n) throws NotesException{ 
    to.add(n); 
    memo.appendItemValue("SendTo",n); 
  } 
  public void setSendTo(String n[]) throws NotesException{ 
    appendArray("SendTo",n); 
    for(int i=0;i
<淘宝热门商品:
 

3.80 元  

幸福生活 联盟津沽 种子蔬菜种子、花卉种子、园艺用品

【天津商盟】【皇冠信誉】食用草莓种子-观赏草莓种子-花种

 

68.00 元  

SOCOOL时尚女包五皇冠店~美一天~每一天~批发V零售

★五皇冠-SUPER LOVER黑白奶牛个性秋时尚翻盖斜挎包-3902★


来源:程序员网

小小豆叮

SilverStream Application Server 3.7白皮书

<淘宝热门商品:
 

冰之.点卡店 

冰之.点卡店

 

37.00 元  

深圳兴鹏电子/专业的索爱外壳配件供应商

【兴鹏电子】索爱W800外壳W800c机壳 高品质做工 比肩原装 大图


来源:程序员网

小小豆叮

关于VJ++的个人看法

公正的说,VJ++是一个优秀的晕倒死应用程序开发工具,它是的熟悉Java的程序员能够快速的为晕倒死平台开发应用程序。很遗憾的是, VJ++不是一个优秀的Java应用程序开发工具,因为它不符合目前版本的Java标准。因此,如果你想学习Java的话,你应该放弃VJ++。 <淘宝热门商品:
 

218.00 元  

2件全国包快递!韩国SHEZ~SZ超值春秋装4件

 

 

【广州商盟】意外金喜服装◎抵制暴利低价有好货◎收藏小店有惊喜


来源:程序员网

小小豆叮

如何实现一个打开文件或者是存储文件对话框?

AWT: FileDialog类 + FilenameFilter类 Swing: JFileChooser类 + FileFilter类 其中,基于Swing的解决方案功能更加强大,界面也更加美观。 <淘宝热门商品:
 

215.00 元  

08秋冬新款 D&G 优质面料修

 

¥:78.00 

皇冠舒友阁 顶级特效美容护肤 效果才是硬道理

皇冠热销 印疤修复液 消除深浅痘印等色印、有效改善凹凸疤痕


来源:程序员网

小小豆叮

有一些其它集成开发环境吗?

IBM公司的Visual Age for Java和Borland公司的Java Builder,适合于高级开发人员使用,不推荐刚刚开始学习Java的新手使用。对Java语言已经比较熟悉的开发人员,可以参考Java World杂志所提供的如下信息使用多个集成开发环境: http://www.javaworld.com/javaworld/tools/jw-tools-ide.html <淘宝热门商品:
 

毛毛爱吃桔子  

毛毛爱吃桔子

 

¥:21.00 

【义乌绘美家居】【收藏本店送礼品】


来源:程序员网

小小豆叮

探讨如何保护Java应用程序图像资源

张大志 (zdzwsz@cmmail.com)
2001 年 12 月

《Java应用程序内嵌图像资源的方法探讨》(李鲁群 (liluqun@263.net))山东科技大学计算中心)一文中写道:“在Java应用程序中,可以动态地调用显示图像文件(如:*.gif,*.jpg),不过令人感到美中不足的是,直接使用Java应用程序调用的图像资源,都必须以文件的形式存放在硬盘或网络上的,当应用程序分发给用户后,用户可以轻而易举地使用各种图像编辑软件,将与程序对应的图像文件资源篡改的面目皆非。试想,如果这些图像文件是重要的版权标志,那么后果肯定是应用程序开发者不希望看到的。因此,有必要采用一些措施将这些图像文件保护起来。”文中作者使用了图像构造方法:
Image img=Toolkit.getDefaultToolkit().createImage(byte[] map);

只需要将图像文件转换成Java源程序的一个字节数组类型的常量,嵌入源程序,然后直接构造出img对象即可实现源程序中内嵌图像资源以达到保护图象文件。

这不失为一种好的、可行的方法。我在此想说的是另一种方法。使用java.swing.ImageIcon类。ImageIcon类是一个可序列化的类。我们可使用,ObjectInputStream,ObjectOutputStream类。将图象文件用writeObject(Object obj)方法保存为一文件以达到保护图象文件。

主要程序代码:


ImageIcon icon = new ImageIcon("copy.jpg");
        ObjectOutputStream out=new ObjectOutputStream(new FileOutputStream("image.img"));
        out.writeObject(icon);

然后,再用readObject()方法造型为ImageIcon。

主要程序代码:


ObjectInputStream out=new ObjectInputStream(new FileInputStream("image.img"));
icon=(ImageIcon)out.readObject();

再用其他对象的方法显示图像即可。如:
public void paint(Graphics g){
g.drawImage(icon.getImage(),0,0,350,263,this); }

另外,你还可以用类似的方法给你的图象文件使用zip类进行文件压缩。可使文件更具有保密性。

主要程序代码:


                   ImageIcon icon = new ImageIcon("copy.jpg");  
                   ObjectOutputStream out=new ObjectOutputStream(new GZIPOutputStream(new FileOutputStream("image.img")));
                   out.writeObject(icon);

解压代码:
ObjectInputStream in=new ObjectInputStream(new GZIPInputStream(new FileInputStream("image.img")));
icon=(ImageIcon)out.readObject();

如果在一应用程序中,有多个重要图象文件,可以使用ImageIcon数组或者 java.util.List类,再使用上面的方法。当然也可以一个一个地保存为*.img文件。再反序列化还原。

关于作者
张大志,男,从事网页设计,网络程序开发。现在珠海一公司工作。我很喜欢java,研究JAVA程序设计有几年的时间,通过了SUN公司的SCJP认证,一直关注着java的发展。我的email:zdzwsz@cmmail.com 欢迎大家和我多多交流。
<淘宝热门商品:
 

67.00 

【漂亮宝贝】童装打底裤名牌男童裤子背心T恤公主裙

X2-82103青蛙皇子童装130-155CM女中童T恤背心短裤两件套238

 

 

【化妆品大联盟】☆美丽佳人☆╯护肤·美妆~ 冲三冠特惠!


来源:程序员网

小小豆叮

文件操作的基本原则是什么?

a. 避免多次访问磁盘,例如一次读出n个字节就比每次读出1个字节的访问效率要高很多。 b. 避免多次访问操作系统。 c. 避免多次调用文件存取方法。 d. 避免将字节和字符混淆处理,在Java语言中字节与字符的概念是不一样的,在涉及到双字节字符的问题上更是容易出错。 <淘宝热门商品:
 

16.00 元  

减肥极品魔芋胶

 

350.00 元  

【收藏本店天天有奖】 家家康 淘宝第一品牌家电商城!

亚都净化型加湿器 YZ-D231W 水公主 亚都十大经销商


来源:程序员网

小小豆叮

如何写系统分析书

如何写系统分析书 作者:邓磊   想和大家一起来谈谈在软件工程中我们所做的第一步:系统分析。希望我们中国的代码人能吸取更多更好的理论和实际的经验,有符合我们实际情况的系统分析、开发方法、步骤以及文档。   想和大家一起来谈谈在软件工程中我们所做的第一步:系统分析。希望我们中国的代码人能吸取更多更好的理论和实际的经验,有符合我们实际情况的系统分析、开发方法、步骤以及文档。系统分析,我个人认为它应该是能体现系统的灵魂性的文档。该文档应有什么内容,表达什么意思是我想在这里与大家探讨的问题。我觉得在系统分析书中应该有以下内容(视项目而定):   1、 系统需求说明 说明系统是一个什么样的系统,用市场上现有的系统来类比,用客户(或是我们自己)需要一个什么样的系统进行说明,力求完整。并对系统的发展可扩充性进行描述(现在没有哪个系统是一次OK的)。说明与现有的系统有什么相同什么不同,说明未来系统的发展方面以及可移值性等能预见的事情。   2、 系统资源说明 对系统所需要的软件、硬件资源进行说明。描述系统所需要的所有的TCO成本。包括人员、时间、设备、系统、一次性投入资金、持续性投入资金这样的所有资源。   3、 系统可行性分析 对系统的实施中的资源进行分析,说明投入的合理性和必然性,对其中的所有不可预见性的投入进行合理的量化说明,来说明系统的实施的可行性。   以上为我所想到的系统分析说明书中应出现的前三种文档,不知大家有什么想法,请赐教。 作为开发前期的工作,还应该包括:总体设计和详细设计。   总体设计这个阶段必须回答的关键问题:概括地说,应该如何解决这个问题?    首先,应该考虑几种可能的解决方案。例如,目标系统的一些主要功能是用计算机自动完成还是用人工完成;如果使用计算机,那么是使用批处理方式还是人机交互方式;信息存储使用传统的文件系统还是数据库……    通常至少应该考虑下述几类可能的方案:     低成本的解决方案    系统只能完成最必要的工作,不能多做一点额外的工作。     中等成本的解决方案      这样的系统不仅能够很好地完成预定的任务,使用起来很方便,而且可能还具有用户没有具体指定的某些  功能和特点。虽然用户没有提出这些具体要求,但是系统分析员根据自己的知识和经验断定,这些附加的能力  在实践中将证明是很有价值的。     高成本的"十全十美"的系统     这样的系统具有用户可能希望有的所有功能和特点。系统分析员应该使用系统流程图或其他工具描述每种  可能的系统,估计每种方案的成本和效益,还应该在充分权衡各种方案的利弊的基础上,推荐一个较好的系统  (最佳方案),并且制定实现所推荐的系统的详细计划。如果用户接受分析员推荐的系统,则可以着手完成本  阶段的另一项主要工作。   上面的工作确定了解决问题的策略以及目标系统需要哪些程序,但是怎样设计这些程序呢?   结构设计的一条基本原理就是程序应该模块化,也就是一个大程序应该由许多规模适中的模块按合理的层次结构组织而成。总体设计阶段的第二项主要任务就是设计软件的结构,也就是确定程序由哪些模块组成以及模块间的关系。通常用层次图或结构图描绘软件的结构。   详细设计总体设计阶段以比较抽象概括的方式提出了解决问题的办法。详细设计阶段的任务就是把解法具体化,也就是回答下面这个关键问题:"应该怎样具体地实现这个系统呢?"这个阶段的任务还不是编写程序,而是设计出程序的详细规格说明。这种规格说明的作用很类似于其他工程领域中工程师经常使用的工程蓝图,它们应该包含必要的细节,程序员可以根据它们写出实际的程序代码。通常用 HIPO 图(层次图加输入/处理/输出图)或PDL语言(过程设计语言)描述详细设计的结果。   我想这样的文档系统的思路是一个慢慢积累的过程,如JJX同志所说,我们现在有太多的形式上的东东,它并不是一个程序员真正需要的系统分析/设计书,对于系统的设计到实施到最后的代码以及验收有太多的改动和变化,我们正在一个极不规范的系统中生存,所以我们不可能有太多的选择,只能抄抄应付了事。所以与大家一起探讨一个真正适合我们的文档模式,这个模式或是说模板能为我们的代码工作减少负担,带来更多的动能:)   就目前的开发思路,应用环境和编程方法来说,传统的需求分析-系统分析-概要设计-详细设计-……已越来越不行了,因为:   1、 现在的应用和以前大不一样。现在的应用是一种庞大的集成,包括跨平台,网络,数据库等等,而且新技术的出现越来越快,任何人都无法精通甚至是掌握全部技术。简单例子:现在有Windows,Unix,Linux等平台,有SQL Server,Oracle,Sybase等数据库,有C++,VB,Delphi等工具,谁能全部精通呢?如果不能,那么如何确定是Windows+SQL Server+Delphi好还是Unix+Oracle+C++合适?   2、 客户没有需求。我做过银行、电信等大客户及各种小客户,他们无一另外的说"我要做一个OA系统","我要做一个企业网","我要做一个……"。可他们无法确定要实现什么,因为很少有用户是真正由于业务的需求而做项目的;而且他们也不清楚能够实现什么(因为他们不懂notes,不懂企业网)。   3、 需求与环境的变化。由于在项目开发前客户没有实质性的需求,加上软件开发人员不熟悉客户的业务,就导致在开发过程中需求的不断变化,严重时将导致分析与设计作废。   4、 对象化的工具和过程化的程序现在的开发工具已经很对象化了,而我们开发的程序却很过程化。也就是说你虽然努力的模块化,层次化,可只要运行环境有所变化,你还要不断地修改再修改。      上述的实际情况说明我们确实需要把实际中的做法修改一下。一个项目如果做到了80%的时候才真正明确这个系统是什么样子的话,我认为是设计者的失败。所以在设计阶段不但应该做好传统做法的各种文档和论证,而且,应该做一些具体的设计工作。比如,系统的整体运行设计及系统各功能模块的具体设计。而且这些设计应当都有详细的设计说明书。当这些说明书完成后,应当能做到:随便找个程序员他都能只通过看某功能模块的设计说明书就能够开始代码的开发而不用再重新思考该怎样去做了,程序员在这里就真的只是一个设计者的实现工具。当然,也象某些兄弟说的那样,现在的系统都越来越繁杂、越来越庞大、越来越向集成性质靠拢,似乎是没有多少人能掌握具体用什么做效果如何,但关键就在这里。莫非真的没有人能做到这点吗?非也!只不过是目前的显示情况是,设计人员的水平偏低,有些公司的设计人员根本就没有多少的开发经验,他又怎能了解太多的系统呢。   系统设计在目前看来似乎是个拿钱多干活少的工作,这是不正常的现象。培养一个程序员根本不用花多大的力气,一个人只要不太笨不太蠢,给他一个机会,相信就能掌握某门技术或方法。但要掌握若干种方法,就不是能够通过速成解决的了。问题也在于此。目前似乎所有的系统设计人员都能够设计所有的东西。其实不然。很多人都有知识的局限性,这就决定他只能对某些方向的东西做出决策和设计。客户固然不知道他要做什么,但我们应该知道。如果在前期能够多接触用户、多深入实际,把设计人员当成客户工作中的一员,他就能够真正了解到客户的需求,当然也就能够为他做出合适的设计。   至于说到各种系统之间的好坏对比,我想,任何东西都没有绝对,有的只是某些方面的权衡。比如性能或空间的权衡、价格和性能的权衡和功能侧重上的权衡等等如此而已。计算机里的东西没有哪一样的存在不是包含了这种权衡在内的。虽然从商务上似乎总想说服用户什么东西好什么东西不好,其实从技术上讲无所谓好和不好,有的只是区别及该区别所针对的问题而已。这就象有人总在争论Linux和Window到底谁好一样。或许从"技术"上讲,Linux比Window好,但这其实并不公正,因为漂亮的GUI界面和友好的人际交互同样应该是"技术"中应该考虑到的一部分。把所有的东西结合起来一看就知道没有绝对的好。所以,不见得非要在用户决定之前由系统设计的人员事先来为各种方案做个排队,只需要了解用户的需求,然后从大方向上决定一个方向再做具体设计就可以了。   在这里我只从过去的实践角度举例来说,至于理论方面实在没时间深入。首先,认同两个说法:   1. 项目(或说工程)有三个主要方面:功能,时间,成本。   2. 系统分析的任务:将用户的业务逻辑转化为程序逻辑,计算时间和成本。   让我们来做一个概要设计:   1) 功能:简单的信息发布系统。   2) 系统分析员根据项目的时间和成本,在充分权衡各种方案的利弊的基础上提出SQLSERVER+CORBA+DELPHI的方案……用户很满意,OK,开始详细设计:   1) 为方便用户的安装使用三层结构。   2) 客户端包含信息分布和查询两个模块。   3) 使用各种图或语言描述各种函数,过程,模块,层次……一切顺利,开始编码……编码完成,用户试用,这时用户提出:在客户端要能实时跟踪信息的变化,而你却发现DELPHI的CORBA不支持回调!转用其它方按时间上不可能,补救措施也不灵(比如使用timer,但客户的网络环境不允许多个用户的频繁刷新),怎么办?   分析一下问题出在哪里:   1) 有人会说系统分析员不真正了解客户的需求,可这不可能(项目时间的限制)也不现实(不可能让分析员到每个岗位都去操作一下)。   2) 有人会说系统分析员的知识和经验不足,可现实却是分析员认为应该的客户觉得没必要,而客户觉得必须的分析员又不可理解。这是不同的工作造成的,俗话说隔行如隔山。   3) 有人会说系统分析员的水平不够,可问题绝大部分是出在细节而不是大方向上,掌握全部细节可能吗?这就是一个长期困扰我的问题:细节(而不是方向)往往成为成功与失败的关键(注意,这里的成功是包含了时间和成本的),而细节是不可能全部发现与分析清楚的。   如何在这种不完整的需求上构造完整的系统呢?或是根本不可能呢?这种问题我遇到过多次──当然都是别人做的设计。但我认为这个过程中不足的地方就是:把东西做死了,没有切实地为用户着想。很多人在做设计时,可能考虑的最多的是实现上的方便,而不是系统的扩展及更新。需知道,用户的需求是在不断变化的,如果总是在设计前就"善意"地替用户假设,是难以预料后事的结局的。所以我想,在设计阶段就因该把可能出现的问题都摆到桌面上讨论,包括其特点、效果和后果,而不是自以为是地、好心地替用户"假设"。其实一个系统设计的优劣,其系统的扩展性能是一个很重要的指标,一个单纯就事论事地针对某件事情而做出的"专用"系统是没有任何远见的。 <淘宝热门商品:
 

¥:6.98 

四皇冠 值得您收藏的包店 冲五冠 5i贝贝外贸包店◢

◣四冠◆贝妈家◢出口英国★荔枝纹钉扣简约短款钱包◆特价6.99

 

¥:50.00 

【北京同仁堂国药】


来源:程序员网

小小豆叮

集成开发环境的选择?

作为新手,本人不鼓励你从一开始就是用各种各样的高级开发工具,例如IBM公司的Visual Age for Java以及Borland公司的Java Builder。使用这些开发工具不能够帮助你深入的理解Java的设计思想,因此也不能够帮助你很好的学习Java。 一个能够编辑Java代码并且能够编译与调试Java程序的简单工具,往往是新手的最佳选择。在我开始学习Java的时候,使用的是晕倒死的写字板来编辑Java代码,在晕倒死的DOS提示符下编译和运行HelloWorld 程序。根据版面上一些朋友的建议,推荐如下配置: (1) Windows: UltraEdit + JDK (2) Windows: JCreator + JDK (3) Linux : emacs + JDK 我建议如果是windows系统使用(1),可以在本站的工具下载里下载UltraEdit8.0 <淘宝热门商品:
 

 

天使名妆 08日韩版秋季OL洋装平价针织2件包邮 时尚only韩国代购

 

12.00 元  

最新奇的负离子手表,减压手表


来源:程序员网

小小豆叮

如何列出windows下的逻辑分区?



public void ListDisks() 
  {   File[] roots = File.listRoots(); 
      for (int i=0; i
<淘宝热门商品:
 

 

淘宝紫砂壶第一皇冠!淘宝最大的信用度第一的紫砂壶大卖家!

 

27.50 元  

兼济天下 公司运营 多家实体店 毛巾 浴巾 美容巾 浴袍 毛巾被

【皇冠信誉 专业做毛巾】外贸原单★素色绣小圆点浴巾◎加厚


来源:程序员网

小小豆叮

我有(没有) C++ (Java) 的编程经验,请问我应该如何开

由于Java是一种纯粹的面向对象的语言,所以如果您没有C++或Java的经验,我们建议您在着手J2ME开发之前,最好首先了解面向对象开发的一些基本概念和应用。然后,您可以参考以下步骤来做为开端: 1>一台PC机。建议最低PII300,128MB内存,4GB硬盘,56K英特网连接。Windows操作系统。 2>JDK1.2.2或以上,JDK1.3可以从http://java.sun.com/j2se/1.3/download-windows.html下载,约30MB。 3> 下载摩托罗拉的J2ME软件开发包,请访问https://commerce.motorola.com/idenonline/ideveloper/index.cfm,注册后,点击TOOLS & RESOURCES链接,再下载MotoSDK Windows版本。 安装完毕后,您可以参考MotoSDK的示例程序写代码并在模拟器中运行了。 <淘宝热门商品:
 

118.00 元 

【冲皇冠】八心八箭瑞士钻石六爪经典钻戒指

 

27.50 元  

兼济天下 公司运营 多家实体店 毛巾 浴巾 美容巾 浴袍 毛巾被

【皇冠信誉 专业做毛巾】外贸原单★素色绣小圆点浴巾◎加厚


来源:程序员网

小小豆叮

Motorola相关J2me工具下载

<淘宝热门商品:
 

109.00 元  

薇薇礼品阁

电视/TV购物热销款平衡左右摇摆踏步机送垫子★健身、瘦身、减肥

 

350.00 元  

【收藏本店天天有奖】 家家康 淘宝第一品牌家电商城!

亚都净化型加湿器 YZ-D231W 水公主 亚都十大经销商


来源:程序员网

小小豆叮

让手机变成流动钱包?Java加IC卡技术可做到

“只要下载服务提供商开发好的结算用应用程序,并使用这一程序将手机上的个人信息通过网络发送到远程计算机上,就可以完成整个结算过程”。   为使这样的结算成为现实,法国Gemplus公司与K Laboratory展开了合作。两家公司将共同制订使用支持USIM卡以及Java手机进行结算时所需要的接口标准。Gemplus公司是USIM卡及目前使用的SIM卡等内置在手机中的IC卡主要生产厂家,NTT DoCoMo率先进行的第3代移动通信服务“FOMA”就使用了该公司的IC卡。而K Laboratory则拥有用于手机的Java软件开发技术。在各自领域都颇有建树的两家公司的联手,意在引导具有极大潜在需求的“移动电子商务(Mobile Commerce)市场。   两家公司将以共同开发的技术为基础,于2002年2月在法国举办的GSM手机展览会“3GSM World Congress”上进行演示。与其他的因特网相关技术一样,届时将先向人们展示实际效果,然后再将该技术提供给业界团体以及标准化机构。   二者结合的背景:USIM卡性能有限,手机不够安全   对结算服务而言,将支持Java的手机与USIM卡结合起来是最合适不过的。   USIM卡为IC卡的一种,是带有微处理器、EEPROM、RAM的超微型计算机。不过尽管它可以保存个人信息,但由于处理器性能太低、存储容量又小,因此只能进行最简单的处理。所以“如果充分利用手机所具备的输入功能、显示功能、通信功能,则可以进行更高速度的处理、图像显示以及外部设备协同处理数据”(K Laboratory董事长、总经理真田哲弥)。而且,对于Java手机而言,即使在购机后也可以很方便地追加结算应用程序或者各种最新功能。   而对手机来说,要想提供安全的结算服务,USIM卡又是必不可少的。   为使手机上记载的个人信息不被外部的非法操作读取或破坏,通常手机都应该具备有严密的保护。因此,没有USIM卡的手机上,对采用Java应用程序使用个人信息进行了严格的限制。   而支持Java的手机与USIM卡结合以后,这样的限制便有望放松。至少,USIM卡上的信息不容易被来自外部的攻击破坏。这就是平常所说的“抗损性”,也是IC卡所共有的特征。   标准化组织行动迟缓   尽管3GPP决定制订有关USIM与手机结合的标准,但“真正讨论结算所必需的标准,还需要时间。我们正是因为等不及,所以才开始合作开发这一标准的”(K Laboratory真田)。据称两家公司共同开发的标准,预定将提交3GPP等标准化机构审议。   手机服务发展迅速,而制订的标准却常常滞后。Java手机和USIM卡遇到的便是典型事例之一。 <淘宝热门商品:
 

46.00 元 

千姿百袋 淘宝第一热销包包!特价疯抢日韩时尚通勤手提包14色

 

 

[玉缘阁精品和田玉]和田美玉 送物传情 13779692122翡翠


来源:程序员网

小小豆叮

基于CORBA/WEB技术构建三层体系结构的应用

1 问题提出 在应用系统开发过程中,CLIENT/SERVER体系结构得到了广泛的应用 。其特点是,应用程序逻辑通常分布在客户和服务器两端,客户端发出数据资源访问请求,服务器端将结果返回客户端。但CLIENT/SERVER结构存在着很多体系结构上的问题,比如:当客户端数目激增时,服务器端的性能会因为负载过重而大大衰减;一旦应用的需求发生变化,客户端和服务器端的应用程序都需要进行修改,给应用维护和升级带来了极大的不便;大量的数据传输增加了网络的负载等等。  随着分布式对象技术的逐渐成熟,多层分布式应用体系结构得到了越来越多的应用。应用系统只有向多层分布式转变,才能最终解决CLIENT/SERVER结构存在的问题。在多层架构下,应用可以分布在不同的系统平台上,通过分布式技术实现异构平台间对象的相互通信。将应用系统集成于分布式系统之上,能极大地提高系统的可扩展性。   在多层分布式应用中,在客户端和服务器之间加入了一层或多层应用服务程序,这种程序称为“应用服务器”。开发人员可以将应用的商业逻辑放在中间层应用服务器上,把应用的业务逻辑与用户界面分开。在保证客户端功能的前提下,为用户提供一个简洁的界面。这意味着如果需要修改应用程序代码,只需要对中间层应用服务器进行修改,而不用修改成千上万的客户端应用程序。从而使开发人员可以专注于应用系统核心业务逻辑的分析、设计和开发,简化了应用系统的开发、更新和升级工作。 2 CORBA 简介 CORBA是Common Object Request Broker Architecture的缩写,它是分布计算机技术的发展结果,CORBA技术的成功在于,它除了能够解决由于多个系统层次上的异构带来的“孤岛”问题,还在理论和技术上扩展了客户/服务器的模式,使系统具有良好的可伸缩性,便于系统的开发与升级,保护已有投资。 CORBA体系的主要内容包括以下几部分, (1) 对象请求代理ORB(Object Request Broker):负责对象在分布环境中透明地收发请求和响应,它是构建分布对象应用、在异构或同构环境下实现应用间互操作的基础。 (2) 对象服务(Object Services):为使用和实现对象而提供的基本对象集合,这些服务应独立于应用领域。主要的CORBA服务有:名录服务(Naming Service)、事件服务(Event Service)、生命周期服务(Life Cycle Service)、关系服务(Relationship Service)、事务服务(Transaction Service)等。这些服务几乎包括分布系统和面向对象系统的各个方面,每个组成部分都非常复杂。 (3) 公共设施(Common Facilitites):向终端用户提供一组共享服务接口,例如系统管理、组合文档和电子邮件等。 (4) 应用接口(Application Interfaces):由销售商提供的可控制其接口的产品,相应于传统的应用层表示,处于参考模型的最高层。 (5) 领域接口(Domain Interfaces):为应用领域服务而提供的接口。如OMG组织为PDM系统制定的规范。 CORBA的产生有其特定的背景,它是在面向对象的技术兴起,客户/服务器模式普遍得到应用的前提下,为屏蔽通信和实现细节的需求,继承已有系统,消除“孤岛”现象而产生的。他弥补了传统分布处理系统的不足(如RPC等),具有很多新的特色: (1) 引入代理(Broker)概念。代理起到如下作用:完成对客户方提出的抽象服务请求的映射;自动发现和找到服务器;自动设定路由,实现服务方程序的执行。 (2) 客户方程序与服务方程序完全分离。用传统的客户/服务器方式有很大的不同,客户将不再与服务方发生直接的联系,而仅需要与代理发生联系,客户与服务器方都可方便升级。 (3) 提供“软件总线”机制。任何应用系统只要提供符合CORBA系统定义的一组接口规范,就可以方便的集成到CORBA系统中,这个接口规范独立于任何实现语言和环境。如此,客户应用于服务对象之间可以透明地交互运行,实现应用软件在“软件总线”上的“即插即用”。 (4) 分层的设计原则和实现方式。CORBA系统的底层核心是一个精练的系统,各种复杂系统和应用可以由核心扩展和延伸。 CORBA技术是先进技术发展的结果,它将面向对象的概念揉合到分布计算中,使得CORBA规范成为开放的、基于客户/服务器模式的、面向对象的分布计算的工业标准。 3 CORBA与WWW 相结合 WWW技术迅速发展,它已不再仅仅是超媒体信息的浏览工具,以逐步成为人们进行事务处理的前端。由于分布对象的计算技术,特别是CORBA技术对于提高WEB的网络计算能力有着无可比拟的巨大作用,CORBA与WWW技术迅速融合,产生诱人的技术前景。 CORBA与WWW结合,构架出真正的三层体系结构。这种三层的体系结构,以分布对象技术为基础构架,增加了应用层,将客户层与资源层隔开,降低了Web服务器的负载,避免了Web服务器的性能缺陷对整个性能的影响。并且具有连接缓冲,负载均衡,安全管理等功能,从而提高了Web应用整体的灵活性,可伸缩性,可扩展性。   该结构中,CORBA客户方程序从Web服务器上下载执行,与应用服务器上的CORBA应用对象通过IIOP(Internet-Inter-ORB Protocol)协议进行通讯,调用其指定的操作。CORBA应用对象首先对客户的请求进行认证和解释,根据客户请求的内容,或是直接访问资源层的数据库,或是与网络上的其它CORBA对象交互,共同完成客户请求。CORBA-WEB体系与ActiveX,JAVA RMI(Remote Method Invocation)比较起来,有明显优势。 在CORBA与Web的结合技术上,JAVA是CORBA结合Web的一个很好的切入点。CORBA规范中定义了IDL/Java的映射,CORBA产品提供商则根据规范开发了Java ORB。 JAVA ORB不仅能开发分布式的JAVA应用,更重要的是它能够开发WEB的CORBA应用。 Java ORB是基于CORBA的Java应用的中心,Java客户,包括Applet和Application,通过桩(Stub)代码向本地的Java ORB发出请求,本地ORB再与服务器方的Java ORB进行IIOP通讯,服务方ORB根据请求的内容调用相关的骨架(Skeleton)代码由指定的对象实现来完成请求,并将请求结果按原路返回给客户。Java ORB作为信息中介的桥梁,负责远程对象请求的生成、编码、传输等工作。 4 Java的CORBA/WEB应用实现概述与图解 在进行JAVA的CORBA/WEB应用系统开发时,首先要建立IDL描述文件,然后把IDL描述文件通过IDL/JAVA进行编译,生成相应的桩和骨架文件。接下来采用JAVA分别实现服务器方和客户方程序,然后将服务器方主程序和客户方程序分别与骨架文件和桩相联编,并将该客户端程序嵌入到HTML页面中,这样,通过浏览器浏览该页面,就可以调用服务器方应用对象实现的操作。 5 JBuilder 4 Enterprise 开发CORBA/WEB应用实例 实例思路 本实例将建立一个银行账号查询程序。先创建一个IDL文件,执行idl2java编译器,生成服务器端的骨架和对应的客户端的桩,然后,基于以上生成的框架,创建服务器端JAVA程序和html客户端程序。 实例开发工具 Borland Jbuilder 4 Enterprise (1) 选择File|New Project 菜单,在Jbuilder 中创建一个新项目。 (2) 修改Project name为BankTutorial,修改Root path 为c:sample,单击完成。 (3) 选择File|New,在Enterprise页上选择Sample IDL。 (4) 在File Name框中输入BankTutorial.idl,单击OK,将创建一个示例IDL文件。在IDL文件中输入如下代码: module Bank { interface Account();{ float balance(); }; interface AccountManger { Account open(in string name); }; }; (5) 在project 栏中右击BankTutorial.idl文件。选择Make,执行idl2java编译器。 (6) 创建服务器端程序:选择File|New,从Enterprise页中选择CORBA Server Application。 (7) IDL File 框中选择c:sampleBankTutorialscr BankTutorial BankTutorial.idl。选择Generate Visible Application With Monitor,为服务器程序创建一个监控界面。单击OK。服务器程序名为BankServerApp.java。 (8) 在具体项目开发中,CORBA接口服务器端实现,可加到project栏中的banktutorial.Bank.server相应类里。本实例暂不加任何用户代码。 (9) 创建CORBA的HTML客户端程序,选择File|New,从Enterprise页中选择HTML CORBA Client 。 (10) HTML CORBA Client 向导中,IDL File选择与生成服务器端对应的IDL文件,即:c:sampleBankTutorialscr BankTutorial BankTutorial.idl。package选择banktutorial,单击OK,将生成HTML CORBA Client相关文件,其中会生成一个jsp页面文件。 (11) 关客户端的程序,可加到project栏中的banktutorial.Bank.clienthtml相应的类中。本实例暂不加任何用户代码。 (12) 译项目,选择project|Make Project “BankTutorial.jpx”。 (13) 启动Smart Agent,选择Tools|VisiBroker Smart Agent。 (14) 启动服务器程序:在project栏中右击文件BankServerApp.java,选择Run。在屏幕上将显示服务器端运行界面。 (15) 运行HTML 客户端程序:在project栏中右击文件FormBank.jsp,选择Web Run。在屏幕上将显示客户端运行界面。此时,如果打开浏览器,输入地址: http://localhost:8080/scr/banktutorial/FormBank.jsp ,在浏览器中会显示相应界面。 (16) 一个基于CORBA/WEB技术的三层结构的应用框架已经建立了。 6 小结 基于CORBA/WEB技术建立三层结构的应用,有效地解决了在CLIENT/SERVER体系结构下负载平蘅、系统伸缩性等问题,JAVA是实现CORBA/WEB技术很好地切入点,Borland Jbuilder 4 Enterprise 提供了纯JAVA开发环境,为实现CORBA/WEB技术提供为强大地技术支持。 参考文献 [1] Jin Huang. Internet/CORBA-based Multi-Agent System for Tele?Design and Manufacturing. ICAMT′99,1999.6 [2] OMG. The Common Object Request Broker: Architecture and Specification. Revision2.0, 1995.7 <淘宝热门商品:
 

205.00 元  

东菱小熊贝尔莱德艾美特(面包机酸奶机挂烫机电暖器礼品小家电)

双皇冠,产地代理『艾美特暖风机HP2009』2000W功率,浴居两用

 

128.00 元  

【广州商盟】*大学生淘宝皇冠第一店-鞋神--三人行出口剩余旗舰店

【大学生皇冠店】new balance纽巴伦378经典款 天蓝


来源:程序员网

小小豆叮

如何获得某一个目录下的文件列表?



File MyDir = new File("C:/Windows/."); 
String[] FileNames = MyDir.list(); 
<淘宝热门商品:
 

35.00 元  

08新款泰迪熊出口日本 1米超大号 抱抱熊/趴趴

 

205.00 元  

东菱小熊贝尔莱德艾美特(面包机酸奶机挂烫机电暖器礼品小家电)

双皇冠,产地代理『艾美特暖风机HP2009』2000W功率,浴居两用


来源:程序员网

小小豆叮

中间件:推动分布式应用

中国软件行业协会副秘书长 吴克忠   IDC预测,在1997~2002年期间,增长率最高的中间件将集中在消息中间件、交易中间件、对象中间件、应用服务器中间件和数据访问中间件。与此同时,中间件技术作为软件行业正在崛起的一个崭新的分支,正在全球范围内迅猛发展,并把分布式应用推向了一个新的境界。   分布式对象技术主要有三种架构标准:COM/COM+、Java和CORBA,这些标准极大地促进了对象中间件技术的发展。随着面向对象应用系统的逐渐增长,对象中间件的需求也在逐年加大。对象技术的优势和对象中间件的标准化,促使对象中间件的功能将最终涵盖其它几类中间件的功能而成为主流。   从企业分布计算的角度出发,对CORBA、DCOM和Java三种技术应该依据三个原则进行分析比较:集成性,主要反映在基础平台对应用程序互操作能力的支持上;可用性,要求采用的软件组件技术必须是成熟的技术,相应的产品也必须是成熟的产品;可扩展性,集成框架必须是可扩展的,能够协调不同的设计模式和实现策略,以迅速反映市场的变化和技术的发展趋势。   Java和CORBA很大程度上可以看作是互补的。CORBA不只是对象请求代理ORB,还是一个非常完整的分布式对象平台。它可以扩展Java在网络、语言、组件边界、操作系统中的各种应用规格。其次,Java也不仅仅是与CORBA捆绑的语言,而且也是一个运行对象的“便携式OS”,并且允许CORBA对象在主机、网络计算机和蜂窝电话等应用上运行。此外,Java创建了可移动对象并将它们分发出去,而CORBA可以将它们连接在一起,并与计算环境中的各种对象和应用相互集成。   由此可见,国际上中间件的开发技术是分别建立在以上三种架构规范上的。我国的中间件开发商也在向这个方向发展,例如,金蝶开发的APUSIC应用服务器是完全支持J2EE规范的应用服务器。其实,我国软件企业的国际化是大势所趋,基于Web技术的软件开发是软件企业的主流技术和市场的主导方向。 <淘宝热门商品:
 

¥:7.80 

高更食品极美滋新奥尔良系列烧烤腌料皇冠旗舰店

【皇冠之家推荐】Jumex极美滋㊣葱香烧烤腌料70g/7.80新品推荐

 

100.00 元 

韩国手表正品intercrew品牌手表LED手表


来源:程序员网

小小豆叮

有什么参考资料?

一些好的Java程序设计参考资料包括: (1) Thinking in Java (2) Java 2 - The Complete Reference (3) Java 核心系列 如果你的英语水平还可以的话,请尽量直接阅读英文版的参考资料。 <淘宝热门商品:
 

9.80 元  

恒睿日本长筒棉袜批发网

疯狂促销 韩国进口复古百搭格子围巾风扉全球明星必备 只要9.8

 

46.00 元 

千姿百袋 淘宝第一热销包包!特价疯抢日韩时尚通勤手提包14色


来源:程序员网

小小豆叮

Java的数据转换

1 字符串转换成数据 字符串转换成整数: String MyNumber ="1234"; int MyInt = Integer.parseInt(MyNumber); 字符串转换成byte, short, int, float, double, long等数据类型,可 以分别参考Byte, Short, Integer, Float, Double, Long类的parseXXX 方法。 2 数据转换成字符串 整数转换成字符串: int MyInt = 1234; String MyString = "" + MyInt; 其它数据类型可以利用同样的方法转换成字符串。 3 十进制到其他进制的转换 十进制整数转换成二进制整数,返回结果是一个字符串: Integer.toBinaryString(int i); Integer和Long提供了toBinaryString, toHexString和toOctalString方 法,可以方便的将数据转换成二进制、十六进制和八进制字符串。功能更 加强大的是其toString(int/long i, int radix)方法,可以将一个十进 制数转换成任意进制的字符串形式。 byte, short, float和double等数据类型,可以利用Integer或者是Long 的toBinaryString, toHexString, to OctalString和toString方法转换 成其他进制的字符串形式。 4 其它进制到十进制的转换 五进制字符串14414转换成十进制整数,结果是1234: System.out.println(Integer.valueOf("14414", 5); Integer和Long提供的valueOf(String source, int radix)方法,可以 将任意进制的字符串转换成十进制数据。 5 整数到字节数组的转换 public static byte[] toByteArray(int number) { int temp = number; byte[] b=new byte[4]; for (int i = b.length - 1; i > -1; i--) { b[i] = new Integer(temp & 0xff).byteValue(); temp = temp >> 8; } return b; } 6 字节数组到整数的转换 public static int toInteger(byte[] b) { int s = 0; for (int i = 0; i < 3; i++) { if (b[i] > 0) s = s + b[i]; else s = s + 256 + b[i]; s = s * 256; } if (b[3] > 0) s = s + b[3]; else s = s + 256 + b[3]; return s; } 7 短整数与字节数组之间的相互转换 short与int之间的区别在于short是两个字节的,而int是四个字节的。 因此,只需要将5 与6 中的范例程序小做改动,即可实现短整数与字节 数组之间的相互转换。 8 字节数组转换成双精度浮点数 public double toDouble(byte[] b) { long l = 0; Double D = new Double(0.0); l = b[0]; l |= ((long)b[1]<<8); l |= ((long)b[2]<<16); l |= ((long)b[3]<<24); l |= ((long)b[4]<<32); l |= ((long)b[5]<<40); l |= ((long)b[6]<<48); l |= ((long)b[7]<<56); return D.longBitsToDouble(l); } <淘宝热门商品:
 

5.00元  

皇冠 超细纤维毛巾|浴巾|干发帽|擦车巾|家居用品专卖

 

16.0元  

【珠三角商盟】联合利众●减肥瘦身●丰胸美乳●私处保养●美容


来源:程序员网

小小豆叮