??xml version="1.0" encoding="utf-8" standalone="yes"?>
”的解x?br />1、ueditor目录jsp目录下面有一个java文g
Uploader.java
2、把q个文g攑ֈsrc/ueditor包里?br />3、把ueditor/jsp/目录下面的两个jar包放到工E里?br />4 重新~译目ok,可以上传附g,囄?
有点高?/p>
1) h被发送到本机端口8080Q被在那里侦听的Coyote HTTP/1.1 Connector获得
2) Connector把该h交给它所在的Service的Engine来处理,q等待来自Engine的回?br />
3) Engine获得hlocalhost/wsota/wsota_index.jspQ匹配它所拥有的所有虚拟主机Host
4) Engine匚w到名为localhost的HostQ即使匹配不C把请求交l该Host处理Q因Host被定义ؓ该Engine的默认主机)
5) localhost Host获得h/wsota/wsota_index.jspQ匹配它所拥有的所有Context
6) Host匚w到\径ؓ/wsota的ContextQ如果匹配不到就把该h交给路径名ؓ""的Contextd理)
7) path="/wsota"的Context获得h/wsota_index.jspQ在它的mapping table中寻扑֯应的servlet
8) Context匚w到URL PATTERN?.jsp的servletQ对应于JspServletc?br />
9) 构造HttpServletRequest对象和HttpServletResponse对象Q作为参数调用JspServlet的doGet或doPostҎ
10)Context把执行完了之后的HttpServletResponse对象q回lHost
11)Host把HttpServletResponse对象q回lEngine
12)Engine把HttpServletResponse对象q回lConnector
13)Connector把HttpServletResponse对象q回l客户browser
<!----------------------------------------------------------------------------------------------->
<web-app>
<!-- 概述Q?br /> 该文件是所有的WEB APPq的部|配|文Ӟ
每当一个WEB APP被DEPLOYQ该文g都将先被处理Q然后才是WEB APP自己?WEB-INF/web.xml
-->
<!-- +-------------------------+ -->
<!-- | servletcd义部? | -->
<!-- +-------------------------+ -->
<!-- DefaultServlet
当用LHTTPh无法匚wM一个servlet的时候,该servlet被执?br /> URL PATTERN MAPPING : /
-->
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>
org.apache.catalina.servlets.DefaultServlet
</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- InvokerServlet
处理一个WEB APP中的匿名servlet
当一个servlet被编写ƈ~译攑օ/WEB-INF/classes/中,却没有在/WEB-INF/web.xml中定义的时?br /> 该servlet被调用,把匿名servlet映射?servlet/ClassName的Ş?br /> URL PATTERN MAPPING : /servlet/*
-->
<servlet>
<servlet-name>invoker</servlet-name>
<servlet-class>
org.apache.catalina.servlets.InvokerServlet
</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<!-- JspServlet
当请求的是一个JSP面的时候(*.jspQ该servlet被调?br /> 它是一个JSP~译器,请求的JSP面~译成ؓservlet再执?br /> URL PATTERN MAPPING : *.jsp
-->
<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
<init-param>
<param-name>logVerbosityLevel</param-name>
<param-value>WARNING</param-value>
</init-param>
<load-on-startup>3</load-on-startup>
</servlet>
<!-- +---------------------------+ -->
<!-- | servlet映射定义部分 | -->
<!-- +---------------------------+ -->
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>invoker</servlet-name>
<url-pattern>/servlet/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>*.jsp</url-pattern>
</servlet-mapping>
<!-- +------------------------+ -->
<!-- | 其它部分Q略d | -->
<!-- +------------------------+ -->
... ... ... ...
</web-app>
<!----------------------------------------------------------------------------------------------->
<!----------------------------------------------------------------------------------------------->
<!-- 启动Server
在端?005处等待关闭命?br /> 如果接受?SHUTDOWN"字符串则关闭服务?br /> -->
<Server port="8005" shutdown="SHUTDOWN" debug="0">
<!-- Listener ???
目前没有看到q里
-->
<Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" debug="0"/>
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" debug="0"/>
<!-- Global JNDI resources ???
目前没有看到q里Q先略去
-->
<GlobalNamingResources>
... ... ... ...
</GlobalNamingResources>
<!-- Tomcat的Standalone Service
Service是一lConnector的集?br /> 它们q一个Engine来处理所有Connector收到的请?br /> -->
<Service name="Tomcat-Standalone">
<!-- Coyote HTTP/1.1 Connector
className : 该Connector的实现类是org.apache.coyote.tomcat4.CoyoteConnector
port : 在端口号8080处侦听来自客户browser的HTTP1.1h
minProcessors : 该Connector先创?个线E等待客戯求,每个h׃个线E负?br /> maxProcessors : 当现有的U程不够服务客户hӞ若线EL不75个,则创建新U程来处理请?br /> acceptCount : 当现有线E已l达到最大数75Ӟ为客戯求排?br /> 当队列中h数超q?00Ӟ后来的请求返回Connection refused错误
redirectport : 当客戯求是httpsӞ把该h转发到端?443?br /> 其它属性略
-->
<Connector className="org.apache.coyote.tomcat4.CoyoteConnector"
port="8080"
minProcessors="5" maxProcessors="75" acceptCount="100"
enableLookups="true"
redirectPort="8443"
debug="0"
connectionTimeout="20000"
useURIValidationHack="false"
disableUploadTimeout="true" />
<!-- Engine用来处理Connector收到的Httph
它将匚wh和自q虚拟LQƈ把请求{交给对应的Host来处?br /> 默认虚拟L是localhost
-->
<Engine name="Standalone" defaultHost="localhost" debug="0">
<!-- 日志c,目前没有看到Q略d -->
<Logger className="org.apache.catalina.logger.FileLogger" .../>
<!-- RealmQ目前没有看刎ͼ略去?-->
<Realm className="org.apache.catalina.realm.UserDatabaseRealm" .../>
<!-- 虚拟Llocalhost
appBase : 该虚拟主机的根目录是webapps/
它将匚wh和自qContext的\径,q把h转交l对应的Context来处?br /> -->
<Host name="localhost" debug="0" appBase="webapps" unpackWARs="true" autoDeploy="true">
<!-- 日志c,目前没有看到Q略d -->
<Logger className="org.apache.catalina.logger.FileLogger" .../>
<!-- ContextQ对应于一个Web App
path : 该Context的\径名?"Q故该Context是该Host的默认Context
docBase : 该Context的根目录是webapps/mycontext/
-->
<Context path="" docBase="mycontext" debug="0"/>
<!-- 另外一个ContextQ\径名?wsota -->
<Context path="/wsota" docBase="wsotaProject" debug="0"/>
</Host>
</Engine>
</Service>
</Server>
<!----------------------------------------------------------------------------------------------->
1. 如何加大tomcatq接?/strong>
在tomcat配置文gserver.xml中的<Connector ... />配置中,和连接数相关的参数有Q?br /> minProcessorsQ最空闲连接线E数Q用于提高系l处理性能Q默认gؓ10
maxProcessorsQ最大连接线E数Q即Qƈ发处理的最大请求数Q默认gؓ75
acceptCountQ允许的最大连接数Q应大于{于maxProcessorsQ默认gؓ100
enableLookupsQ是否反查域名,取gؓQtrue或false。ؓ了提高处理能力,应设|ؓfalse
connectionTimeoutQ网l连接超Ӟ单位Q毫U。设|ؓ0表示怸时Q这栯|有隐患的。通常可设|ؓ30000毫秒?br />
其中和最大连接数相关的参CؓmaxProcessors和acceptCount。如果要加大q发q接敎ͼ应同时加大这两个参数?br />web server允许的最大连接数q受制于操作pȝ的内核参数设|,通常Windows?000个左叻ILinux?000个左叟뀂Unix中如何设|这些参敎ͼ请参?a target="_blank">Unix常用监控和管理命?/a>
tomcat4中的配置CZQ?br /> <Connector className="org.apache.coyote.tomcat4.CoyoteConnector"
port="8080" minProcessors="10" maxProcessors="1024"
enableLookups="false" redirectPort="8443"
acceptCount="1024" debug="0" connectionTimeout="30000" />
对于其他端口的侦听配|,以此cL?br />
2. tomcat中如何禁止列目录下的文g
在{tomcat_home}/conf/web.xml中,把listings参数讄成false卛_Q如下:
<servlet>
...
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
...
</servlet>
3. 如何加大tomcat可以使用的内?/strong>
tomcat默认可以使用的内存ؓ128MBQ在较大型的应用目中,q点内存是不够的Q需要调大?br />
Unix下,在文件{tomcat_home}/bin/catalina.sh的前面,增加如下讄Q?br /> JAVA_OPTS='-Xms【初始化内存大小?-Xmx【可以用的最大内存?
需要把q个两个参数D大。例如:
JAVA_OPTS='-Xms256m -Xmx512m'
表示初始化内存ؓ256MBQ可以用的最大内存ؓ512MB
4. 如何d默认讉K面
修改文gweb.xmlQ在welcome-list里面dindex.wml作ؓ默认的访问页?br /> <welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
echo Using JVM: %PR_JVM%
"%EXECUTABLE%" //IS//%SERVICE_NAME% --StartClass org.apache.catalina.startup.Bootstrap --StopClass org.apache.catalina.startup.Bootstrap --StartParams start --StopParams stop
一句后面加?--DependsOn oracle侦听服务Qoracledatabse
注意用;号隔开依赖的服?br />
再执行bin/service.bat install jnszcg Q即可安?span class="hilite1">Tomcat服务Qƈ且依赖oracle
其实很简单就是制定服务的依赖关系Q?br />
最后采取的Ҏ成功了:
1、把tomcat做到服务里面Q手工启动;
2、新Z个批处理net start tomcat
3、新Z个Q务,在计机启动的时候执行批处理ok
是不是问题已l解决了
最q要研究一下JBOSS的一pd产品Q?br />
Error reading from server <192.168.0.108>: -1: Unknown error
解决的方法是q样的:NODE 32里面IMON点击后-Q?gt;
双H口点击SETUp按钮Q->
弹出的窗口里面MiscellaneousQ->
ExcluSionQ->
Edit-->
C:\Program Files\CVSNT\cvsservice.exeQ->d上就ok?br />
你的CVSpd了!Q!
dn: cn=manager,o=chinantn,dc=com
objectclass: organizationalPerson
objectclass: person
objectclass: top
cn: manager
sn: badboyryan
userpassword:: c2VjcmV0
dn: ou=departments,o=chinantn,dc=com
objectclass: organizationalUnit
objectclass: top
ou: departments
dn: ou=market,ou=departments,o=chinantn,dc=com
objectclass: organizationalUnit
objectclass: top
ou: market
dn: ou=developer,ou=departments,o=chinantn,dc=com
objectclass: organizationalUnit
objectclass: top
ou: developer
dn: ou=service,ou=departments,o=chinantn,dc=com
objectclass: organizationalUnit
objectclass: top
ou: service
dn: ou=finance,ou=departments,o=chinantn,dc=com
objectclass: organizationalUnit
objectclass: top
ou: finance
dn: ou=directorate,ou=departments,o=chinantn,dc=com
objectclass: organizationalUnit
objectclass: top
ou: directorate
dn: ou=engineer,ou=departments,o=chinantn,dc=com
objectclass: organizationalUnit
objectclass: top
ou: engineer
dn: ou=partners,o=chinantn,dc=com
objectclass: organizationalUnit
objectclass: top
ou: partners
dn: ou=customers,ou=partners,o=chinantn,dc=com
objectclass: organizationalUnit
objectclass: top
ou: customers
dn: ou=suppliers,ou=partners,o=chinantn,dc=com
objectclass: organizationalUnit
objectclass: top
ou: suppliers
dn: ou=employees,ou=partners,o=chinantn,dc=com
objectclass: organizationalUnit
objectclass: top
ou: employees
W二步:人员信息
dn: uid=scf,ou=developer,ou=departments,o=chinantn,dc=com
objectClass: person
objectClass: uidObject
objectClass: organizationalPerson
objectClass: top
cn: sss
sn: scf
uid: scf
userpassword:: e01ENX1YTXNwY1ZWVFhUbFh1K1M0QllLY0hBPT0=
人员信息少写一点了Q有IZ再慢慢的补充上?br />W三步:导入LDIF文gQ这个时候LDAP服务器里面就有了一|Q组l结构)
W四步:被指jira让他利用LDAP认证来登录系l,如下图所C:
l过上面的折腑ְ完成了一个通过LDAP认证的小例子了?br />注意转帖的时候带上:
©所有:http://badboyryan.blogjava.net
随意的{帖不受法律约束?br />
在JMS1.1规范中规定了5UJMS消息cd,分别如下:
1.创徏一个TextMessage
TextMessage message;
message = session.createTextMessage();
2.解包一个TextMessage
去解包一个TextMessagecd的消息,客户端可以用Message.getTextҎQ?/p>
String stockInfo;
stockInfo = message.getText();
3.创徏一个BytesMessage
byte[] stockData;
BytesMessage message;
message = session.createBytesMessage();
message.writeBytes(stockData);
4.解包一个BytesMessage
当接收到一个ByteMessageӞ可以使用下面的方式来解包Q?/p>
byte[] stockInfo;
int length;
length = message.readBytes(stockData);
消息体被拯到字节数l,客户端程序可以读取这个树l来解释数据?/p>
5.创徏一个MapMessage
MapMessage message;
message = session.createMapMessage();
...其他代码
message.setString("Name", "CN-Java");
message.setDouble("Value", stockValue);
message.setLong("Time", stockTime);
message.setDouble("Diff", stockDiff);
message.setString("Info", "Recent server announcement causes market interest");
6.解包一个MapMessage
stockName = message.getString("Name");
stockDiff = message.getDouble("Diff");
stockValue = message.getDouble("Value");
stockTime = message.getLong("Time");
如果你想得到整个元素的列表,可以使用MapMessage.getMapNamesҎ来获得?/p>
7.创徏一个StreamMessage
和MapMessage怼Q一个应用程序可以按序列发送多个字D到一个消息中Q这些字D都是原始类型的Q要做这些,你可以用一个StreamMessageQ?/p>
message.writeString(stockName);
message.writeDouble(stockValue);
message.writeLong(stockTime);
message.writeDouble(stockDiff);
message.writeString(stockInfo);
8.解包一个StreamMessage
StreamMessage中的元素必须按照被写入的序dQ?/p>
stockName = message.readString();
stockValue = message.readDouble();
stockTime = message.readLong();
stockDiff = message.readDouble();
stockInfo = message.readString();
9.创徏一个ObjectMessage
ObjectMessage message;
message = session.createObjectMessage();
message.setObject(stockObject);
10.解包ObjectMessage
去解包ObjectMessage,使用ObjectMessage.getObject得到对象Q一但对象被取出来,客户端程序用Java造型语句对象还原成原始对象?br />StockObject stockObject;
stockObject = (StockObject)message.getObject();
JBUILDER2007企业版下? 支持q雷http://altd.borland.com/akdlm/download/jbuilder/JBuilder_2007/Enterprise/JBuilder2007_enttrial.zip 破解补丁的两个文? http://www.china-polo.com.cn/[JBuilder.2007.].sanct6.jar http://www.china-polo.com.cn/[JBuilder.2007.].sanctuary.jar q两个文件放到csdn的下载频道了攒点U分 http://download.csdn.net/user/songchaunfang
破解说明Q?
中文包安装方?把中文包里的两个目录:license和features 解压?X:\JBuilder2007\jbuilder\eclipse\ |
最q给替一个朋友出的几道java的面试题Q主要是面试java高工程师,报酬是晚饭Q已l落的卖艺的境地?br />题目很简?br /> Integer i1 = 100; Integer i2 = 100; Integer i3 = 1000; Integer i4 = 1000; System.out.println(i1==i2); System.out.println(i3==i4); 很遗憾,没有一个答对的Q正答案是 true false 如果面试者写q样的写是错误的Q就通过?br />q个的原因要从java5的Boxing和unboxing谈vQboxing是装基本cd的对象,unboxing是转换对象到基本类型?br />Integer, Long, Float, Double, Short, Character etc.都是q样的类型他们是immutable?br />Boxing 在jdk1.4.2中, 必须?/ Assigning primitive type to wrapper type Integer iWrapper = new Integer(10); java5?br /> // Assigning primitive type to wrapper type Integer iWrapper = 10; unboxing 在jdk1.4.2中, int iPrimitive = iWrapper.intValue(); java5?br />int iPrimitive = iWrapper; 下面是基本类型作为对象存储的范围Q?br />boolean values true and false All byte values short values between -128 and 127 int values between -128 and 127 char in the range \u0000 to \u007F 如果int values between -128 and 127QVM使用相同的对象,否则创徏新的对象?br />所以这D代码,大家不要奇?br />System.out.println(0L == 0); System.out.println(((Long)0L).equals(0)); W二行代码是0不等? 因ؓ大家犯这L一个错?br /> static private final String LOCK = "LOCK"; void testMethod() { synchronized(LOCK) { ... } } 应该用newQ不要直?Q对于intQ最好用int a[0] Q因为array也是对象Q不像IntegerQa[0]的值可以改变?br /> |
一个好的程序员除了具备扎实的基本功外,q应该具有更为灵zȝ逻辑思维与判断能力。除此之外,撑握一些行之有效的辅助工具也很重要。工Ʋ善其事,必先利其器。有好的工具辅助Q所做的工作事半功倍。下面向大家推荐ZWEB应用开发的javaE序员应该必备的辅助开发工兗?br /> 1QJava剖析工具 -- profiler 是一个全功能的Java剖析工具QprofilerQ,专用于分析J2SE和J2EE应用E序。它把CPU、执行A和内存的剖析l合在一个强大的应用中。JProfiler可提供许多IDE整合和应用服务器整合用途。JProfiler直觉式的GUI让你可以扑ֈ效能瓉、抓出内存漏?(memory leaks)、ƈ解决执行l的问题。它让你得以对heap walker作资源回收器的root analysisQ可以轻易找出内存漏失;heap快照QsnapshotQ模式让未被参照QreferenceQ的对象、稍微被参照的对象、或在终l(finalizationQ队列的对象都会被移除;整合_以便剖析览器的Java外挂功能?br />下蝲地址Qhttp://www.ej-technologies.com/download/overview.html 2Q冗余代码检查 -- Simian Simian UI 是一个用来发现重复代码的eclipse插gQ对于改善设计,消除冗余代码很有帮助?br />安装ҎQ用eclipse的Help->Software Updateq行安装。站点地址?http://www.integility.com/eclipse/ 安装后,按照提示重新启动eclipse。在希望q行分析的项目上点击右键Q选择Simian->Add Simian to this projectQ就可以目q行代码查?br /> 3Q浏览器端调试工PIEQ -- Internet Explorer Developer Toolbar 微Y发布了Internet Explorer Developer Toolbar Beta版。该产品让开发h员能够深入探索和理解Web面Q帮助开发者更好地创徏Web应用。浏览和修改Web늚文档对象模型QDOMQ。具备以下特性: Q通过多种技术方式定位、选定Web上的特定元素?br />Q禁止或ȀzIE讄?br />Q查看HTML对象的类名、IDQ以及类似链接\径、tab序、快捷键{细节?br />Q描l表根{单元格、图片或选定标签的轮廓?br />Q显C图片象素、大、\径、替代文字等?br />Q即旉定义览器窗口大到800x600或自定义大小?br />Q清I浏览器~存和cookieQ被清除可从所有对象或l定域中选择?br />Q直接访问关联W3C规范参考、IE开发组blog或其他来源?br />Q显C计时标尺Q帮助对齐对象?br />该工h可集成在IEH口Q或以Q动窗口Ş式存在?br /> 下蝲地址Q从微Y官方下蝲 4Q浏览器端调试工PFirefoxQ -- Firebug JavaScript, CSS, HTMLQAjax调试工具。功能包括HTML/CSS查,除错工具Q错误控制台和命令行{。可对javascript做调试和性能分析Q查看html代码的结构,css样式动态提C,ƈ昄面错误Q浏览树型结构的DOM数据Q可以显Cjavascript的log{等功能?br /> 下蝲地址Qhttp://www.getfirebug.com/ |
|
1 | package onlyfun.caterpillar; |
1 | <?xml version="1.0" encoding="UTF-8"?> |
1 | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> |
1 | window.onload = function() { |
1 | package onlyfun.caterpillar; |
1 | <?xml version="1.0" encoding="UTF-8"?> |
1 | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> |
1 | function refreshYearList() { |
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1239538
q年来随着我国金融体制攚w的不断深人,银行企业不断利用信息技术拓宽业务,其中对于自助银行Q其得C飞速发展,因此Q依托现在计机技术、网l通信技术、数据安全技术开发出能对各种自助l端q行监控Q网l拓展性良好,使用灉|方便Q安全的银行自助l端监控pȝ成ؓ当务之急。利用J2EEpȝq_[1]Q能有效地实现分布式多层体系l构的应用程序开发?/p>
1 RMI[2]
RMI(Remote Method InvocationQ远E方法调?是J2EE技术中的一,是Java语言实现有力|络功能的固有机ӞRMI允许Java~写分布式对象,q允许对象在内存中通信Q可跨越Java虚拟机通信[3-4]Q也可跨物理设备?br />
RMI实现实际上由3个抽象层建立Q?/p>
StubsQSkeletons Layer(存根/L?QRemote Reference Layer(q程引用?QTransport Layer(传输??/p>
2 监控pȝ的设计与实现
2Q? pȝ|络l构
本系l以中国银行内部Intranet|络Z托,采用集中式网l结构构成。如?所C?/p>
![]() |
---|
pȝ采用一台监控服务器Q连在中国银行Intranetd|上Q和提供数据源的前置机放入同一|段。服务器L上运行Web服务器、应用服务器和数据库服务器,为用h供Web方式讉K。监控客L以浏览器的Ş式在工作站上通过|络直接讉Kweb服务器,q行信息查询、监控管理、报表打印、系l维护等。Intranet环境内其他用户可通过路由器、DDN专线从相应工作站以web形式讉KWeb服务器?/p>
2Q? pȝ逻辑层次l构?/strong>
监控pȝ由数据库服务器、应用服务器、web服务器和览器组成,通过IntranetQInternet与综合前|系l连接?br />
本文?层结构模式应用于银行自助l端监控pȝQ这3层分别是Q客户层QWeb?应用逻辑?Q数据存储层(见图2)?/p>
![]() |
---|
q种l构无疑是富有生命力的,监控C用浏览器直接与银行Intranetq接Q监控服务器(监控服务器由Application Server和DB Servet两台服务器组?在接入Intranet之前与一个Web Serverq接Q再通过Web Server接入Internet。通过Internet在监控服务器与监控台之间建立物理q接?/p>
2.3 应用pȝl构
自助讑֤监控pȝ是监控前端自助设备运行状态,交易情况的网上应用系l,他的数据来自于数据采集模块。前端自助设备运行时发送状态交易数据到前置机、主机系l,由前|机、主机系l进行处理,q将状态数据、交易情况记入数据库或LOG文g中。如?所C,q控系l数据采集模块定旉集数据库或LOG文g中的数据到监控数据库中,监控应用pȝ负责对监控数据统一处理Qƈ通过监控客户端实时请求发送到监控客户端进行显C及其他处理?/p>
![]() |
---|
3 RMI技术在监控pȝ中的应用
中国银行天|分行在每个地区都下设支行Q每个支行负责管理本地区的ATM|点Q因此各个支行之间网点ATM自助讑֤的状态、交易信息不能共享.那么各个地区的监控客L只能通过本地区支行的监控服务器实时监控本地区的ATM|点的自助终端设备,Z使n处各个地区的监控客户端都能够监控各个支行所辖的ATM|点自助l端讑֤Q就必须采用分布式的监控pȝ。每个支行都讄一台监控服务器Q与各自所在支行的前置pȝ相连接,利用RMI技术将实时监控、远E控制、查询统计组件注册ؓq程对象Q监控客h在Q何支行的监控服务器上的注册服务表用远E对象的名字查找相应q程对象Q然后调用他的方法,可以像监控本地区的ATM自助l端讑֤那样监控其他地区的ATM自助l端讑֤?
下面本文以对ATM状态的实时监控如何借助RMI技术实现做以讨?sup>[5]?/p>
3Q? 定义q程接口
在Java中,q程对象是实现远E接口的cȝ实例Q远E接口声明每个要q程调用的方法。在需要创Z个远E对象的时候,通过传递一个接口来隐藏基层的实施细节,客户通过接口句柄发送消息即可。远E接口具有如下特点:
(1)q程接口必须为public属性?br />
(2)q程接口必须扩展接口javaQrmiQRemote?br />
(3)除与应用E序本n特定的例外之外,q程接口中的每个Ҏ都必d自己的throws从句中声明javaQrmiQRemoteException?br />
(4)作ؓ参数或返回g递的一个远E对?不管是直接,q是本地对象中嵌?必须声明E接口,而不应声明ؓ实施cR?br />
下面是对ATM状态实时监控的q程接口ATM_StatusShow_Interface的定义?/p>
3Q? 实现q程接口[6]
q程对象实现cdL展远E对象javaQrmiQUnicastRemoteObjectc,q实现所定义的远E接口。远E对象的实现cM包含实现每个q程接口所指定的远E方法的代码。这个类也可以含有附加的ҎQ但客户只能使用q程接口中的Ҏ。因为客h指向接口的一个句柄,而不是他的哪个类。必Mؓq程对象定义构造函敎ͼ即只准备定义一个默认构造函敎ͼ用他调用基础cL造函数?/p>
3Q? ~写服务器类
通过ATM_StatusShow_Server创徏一个远E对象的实例Qƈ通过javaQrmiQregistryQLocateRegistrycȝcreateRegistryҎ从指定端口号启动注册服务E序Q注册服务程序的~省q行端口?099。必dq程对象名字l定到对q程对象的引用上?/p>
3Q? ~写使用q程服务的客hcR?/strong>
3Q? E对象实现创建根和干
q行rmicQRMI目录下就会多?个新c: ATM_StatusShow_Impl_StubQclass ATM_StatusShow_Impl_SkelQclass 他们分别对应的是存根(stub)和主?skeleton)?/p>
4 l??/strong>
本系l在中国银行天|分行的支持下已投入用,l过多次试和实际运行,用户对于本系l的评h比较满意。在q行速度和运行稳定性上都能辑ֈ要求。对于用L日常工作负担起到了较大减ȝ作用Q提高了工作效率Q简化了沟通手l,丰富了查询能力,使统计结果更加实时、灵zd准确。从技术角度上看,本系l采用RMI技术非常好地解决了分布式应用的问题?br />
客户机类的主要功能有2个:一是通过NamingQlookupҎ来构造注册服务程序stubE序实例Q二是调用服务器q程对象上的q程Ҏ?/p>
要创建存根程序和L文gQ应以包含远E对象实现的已编译类包全名运行rmic~译器。存?Stub)是远E对象在客户端的代理Q他RMI调用传递给服务器端的主?Skeleton)Q后者负责将该调用传递给实际的远E方法:
|
以下为引用内?
更新[2005.10.06]Q?br />JavaScript提供了一U更便的Ҏ用于比较两个字符东y—localeCompare()QlocaleCompare()使用本地特定的顺序来比较两个字符Ԍ语法如下Q?br />string.localeCompare(target)
参数target是要与stringq行比较的字W串?br />如果string于targetQ则localeCompare()q回于0的数Q?br />如果string大于targetQ返回大?的数Q?br />如果相等Q或按照本地序的约定两者顺序相当)Q则q回0?br />利用该方法替换上面冗长的作法后,除了代码减少了之外,q行速度也快了不,而且q支持其它字W库的本地排序?br />修改后代码如下:
该方法目前已作ؓECMAScript v3标准Q在支持JavaScript 1.5QMozilla、Netscape 6+Q以及JScript 5.5QIE 5.5+Q的览器中均得C支持?
代码如下Q?br />
<script type="text/javascript">
<!--
function startSort(){
var a=document.getElementById('s').value;
a=a.split(',')
a.sort();
document.getElementById('r1').value=a;
a.sort(function(a,b){return a.localeCompare(b)});
document.getElementById('r2').value=a;
}
//-->
</script>
<p>包含汉字的字W串数组(用逗号","隔开)Q?lt;br />
<textarea id="s" style="width: 100%; overflow: scroll; word-wrap: normal;" rows="10">张韶?b?abort,张学?something,Ҏ,五月?刘d?香蕉,apple,范玮?阿桑</textarea></p>
<p style="text-align: center"><input type="button" value="排序试" onclick="startSort()" style="width: 300px" /></p>
<p>默认排序l果Q?lt;br />
<textarea id="r1" style="width: 100%; overflow: scroll; word-wrap: normal;" rows="10"></textarea></p>
<p>汉字拼音序排序l果Q?lt;br />
<textarea id="r2" style="width: 100%; overflow: scroll; word-wrap: normal;" rows="10"></textarea></p>